新手向求助破解思路/操作
本帖最后由 cby120 于 2020-2-4 01:06 编辑这个程序可以通过显示器驱动模拟一个显示器接入,可以让系统保持视频信号输出,便于远程VNC连接。软件通过激活码验证的,
注册完成后会在安装路径下生成一个license.dat文件。软件有试用机制,若不注册,可以试用10分钟,到时间会停止服务,弹出注
册提示。
蓝奏 https://www.lanzouj.com/i8zfhje
关于注册结果的跳转如图
把jnz改成nop后虽然可以弹出注册成功的信息,但是10分钟后依然会弹出注册提示,说明与注册相关的验证不止一处,已知的
就有证书文件的验证,还有计时相关操作的处理。我也想过破坏计时相关的操作,在主程序DisplayA中找到了两个SetTimer和一个
KillTimer,尝试nop但是没什么用,用 bp SetTimer 只在user32里面下一个断点,也确实会在所有界面操作的时候频繁触发,用bp
TimerProc 和 bp GetCurrentTime 都断不到任何东西。观察计时结束后退出时的细节发现,在接入显示器被弹出后,主程序并没有
结束,而是又经过一些流程后才退出,说明主程序里面有结束显示器驱动进程的相关操作。跟随注册成功后面的流程无限单步,遇
到call就运行到return,回到主程序继续单步发现程序进入一个循环,如图
seg000:00000998 lea eax,
seg000:0000099B push eax
seg000:0000099C push ebx
seg000:0000099D push dword ptr
seg000:000009A0 call dword ptr ds:42423Ch
seg000:000009A6 test eax, eax
seg000:000009A8 jnz short loc_9BA
seg000:000009AA lea eax,
seg000:000009AD push eax
seg000:000009AE call edi
seg000:000009B0 lea eax,
seg000:000009B3 push eax
seg000:000009B4 call dword ptr ds:424234h
seg000:000009BA
seg000:000009BA loc_9BA: ; CODE XREF: seg000:000009A8↑j
seg000:000009BA push 0
seg000:000009BC push 0
seg000:000009BE push 0
seg000:000009C0 lea eax,
seg000:000009C3 push eax
seg000:000009C4 call esi
seg000:000009C6 test eax, eax
seg000:000009C8 jnz short loc_998
seg000:000009CA mov ebx,
在软件进入计时等待阶段后就一直在这个循环里面。这个循环里面有一个小跳转会跳过程序中的一部分,如果跳转实现则一个循环中包含1
个call,调用ntdll;若不实现则包含3个call,都是调用系统模块的,里面还有很多层调用和跳转,反复观察也弄不懂是做什么的[\我太菜了],
但是发现程序会在从上到下的第一个call里面停留很久,怀疑有关于计时的东西,并且程序开始运行和提示注册并终止相关进程的时候都
会进入这个循环,相关操作都是在这个call里面完成的,我猜测是有关证书文件的校验的,但是完全看不懂在里面具体做了什么。。我也
试过用IDA分析这部分调用的结构,但是这些call都是dword方法,在OD里面自动解析出具体的操作内容,IDA不会搞[\我太菜了]
程序需要调用ntdll,user32等模块。
目前我能想到的处理方式:
1. 破坏试用计时或修改试用时长
2. 找到其他注册验证的相关操作并修改(证书文件,可能还有更多),正面破解
3. 找到结束显示驱动进程的操作,nop掉(这样虽然主程序退出了但是需要的虚拟显示器还在)
需要解决的问题:
0. 我太菜了{:1_911:}
1. 系统的动态内存分配对分析造成了相当的困难,IDA和OD里面的相对地址也不一样??
2. 调用ntdll时是循环执行同一段代码,寄存器在变,我又看不出来程序在做什么。。。
3. 文件相关的处理是通过指向文件的指针实现的吗?[我猜] 只在主程序里面看到相关文件名的字符串,不知道证书文件验证是怎样执行的;
4. 计时器相关的东西找不到,看到的SetTimer没有用,而运行耗时(延时)的部分在ntdll里面,也找不到传递时间值的操作。。
5. 程序退出时需要结束的进程比较多,也不知道断点应该下在哪里,驱动部分退出时程序还在ntdll的call里面(图2循环的第一个call)
目前也实现了,通过OD下一个断点,在程序结束有关进程之前把主程序卡死,就能保持虚拟显示器接入的状态,但是太丑陋了。。
(OD必须一直开着)
2020.2.2 8:00
==========更新线===========================================================================
更新
找到了一些关键的地方,包括读取证书文件和注册提示触发等,发现很多弹框弹出前都会call这个函数,然而又不知道这个函数做了什么。。
如图
我在点击菜单选项->插入虚拟显示器出发的流程里面修改了一些跳转,感觉运行的流程没什么问题,但是虚拟显示器却没有插入。右键点击
托盘图标的时候会读取一次证书文件,具体的校验过程我还没有定位到,不知道有什么特征,我怀疑是右键点击的时候会根据证书校验结果
的不同出发不同的菜单。。
求助大家,我在努力了
2020.2.4 1:00
=========================================================================================
更新
又研究了一晚上,感觉还是没有抓住关键。。有几个调用不知道是做什么的utcrbase gdi32ful
然后学会用记录功能以后感觉有点方向了我好菜应该先研究软件启动时校验本地时间、机器码和证书的过程,里面应该就包括本地证书校验
的相关内容。
目标:
1. 先解决试用过期的问题
2. 尝试定位判断时间是否过期的部分并修改,实现方案1
3. 定位并尝试修改校验证书文件的部分
问题:
1. OD的RUN跟踪貌似不记录call内部的内容,会不会漏掉重要的流程。。
2. 如何把命令的地址定位。。每次分配到的地址都不一样太不利于分析了。。
这两个问题应该很方便回答了吧{:1_889:}
2020.2.2 22:00
=========================================================================================
以下是废话
这是我第一次深度地尝试破解一个软件(以前尝试过一次,结果第一次就遇到了SE的壳,然后就放弃了),基本没什么汇编基础,内存相关
的东西,压栈出栈什么的概念也不太清楚,也不是从业者,对系统相关的接口都不熟悉,希望大佬坛友们能帮我了解相关常识,让萌新开开
眼界{:1_932:}这不算求破吧我好方
huzpsb 发表于 2020-2-2 15:11
你断点下在哪里呢?其实如果你知道这个结束前的地址,直接retn若干次就可以了,多试几次要retn几次也不难.
程序的出点好像在ntdll里面,寄存器的pop好像都不是在主程序里面实现的。。包括计时器(界面相关的计时器??但是只有user32里面能用bp SetTimer下一个断点),然后我就不会下断点了。。没思路 cby120 发表于 2020-2-2 16:37
程序的出点好像在ntdll里面,寄存器的pop好像都不是在主程序里面实现的。。包括计时器(界面相关的计时器 ...
目测你好像是在说NTTerminalProcess里面(我猜的,你还是要在SEH里面查一下),你不如直接把它hook了多好? 我猜是驱动验证… 你断点下在哪里呢?其实如果你知道这个结束前的地址,直接retn若干次就可以了,多试几次要retn几次也不难. 汇编压栈,出栈内存都不知道,这就有点难办呢… 不过还是可以试一下,你的那个跳转上面不是有一个call吗?右击它,查找,所有调用,找出所有调用,全下断,或单击进入…全改了,试试吧!祝你好运! 本帖最后由 cby120 于 2020-2-2 16:38 编辑
无闻无问 发表于 2020-2-2 15:19
汇编压栈,出栈内存都不知道,这就有点难办呢…
压栈出栈的概念是知道的,但是出栈的变量去做什么就不太清楚。。。如果涉及到一些概念也不用考虑我,不懂的我自己去学就可 无闻无问 发表于 2020-2-2 15:10
我猜是驱动验证…
程序获取过一次处理器ID,应该是这个吧 现在已经没有10分钟试用了,程序在启动时获取了一次系统时间,要先把这个处理一下。。
页:
[1]
2