前几天破解了 113号文,后来发现113号已经不更新了,新版本是铁路工程投资控制系统,于是下载了。
装上一看,根目录下有个sense4.dll,吓一跳,深蓝的狗可不好弄,又上他的网站看看,结果看到 113号的狗可以用在新软件上,就是说同时有深蓝的狗和ROCKEY4的狗,而且都可以用,结合上个软件经验,R4的狗应该容易点,于是用peid看一下主程序是.net的,.net程序可不好跟,又看了看R4的文档,c#的样例里提到了使用c#之前要先注册Ry4Com.dll的服务,于是用od加载Ry4Com.dll看看代码再说,结果一看在系统io读狗部分和RYDLL32.DLL几乎一样,于是想到爆破。
ok说干就干,在Ry4Com.dll中的
10007650 . FF15 84000110 call dword ptr [<&KERNEL32.DeviceIoCo>; \DeviceIoControl
处下断点。
再用od打开源程序,有2个异常,用shift+F9跳过,在断点处停下来了,再跟踪至返回,到了
068D48C8 . 57 push edi ; p2
068D48C9 . 51 push ecx ; p1
068D48CA . 8B8C24 641000>mov ecx, dword ptr [esp+1064]
068D48D1 . 52 push edx ; lp2
068D48D2 . 50 push eax ; lp1
068D48D3 . 51 push ecx ; 回调句柄
068D48D4 . 55 push ebp ; 调用号
068D48D5 . E8 962A0000 call 068D7370 ; 与狗通讯
068D48DA . 83C4 24 add esp, 24 《——————这里
发现那个call前面的一堆push了吗?再拿出R4手册看看,对了,就是在执行Docmd函数的操作对照手册我写下了以上几行的注释,就是各个push的参数值。
现在把DeviceIoControl处的断点取消,在068D48C8 处从新下断点,在od中重新加载程序,在068D48C8 处断下了,F8跟出调用号,参考R4手册,第一次是找狗,第二次是打开狗,第三次是查找狗内的模块是否可读(顺序为7,8,9,如果7可读就不往下找了)。
ok,程序分析基本就到这里,知道程序只使用了简单的几个狗函数,咱就有办法,爆破之!
首先,让Ry4Com不返回错误,也就是让其每次返回0(无错误,错误代码参考R4手册),原代码如下:
1000765E . 66:8B4424 10 mov ax, word ptr [esp+10]
10007663 > 8B8C24 8C0200>mov ecx, dword ptr [esp+28C]
1000766A . 338C24 900200>xor ecx, dword ptr [esp+290]
改为:
1000765E 66:B8 0000 mov ax, 0
10007662 90 nop
10007663 > 8B8C24 8C0200>mov ecx, dword ptr [esp+28C]
1000766A . 338C24 900200>xor ecx, dword ptr [esp+290]
好了,把Ry4Com另存一下,再用修改过的Ry4Com加载程序,先运行一下,还是显示没检测到狗,为什么呢?因为检查模块时我们没有返回7号模块可读!
好,再次用od把源程序加载,再次断在 068D48C8 处,先让其运行一次,看调用码,第一次是1,第二次是3,第三次是C(十进制的12),在第三次时跟进
068D48D5 . E8 962A0000 call 068D7370
在
1000765E 66:B8 0000 mov ax, 0
10007662 90 nop
10007663 > 8B8C24 8C0200>mov ecx, dword ptr [esp+28C]
1000766A . 338C24 900200>xor ecx, dword ptr [esp+290]
处我们要修改代码把p2位置改为01,但是我们发现没地方写代码了,在程序内找块空地,比如0691F084及之后都是0000,挺好,将1000765E 处改为:
0691765E /E9 217A0000 jmp 0691F084 ;我跳
我们跳到了0691F084 ,在这里想想我们要完成几件事,1、将p2参数改为01(显示所请求的模块是允许的),2、将eax改为0(错误代码为0,也就是没错误),知道我们要干嘛了就开工,可是我们怎么得到p2的地址呢?仔细观察cpu的寄存器,看到了吗?edi的值就是p2的位置!ok,我们的代码如下:
0691F084 8907 mov dword ptr [edi], eax
0691F086 90 nop
0691F087 66:B8 0000 mov ax, 0
ok,完成了我们的任务了下一步要返回原来的程序流程,代码如下:
0691F08B ^\E9 D385FFFF jmp 06917663
ok,咱把代码全部复制另存,接着把新版的Ry4Com.dll覆盖原有的Ry4Com.dll再次运行《铁路工程投资控制系统》。
ok,软件可以正常使用了。
相关文件见我的博客:liupeng.info
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课