cat73 发表于 2014-3-27 22:22

DNF双开工具无需简单百宝箱运行

本帖最后由 cat73 于 2014-3-27 22:54 编辑

初次写破解过程 不会排版 敬请谅解喵 麻麻说卖萌无罪喵~~

最初想先查导入表看看有啥明显的函数如FindWindow这类
结果一看一堆MFC42.#****这种函数
由于之前没有这类东西的调试经验(俺还是新手的喵- -)
然后本来很简单的事浪费了好多时间

最开始想用OD搞进去之后找哪儿有跳转指令的
结果发现开始的结构很简单 都是些无关紧要的跳转
后来就想 开着简单百宝箱看看是哪个call里头创建的窗口

00406AEA|.FF15 B0F04100 call dword ptr ds:[<&KERNEL32.GetModuleH>; \GetModuleHandleA
00406AF0|.50            push eax
00406AF1|.E8 D0600100   call DNFMulti.0041CBC6
00406AF6|.8945 98       mov ,eax
00406AF9|.50            push eax                                 ; /status
00406AFA|.FF15 DCF44100 call dword ptr ds:[<&MSVCRT.exit>]       ; \exit

结果就在00406AF1这的这一句创建的窗口 然后就跟进去了

0041CBC6/$FF7424 10   push dword ptr ss:
0041CBCA|.FF7424 10   push dword ptr ss:
0041CBCE|.FF7424 10   push dword ptr ss:
0041CBD2|.FF7424 10   push dword ptr ss:
0041CBD6|.E8 11020000   call <jmp.&MFC42.#1576>
0041CBDB\.C2 1000       retn 0x10

根据以往的经验 跳出主程序领空的代码就没必要跟了
结果由于这经验一开始浪费了不少时间 后来才知道这货跟易语言一个德行
主程序里就一小段初始化的代码 重要的东东都在别的领空里- -
结果就浪费了不少的时间才找到这- - 好了不说废话了跟进去

因为没开简单百宝箱的时候没创建窗口程序就死了
因此进去之后就先简单的一个个call看是哪个call创建的窗口
然后就找到了下边这地方

71543515    8BCE            mov ecx,esi
71543517    FFD0            call eax
71543519    85C0            test eax,eax

继续跟进去 发现004019A9处会跳过载入过程直接跳到ret前边一点

004019A7   .84C0          test al,al
004019A9      0F84 65010000 je DNFMulti.00401B14
004019AF   .E8 5CFDFFFF   call DNFMulti.00401710

nop掉之后发现破解完成了- -
看看时间 已经过去了半个多小时- -
然后reshacker做了点小改动啥的 再用winhex改掉了广告网址
在去掉些无关紧要的文件 就算是完工了

另 反汇编代码中多次出现
00401608|. /EB 10         jmp XDNFMulti.0040161A
0040160A|. |56 4D 50 72 6>ascii "VMProtect begin",0
这种代码 看起来这作者也不大懂这种代码的意义
只是觉得加上好像就安全似的 其实这货是加VMP壳的时候用的标签- -
不加壳的话等于没有- -

总结 虽然这次走了不少弯路 不过这都是宝贵的经验
下次绝对不会再因为这种事走弯路啦~~

后续:这货检测简单百宝箱是否存在的办法
0040161D|.50            push eax                                 ; /Title = "\xBC

\xF2\xB5\xA5\xB0\xD9\xB1\xA6\xCF\xE4"
0040161E|.6A 00         push 0x0                                 ; |Class = 0x0
00401620|.FF15 B8F54100 call dword ptr ds:[<&USER32.FindWindowA>>; \FindWindowA
00401626|.85C0          test eax,eax
00401628|.75 4A         jnz XDNFMulti.00401674
搜寻标题为"简单百宝箱"的窗口 找到则直接跳到返回成功的部分
没找到继续执行下面代码
0040162D|.51            push ecx                                 ; /MutexName = "\xBC

\xF2\xB5\xA5\xB0\xD9\xB1\xA6\xCF\xE4"
0040162E|.50            push eax                                 ; |Inheritable
0040162F|.68 01001F00   push 0x1F0001                            ; |Access = 0x1F0001
00401634|.FF15 B8F04100 call dword ptr ds:[<&KERNEL32.OpenMutexA>; \OpenMutexA
0040163A|.85C0          test eax,eax
0040163C|.75 1F         jnz XDNFMulti.0040165D
尝试打开简单百宝箱创建的Mutex对象 打开成功跳到返回成功的部分
再失败则继续执行 直到返回部分返回失败

总体来说 这货检测简单百宝箱就用了俩函数
FindWindow OpenMutex 相信常用API编程的不会陌生
并且这一段依旧被"VMProtect begin",0这类东东给包起来了
感觉甚是无语

好啦 就说到这啦喵~~

附上自己做的双开工具绿色版供懒人下载



qq1192464688 发表于 2014-3-27 22:43

loveLYF 发表于 2014-3-27 22:29

好东西 可惜不玩DNF了

华爱鸾 发表于 2014-3-27 22:25

谢谢楼主无私分享

sugie0708 发表于 2014-3-27 22:45

顶楼主,谢谢分享!!!

SimonChan 发表于 2017-1-15 17:39

去投诉举报区检举领赏

wp376784919 发表于 2014-4-7 10:23

谢谢楼主无私分享

小健卖萌 发表于 2014-6-12 20:01

噢耶 爽,谢谢你的分享

djqlxy126 发表于 2014-10-30 01:02

多谢分享!!!!!!!!!!!!!!

yhmcat 发表于 2016-9-30 10:45

待我来测试一下

fanuy 发表于 2016-10-1 13:16

页: [1] 2
查看完整版本: DNF双开工具无需简单百宝箱运行