原创:从逆向作品的结论出发,再逆向再研究:
突然在某论坛发现一个破解版本的按键精灵,
http://bbs.fishc.com/thread-35566-1-1.html
1.启动退出无广告
2.无需登录和联网生成小精灵
3.小精灵无广告
4.资源库直接导入
实际使用测试了下,他的汇编方法比我的方法要精练些,但广告的去除程度不如我的搞法彻底,最难容忍的是他的 按键精灵的启动补丁条没有NOP掉(如果你没有爆破的话,即使你使用的是正版的,按键精灵的启动速度也会直接拖慢)
已知:通过WinHEX分析得知:
1. 按键精灵9.XXexe: 9,756,200 字节
2. 按键精灵9.XX破解版.exe: 9,756,200 字节
Offsets: 十六进制
1B8: 9F 92 :4001b8 -----A
1B9: D6 17
1EC: 30 BE :4001EC -----B
1ED: 06 02
2D8: 30 BE :4002D8 -----C
2D9: 06 02
20D4: 0F E9 :004020D4 /E9 53040000 jmp 0040252C -----D
20D5: 8E 53
20D6: 52 04
20D7: 04 00
20D9: 00 90
-----------------------------------------------
00402084 > \E8 B30C1100 call <jmp.&MFC42.#CString::~CString_800> 1
00402089 > 8B46 10 mov eax, dword ptr
0040208C . 8D4E 08 lea ecx, dword ptr
0040208F . 3BC0 cmp eax, eax
00402091 . 8B71 04 mov esi, dword ptr
00402094 . 8BC8 mov ecx, eax
00402096 . 74 0E je short 004020A6
00402098 > 8B11 mov edx, dword ptr
0040209A . 83C1 04 add ecx, 0x4
0040209D . 8916 mov dword ptr , edx
0040209F . 83C6 04 add esi, 0x4
004020A2 . 3BC8 cmp ecx, eax
004020A4 .^ 75 F2 jnz short 00402098
004020A6 > 8B4424 64 mov eax, dword ptr
004020AA . 8D78 08 lea edi, dword ptr
004020AD . 8BCF mov ecx, edi
004020AF . 8B47 08 mov eax, dword ptr
004020B2 . 50 push eax
004020B3 . 56 push esi
004020B4 . E8 37220000 call 004042F0 2
004020B9 . 8D6B 44 lea ebp, dword ptr
004020BC . 8977 08 mov dword ptr , esi
004020BF . 8BCD mov ecx, ebp
004020C1 . C74424 14 000>mov dword ptr , 0x0
004020C9 . 896C24 28 mov dword ptr , ebp
004020CD E8 FEF50A00 call 004B16D0 3
004020D2 . 85C0 test eax, eax
004020D4 0F8E 52040000 jle 0040252C 这里我们要改JMP的地方
-----------------------------------------
由DLL 看到一个返回用户处的地址,就是下面行的
eax=00483BB0 (Z3_备份.00483BB0)
00483E26 E8 6558FFFF call 00479690 ; 该死的启动补丁处 NOP了之后速度秒速
00483E2B . 85C0 test eax, eax
00483E2D . 0F85 2F020000 jnz 00484062
00483E33 > 8D4C24 18 lea ecx, dword ptr
00483E37 . E8 142E0800 call <jmp.&MFC42.#CString::CString_54>
00483E3C . 68 78608300 push 00836078 ; ASCII "9.51.11790"
00483E41 . 8D5424 1C lea edx, dword ptr
00483E45 . 68 99000000 push 0x99
00483E4A . 52 push edx
00483E4B . C68424 AC1000>mov byte ptr , 0x3
00483E53 . E8 A6310800 call <jmp.&MFC42.#CString::Format_281>
00483E58 . 83C4 08 add esp, 0x8
00483E5B . 8BCC mov ecx, esp
00483E5D . 896424 28 mov dword ptr , esp
00483E61 . 68 18638300 push 00836318 ; ASCII "?lan=chs"
----------------------------------------
注:上述地址,你通过 虚拟地址转换工具,输入 1B8,你是不能正确得到偏移地址的,所以正确的做法是使用WinHEX看到的16进制机器码,F5到HIEW中得到
求证:将他的结论与我的结论结合,去掉不该有的
==========================
OD中,通过字串搜索 lan=chs
-------------------------
下面的地方下好断点:
00415F2A 按键精灵 始终 call <jmp.&MFC42.#CString::Format_2818>
00415F41 按键精灵 始终 push 0084CABC 9.60.12177
0041A5EA 按键精灵 始终 push 0084CCA8 lan=chs&
0041AAA1 按键精灵 始终 push 0084CCA8 lan=chs&
00472C8B 按键精灵 始终 push 0084E3B8 ?lan=chs
0048AFDE 按键精灵 始终 call 00480210
0048AFF2 按键精灵 始终 call <jmp.&MFC42.#CCommandLineInfo::~CCommandLineInfo_617>
0048B016 按键精灵 始终 call <jmp.&MFC42.#CString::CString_540>
0048B040 按键精灵 始终 push 0084E3B8 ?lan=chs
00492983 按键精灵 始终 push 0084E3B8 ?lan=chs
004977C1 按键精灵 始终 push 0084E3B8 ?lan=chs
-------------------------之后F9开球~~~
你会断在这里:
0048AFDE E8 2D52FFFF call 00480210 ;但这里不是我们所要的地方
我们接着F9,因为有断点所以不怕跟丢~~
------------
00415F24 . 68 C8CA8400 push 0084CAC8 ; res://%s%s.EXE/bottom_bar_ad.htm
00415F29 . 52 push edx
00415F2A . E8 4FCE0F00 call <jmp.&MFC42.#CString::Format_2818> 是的,就是这里,我们可以下手了~~~ NOP掉
此时,程序的 补丁条被爆破掉,跟我搞的那个低版本效果一样了。
============================
============================
============================
未完,下面修补我自己的那个版本,未搞的几个地方。 强大 的论坛,强大的无语
代码全叠堆到一起了:huffy::funk:
不仅发贴待遇低下,而且:sweat: 头像是什么来的?看起来:shy: 好复杂啊,,,,,,,,
页:
[1]