- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
说明:仅做解密交流,无它. 软件不错,但加密做的有点虚.这篇文章算是一个提醒吧.
官方地址:http://www.ksbao.com/
本文中SMC感谢小Q,内存Loader的制作上感谢菜儿, 感谢两位朋友的帮忙. 3人的教程送给论坛的初学者~~
- 00591EC4 55 push ebp
- 00591EC5 8BEC mov ebp, esp
- 00591EC7 33C9 xor ecx, ecx
- 00591EC9 51 push ecx
- 00591ECA 51 push ecx
- 00591ECB 51 push ecx
- 00591ECC 51 push ecx
- 00591ECD 53 push ebx
- 00591ECE 8BD8 mov ebx, eax
- 00591ED0 33C0 xor eax, eax
- 00591ED2 55 push ebp
- 00591ED3 68 A11F5900 push 00591FA1
- 00591ED8 64:FF30 push dword ptr fs:[eax]
- 00591EDB 64:8920 mov dword ptr fs:[eax], esp
- 00591EDE E8 3128F8FF call 00514714
- 00591EE3 A1 E4B25900 mov eax, dword ptr [59B2E4]
- 00591EE8 8B00 mov eax, dword ptr [eax]
- 00591EEA 8B48 1C mov ecx, dword ptr [eax+1C]
- 00591EED A1 E4B25900 mov eax, dword ptr [59B2E4]
- 00591EF2 8B00 mov eax, dword ptr [eax]
- 00591EF4 8B50 14 mov edx, dword ptr [eax+14]
- 00591EF7 8D45 F8 lea eax, dword ptr [ebp-8]
- 00591EFA E8 2535E7FF call 00405424
- 00591EFF E8 E019F8FF call 005138E4
- 00591F04 8945 FC mov dword ptr [ebp-4], eax
- 00591F07 33C0 xor eax, eax
- 00591F09 55 push ebp
- 00591F0A 68 7F1F5900 push 00591F7F
- 00591F0F 64:FF30 push dword ptr fs:[eax]
- 00591F12 64:8920 mov dword ptr fs:[eax], esp
- 00591F15 8B45 FC mov eax, dword ptr [ebp-4]
- 00591F18 E8 63EBF7FF call 00510A80 ; 关键CALL,F7跟进
- 00591F1D 84C0 test al, al ; 标志位比较
- 00591F1F 74 1C je short 00591F3D ; 关键跳转,若不跳转软件即可使用注册功能, 最简单的暴破方法就是直接NOP掉这里
- 00591F21 8D45 F4 lea eax, dword ptr [ebp-C]
- 00591F24 B9 B81F5900 mov ecx, 00591FB8 ; [已注册]
- 00591F29 8B55 F8 mov edx, dword ptr [ebp-8]
- 00591F2C E8 F334E7FF call 00405424
- 00591F31 8B55 F4 mov edx, dword ptr [ebp-C]
- 00591F34 8BC3 mov eax, ebx
- 00591F36 E8 118DF2FF call 004BAC4C
- 00591F3B EB 1F jmp short 00591F5C
- 00591F3D 8D45 F0 lea eax, dword ptr [ebp-10]
复制代码
- 关键CALL:
- 00510A80 E8 EB010000 call 00510C70 ; F7继续跟进
- 00510A85 C3 retn
- 00510C70 55 push ebp ; F7跟进关键CALL后来到这里
- 00510C71 8BEC mov ebp, esp
- 00510C73 6A 00 push 0
- 00510C75 6A 00 push 0
- 00510C77 6A 00 push 0
- 00510C79 53 push ebx
- 00510C7A 56 push esi
- 00510C7B 8BF0 mov esi, eax
- 00510C7D 33C0 xor eax, eax
- 00510C7F 55 push ebp
- 00510C80 68 090D5100 push 00510D09
- 00510C85 64:FF30 push dword ptr fs:[eax]
- 00510C88 64:8920 mov dword ptr fs:[eax], esp
- 00510C8B 837E 68 00 cmp dword ptr [esi+68], 0
- 00510C8F 74 5B je short 00510CEC ; 注意,这个跳转已实现,跳向510CEC地址 我们这个暴破的目的就在于修改AL数值 那么我们从下向上找 AL数值的赋值地址 我们找到510CDD这个地址 这里我们修改为 JE 510CDD
- 00510C91 8D55 FC lea edx, dword ptr [ebp-4]
- 00510C94 8BC6 mov eax, esi
- 00510C96 E8 EDFCFFFF call 00510988
- 00510C9B 837D FC 00 cmp dword ptr [ebp-4], 0
- 00510C9F 74 4B je short 00510CEC
- 00510CA1 8D45 F8 lea eax, dword ptr [ebp-8]
- 00510CA4 50 push eax
- 00510CA5 8D55 F4 lea edx, dword ptr [ebp-C]
- 00510CA8 8BC6 mov eax, esi
- 00510CAA E8 D9FCFFFF call 00510988
- 00510CAF 8B55 F4 mov edx, dword ptr [ebp-C]
- 00510CB2 8B4E 68 mov ecx, dword ptr [esi+68]
- 00510CB5 8BC6 mov eax, esi
- 00510CB7 E8 34F6FFFF call 005102F0
- 00510CBC 8B45 F8 mov eax, dword ptr [ebp-8]
- 00510CBF BA 200D5100 mov edx, 00510D20 ; ASCII "645364631365423154824"
- 00510CC4 E8 1BA9EFFF call 0040B5E4
- 00510CC9 85C0 test eax, eax
- 00510CCB 75 14 jnz short 00510CE1
- 00510CCD B1 01 mov cl, 1
- 00510CCF 8B56 68 mov edx, dword ptr [esi+68]
- 00510CD2 8BC6 mov eax, esi
- 00510CD4 E8 77FEFFFF call 00510B50
- 00510CD9 84C0 test al, al
- 00510CDB 75 04 jnz short 00510CE1
- 00510CDD B3 01 mov bl, 1 ; EBX的赋值在这里
- 00510CDF EB 0D jmp short 00510CEE
- 00510CE1 33DB xor ebx, ebx
- 00510CE3 8BC6 mov eax, esi
- 00510CE5 E8 620B0000 call 0051184C
- 00510CEA EB 02 jmp short 00510CEE
- 00510CEC 33DB xor ebx, ebx ; 若软件未注册,上方的跳转则跳到这里
- 00510CEE 33C0 xor eax, eax
- 00510CF0 5A pop edx
- 00510CF1 59 pop ecx
- 00510CF2 59 pop ecx
- 00510CF3 64:8910 mov dword ptr fs:[eax], edx
- 00510CF6 68 100D5100 push 00510D10
- 00510CFB 8D45 F4 lea eax, dword ptr [ebp-C]
- 00510CFE BA 03000000 mov edx, 3
- 00510D03 E8 1844EFFF call 00405120
- 00510D08 C3 retn
- 00510D09 ^ E9 623CEFFF jmp 00404970
- 00510D0E ^ EB EB jmp short 00510CFB
- 00510D10 8BC3 mov eax, ebx ; 注意,我们的标志位比较的就是AL,这里就是AL的赋值语句 那EBX来自那里呢? 我们向上找
- 00510D12 5E pop esi
- 00510D13 5B pop ebx
- 00510D14 8BE5 mov esp, ebp
- 00510D16 5D pop ebp
- 00510D17 C3 retn
复制代码
下断提示:
由于是压缩壳,这里就给了我们使用SMC破解的可能. 下文要特别感谢小Q对SMC补丁上的指导.
OD载入原程序,ESP定律来到这里:
- 006113B0 /75 08 jnz short 006113BA
- 006113B2 |B8 01000000 mov eax, 1
- 006113B7 |C2 0C00 retn 0C
- 006113BA \68 3C2D5900 push 00592D3C
- 006113BF C3 retn
复制代码
由于我们已经分析出需要修改的数据:
原程序:
00510C8F 74 5B je short 00510CEC
修改为:
00510C8F 74 4C je short 00510CDD
即:74 5B 要修改为 74 4C
所以我们在外壳区段找一处空白地址开始写入SMC补丁数据. 如何找空白处呢,我和小Q的方法就是直接在OD中向下来,来到该区断的尾部,这一部分空白的几率更大一些.
- 00615FEE 66:C705 8F0C510>mov word ptr [510C8F], 4C74 ; 我们在压缩壳的区段写入要填充的数据.
- 00615FF7 ^ E9 BEB3FFFF jmp 006113BA ; 然后返回未修改壳区的下一个地址
复制代码
简单的解释一下这里填写的代码意思:
1.WORD==>表示一个字. 因为我们要修改两个字节,所以这里是WORD.如果是字节就用BYTE,双字就是DWORD。如果字节更多的话,那就多用几次MOV操作即可.
2.PTR ==>汇编语言的一种格式,我们向内存中写入数据的时候,PTR前方要注明我们写入数据的字节大小.
3.[XXXXXX]==>[]中即我们要写入数据的地址,该地址加"[]"后代表该地址对应的数据,就是我们从该地址开始写数据. SMC破解我们一般用的都是MOV向内存写入数据.
4.写入数据时要根据高高低低原则,由于我们要修改的数据为74 4C. 这里"74"为低位,"4C"为高位,所以我们在MOV中写入"4C74"
5.最后一句是返回语句,就是JMP 到 我们跳来语句的下一行的地址. 本程序中为:即006113BA \68 3C2D5900 push 00592D3C
写入数据后我们先保存一次. OD载入我们保存SMC数据的程序,ESP定律后来到这里开始做修改:
- 006113B0 /E9 394C0000 jmp 00615FEE ; 从壳区找一个地址写需要修改的数据
- 006113B5 |90 nop
- 006113B6 |90 nop
- 006113B7 |C2 0C00 retn 0C
- 006113BA |68 3C2D5900 push 00592D3C ; 我们修改的数据返回到这里
- 006113BF |C3 retn
复制代码
最后保存文件. SMC破解完工~ 保存后,文件仍加的是原壳.
内存Loader的制作,感谢菜儿提供帮助~~ 呵呵 这个帖子是3位朋友共同合作的 :24ab: 送给大家~~
DUP制作内存Loader
我们打开DUP,新建方案中选择"偏移量补丁"
然后我们双击"偏移量补丁",在控制界面中如下填写数据,由于我们就修改一处所以添写一个就OK了.
注意: 74 对应的地址是00510C8F 所以4C对应的地址就应该是00510C90
最后的步骤当然是生成了~~
|
|