【破解的软件】:Windows优化大师[专业版] 7.99.10.101
【下载地址】: 自己搜索下载
【加壳方式】: 没壳
【使用工具】: OllyICE
【详细过程】:
说是原创 其实是看了http://bbs.pediy.com/showthread.php?t=106082这个帖子以及cjchome大大的回复整理了一下 第一次搞 还请各位大牛多多指点-,-
主要是不用每次运行都注册一下了
下面开始
直接OD载入WoptiUtilities_CN.exe
下消息断点 bp MessageBoxA,SHIFT+F9运行。
来到主界面,点 注册 打开注册框
输入注册名和随便的注册码
点 注册。
被OD断下。
77D507EA > 8BFF mov edi, edi
77D507EC /. 55 push ebp
77D507ED |. 8BEC mov ebp, esp
77D507EF |. 833D BC14D777>cmp dword ptr [77D714BC], 0
77D507F6 |. 74 24 je short 77D5081C
77D507F8 |. 64:A1 1800000>mov eax, dword ptr fs:[18]
77D507FE |. 6A 00 push 0
77D50800 |. FF70 24 push dword ptr [eax+24]
77D50803 |. 68 241BD777 push 77D71B24
77D50808 |. FF15 C412D177 call dword ptr [<&KERNEL32.Interlocke>; kernel32.InterlockedCompareExchange
77D5080E |. 85C0 test eax, eax
77D50810 |. 75 0A jnz short 77D5081C
77D50812 |. C705 201BD777>mov dword ptr [77D71B20], 1
77D5081C |> 6A 00 push 0 ; /LanguageID = 0 (LANG_NEUTRAL)
77D5081E |. FF75 14 push dword ptr [ebp+14] ; |Style
77D50821 |. FF75 10 push dword ptr [ebp+10] ; |Title
77D50824 |. FF75 0C push dword ptr [ebp+C] ; |Text
77D50827 |. FF75 08 push dword ptr [ebp+8] ; |hOwner
77D5082A |. E8 2D000000 call MessageBoxExA ; \MessageBoxExA
77D5082F |. 5D pop ebp
77D50830 \. C2 1000 retn 10
然后在堆栈中 选择第一个 反汇编窗口跟随(ENTER)
来到
006B81CB > \8B45 FC mov eax, dword ptr [ebp-4]
然后向上找 找到
006B818F > \6A 10 push 10
我们可以看到 跳转是来自 006B7FA8
好的 现在向上找到它。
006B7FA8 /0F85 E1010000 jnz 006B818F
这个是关键跳,如果跳下去就会提示你注册失败。
你可以把它改为
006B7FA8 /0F85 E1010000 jz 006B818F
就注册成功了。
但是这个程序会重启验证,所以这样改之后 每次打开程序都要注册一下。很麻烦。
我也是改了之后才知道的。
所以我们还要继续找
-------------------------------------------------------------------------------------------
006B7F9E . E8 B127FAFF call 0065A754 ; 关键CALL
006B7FA3 3D B2000000 cmp eax, 0B2 ; 比较
006B7FA8 0F85 E1010000 jnz 006B818F ; 跳了就完蛋。
跳转上面的CALL 肯定是关键CALL。
分析代码可以发现 如果EAX=0B2 那么就不跳。
那么CALL里面肯定会获得注册信息 所以我们跟进这个CALL。
来到。
0065A754 /$ 8BC8 mov ecx, eax
0065A756 |. B2 01 mov dl, 1
0065A758 |. A1 74A26500 mov eax, dword ptr [65A274]
0065A75D |. E8 C60A0000 call 0065B228
0065A762 |. 8B15 506A7F00 mov edx, dword ptr [7F6A50] ; WoptiUti.0080E550
0065A768 |. 8B12 mov edx, dword ptr [edx]
0065A76A |. 8950 1C mov dword ptr [eax+1C], edx
0065A76D |. C740 18 7C1B7>mov dword ptr [eax+18], 00791B7C
0065A774 |. C605 C4CE8000>mov byte ptr [80CEC4], 1
0065A77B |. E8 F030DDFF call 0042D870
0065A780 |> B8 E8030000 /mov eax, 3E8
0065A785 |. E8 9E93DAFF |call 00403B28
0065A78A |. A1 186A7F00 |mov eax, dword ptr [7F6A18]
0065A78F |. 8B00 |mov eax, dword ptr [eax]
0065A791 |. E8 EEDAE3FF |call 00498284
0065A796 |. 803D C4CE8000>|cmp byte ptr [80CEC4], 0
0065A79D |.^ 75 E1 \jnz short 0065A780
0065A79F |. A1 C8CE8000 mov eax, dword ptr [80CEC8]
0065A7A4 \. C3 retn
我们可以发现 在RETN上 程序给EAX赋值了 值就是 80CEC8这个地址的。
我们可以直接把
0065A79F |. A1 C8CE8000 mov eax, dword ptr [80CEC8]
改成
0065A79F |. A1 C8CE8000 mov eax, 0B2
不叫程序把内存80CEC8的值赋给EAX
我们直接给EAX值 为0B2
-----------------------------------------------------------------------------------------------------
也可以
选择 0065A79F |. A1 C8CE8000 mov eax, dword ptr [80CEC8] 这个指令
右键-》数据窗口中跟随-》内存地址。
下内存写入断点。
F9运行。
被OD断下。
0065B250 C705 C8CE8000>mov dword ptr [80CEC8], 0AE
0065B25A |. 8D55 FC lea edx, dword ptr [ebp-4]
0065B25D |. 8BC6 mov eax, esi
0065B25F |. E8 8CFDFFFF call 0065AFF0
0065B264 |. 8B55 FC mov edx, dword ptr [ebp-4]
0065B267 |. 8D47 40 lea eax, dword ptr [edi+40]
0065B26A |. E8 7DA2DAFF call 004054EC
我们可以看到第一句。
内存地址80CEC8 被赋值了 0AE。
上面我们说过 是通过
006B7FA3 3D B2000000 cmp eax, 0B2
判断 EAX是不是等于0B2来决定是不是跳的
这里内存80CEC8(也就是EAX)被赋值=0AE了
所以 后面就跳到注册失败了。
那么我们可以知道 如果80CEC8被赋值0B2。那么就说明程序是注册过的
就不会再提示你注册按钮。
从而达到不需要每次运行都要注册的目的。
好了现在我们把
0065B250 C705 C8CE8000>mov dword ptr [80CEC8], 0AE
改成
0065B250 C705 C8CE8000>mov dword ptr [80CEC8], 0B2
让程序被默认为以注册过了的。
好了修改之后保存就OK了.
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)