好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 xujunlin5588 于 2009-5-16 20:11 编辑
首先先感谢天草老师。他教会了我很多关于破解的东西。
这次是我第一次发破文。不知道好不,请大家请教下。
软件:i-Sound Pro
壳:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
OD载入:
0065BC40 > 60 pushad ; (initial cpu selection)
0065BC41 BE 00D05D00 mov esi, 005DD000
0065BC46 8DBE 0040E2FF lea edi, dword ptr [esi+FFE24000]
0065BC4C 57 push edi
0065BC4D 83CD FF or ebp, FFFFFFFF
0065BC50 EB 10 jmp short 0065BC62
0065BC52 90 nop
0065BC53 90 nop
0065BC54 90 nop
0065BC55 90 nop
0065BC56 90 nop
0065BC57 90 nop
0065BC58 8A06 mov al, byte ptr [esi]
0065BC5A 46 inc esi
0065BC5B 8807 mov byte ptr [edi], al
0065BC5D 47 inc edi
0065BC5E 01DB add ebx, ebx
0065BC60 75 07 jnz short 0065BC69
0065BC62 8B1E mov ebx, dword ptr [esi]
0065BC64 83EE FC sub esi, -4
0065BC67 11DB adc ebx, ebx
0065BC69 ^ 72 ED jb short 0065BC58
0065BC6B B8 01000000 mov eax, 1
0065BC70 01DB add ebx, ebx
0065BC72 75 07 jnz short 0065BC7B
0065BC74 8B1E mov ebx, dword ptr [esi]
0065BC76 83EE FC sub esi, -4
0065BC79 11DB adc ebx, ebx
0065BC7B 11C0 adc eax, eax
0065BC7D 01DB add ebx, ebx
0065BC7F 73 0B jnb short 0065BC8C
0065BC81 75 19 jnz short 0065BC9C
0065BC83 8B1E mov ebx, dword ptr [esi]
......
很明显是UPX壳的特征。
按照常规方法。先运行下。(注意:要先忽略除了内存的所有异常)
运行后,点了setting..就找到register..那里是 unregister 。这个就是关键。所以在后面寻找字符串可以找这个。
暂停OD。找到“显示调用堆栈”。
找到 isound.0048BF18..显示调用。。
再找一下字符串。找到 registered version(这是个注册版本)进去观察下。
004D09C4 55 push ebp
004D09C5 68 5C0E4D00 push 004D0E5C
004D09CA 64:FF30 push dword ptr fs:[eax]
004D09CD 64:8920 mov dword ptr fs:[eax], esp
004D09D0 8B15 141D4E00 mov edx, dword ptr [4E1D14] ; isound.00575244
004D09D6 8B52 0D mov edx, dword ptr [edx+D]
004D09D9 8B83 BC040000 mov eax, dword ptr [ebx+4BC]
004D09DF E8 28A3F9FF call 0046AD0C
004D09E4 8B15 141D4E00 mov edx, dword ptr [4E1D14] ; isound.00575244
004D09EA 8B52 52 mov edx, dword ptr [edx+52]
004D09ED 8B83 28030000 mov eax, dword ptr [ebx+328]
004D09F3 E8 14A3F9FF call 0046AD0C
004D09F8 8B0D 141D4E00 mov ecx, dword ptr [4E1D14] ; isound.00575244
004D09FE 8B49 11 mov ecx, dword ptr [ecx+11]
004D0A01 8B15 141D4E00 mov edx, dword ptr [4E1D14] ; isound.00575244
004D0A07 8B52 0D mov edx, dword ptr [edx+D]
004D0A0A A1 E01D4E00 mov eax, dword ptr [4E1DE0]
004D0A0F 8B00 mov eax, dword ptr [eax]
004D0A11 E8 16530000 call 004D5D2C
004D0A16 84C0 test al, al //控制jnz能否跳,破解关键!
004D0A18 75 12 jnz short 004D0A2C //就是这个控制了我们不能注册成功!这个就是目标了。
004D0A1A BA 740E4D00 mov edx, 004D0E74 ; this copy is unregistered
004D0A1F 8B83 E4040000 mov eax, dword ptr [ebx+4E4]
004D0A25 E8 E2A2F9FF call 0046AD0C
004D0A2A EB 6E jmp short 004D0A9A //这个跳就把register跳过了,那么就无法成功了,所以要让上面那个jnz跳实现。
004D0A2C 8B0D 141D4E00 mov ecx, dword ptr [4E1D14] ; isound.00575244
004D0A32 8B49 0D mov ecx, dword ptr [ecx+D]
004D0A35 8D85 98FEFFFF lea eax, dword ptr [ebp-168]
004D0A3B BA 980E4D00 mov edx, 004D0E98 ; registered to
004D0A40 E8 AB49F3FF call 004053F0
004D0A45 8B95 98FEFFFF mov edx, dword ptr [ebp-168]
004D0A4B 8B83 E4040000 mov eax, dword ptr [ebx+4E4]
004D0A51 E8 B6A2F9FF call 0046AD0C
004D0A56 33D2 xor edx, edx
004D0A58 8B83 AC040000 mov eax, dword ptr [ebx+4AC]
004D0A5E E8 99A1F9FF call 0046ABFC
004D0A63 33D2 xor edx, edx
004D0A65 8B83 C4040000 mov eax, dword ptr [ebx+4C4]
004D0A6B E8 8CA1F9FF call 0046ABFC
004D0A70 33D2 xor edx, edx
004D0A72 8B83 BC040000 mov eax, dword ptr [ebx+4BC]
004D0A78 8B08 mov ecx, dword ptr [eax]
004D0A7A FF51 64 call dword ptr [ecx+64]
004D0A7D 33D2 xor edx, edx
004D0A7F 8B83 C0040000 mov eax, dword ptr [ebx+4C0]
004D0A85 8B08 mov ecx, dword ptr [eax]
004D0A87 FF51 64 call dword ptr [ecx+64]
004D0A8A BA B00E4D00 mov edx, 004D0EB0 ; registered version //这里就是关键了。
004D0A8F 8B83 C0040000 mov eax, dword ptr [ebx+4C0]
004D0A95 E8 72A2F9FF call 0046AD0C
004D0A9A 8B15 141D4E00 mov edx, dword ptr [4E1D14] ; isound.00575244
004D0AA0 8B52 2A mov edx, dword ptr [edx+2A]
004D0AA3 8B83 DC030000 mov eax, dword ptr [ebx+3DC]
004D0AA9 E8 7ED9F7FF call 0044E42C
004D0AAE 8B15 141D4E00 mov edx, dword ptr [4E1D14] ; isound.00575244
004D0AB4 8B52 46 mov edx, dword ptr [edx+46]
004D0AB7 8B83 24040000 mov eax, dword ptr [ebx+424]
004D0ABD 8B08 mov ecx, dword ptr [eax]
004D0ABF FF91 D0000000 call dword ptr [ecx+D0]
004D0AC5 A1 141D4E00 mov eax, dword ptr [4E1D14]
004D0ACA 8378 42 02 cmp dword ptr [eax+42], 2
004D0ACE 75 12 jnz short 004D0AE2
004D0AD0 33D2 xor edx, edx
004D0AD2 8B83 08040000 mov eax, dword ptr [ebx+408]
004D0AD8 8B08 mov ecx, dword ptr [eax]
004D0ADA FF91 D0000000 call dword ptr [ecx+D0]
找到了目标后,有些朋友会说直接jmp掉它不就行了么?的确。这个方法可以。但是你试过后会发觉:“在可执行文件中无法定位数据”。那么就要另辟新径了。
大家是否有发现,在jnz上面有一个test al, al?那么只有一个可能了,它肯定就是破解的关键。我们进去看下。
004D5D2C 55 push ebp
004D5D2D 8BEC mov ebp, esp
004D5D2F 6A 00 push 0
004D5D31 6A 00 push 0
004D5D33 6A 00 push 0
004D5D35 6A 00 push 0
004D5D37 6A 00 push 0
004D5D39 53 push ebx
004D5D3A 56 push esi
004D5D3B 894D FC mov dword ptr [ebp-4], ecx
004D5D3E 8B45 FC mov eax, dword ptr [ebp-4]
004D5D41 E8 4EF8F2FF call 00405594
004D5D46 33C0 xor eax, eax
004D5D48 55 push ebp
004D5D49 68 CB5D4D00 push 004D5DCB
004D5D4E 64:FF30 push dword ptr fs:[eax]
004D5D51 64:8920 mov dword ptr fs:[eax], esp
004D5D54 33DB xor ebx, ebx
004D5D56 B8 80E24800 mov eax, 0048E280
004D5D5B 8945 F0 mov dword ptr [ebp-10], eax
004D5D5E 8D45 F8 lea eax, dword ptr [ebp-8]
004D5D61 E8 6EF3F2FF call 004050D4
004D5D66 8D4D F4 lea ecx, dword ptr [ebp-C]
004D5D69 8B55 FC mov edx, dword ptr [ebp-4]
004D5D6C B8 03010000 mov eax, 103
004D5D71 E8 4A84FBFF call 0048E1C0
004D5D76 33F6 xor esi, esi
004D5D78 8D45 EC lea eax, dword ptr [ebp-14]
004D5D7B 8BD6 mov edx, esi
004D5D7D C1E2 02 shl edx, 2
004D5D80 8B4D F0 mov ecx, dword ptr [ebp-10]
004D5D83 8D14D1 lea edx, dword ptr [ecx+edx*8]
004D5D86 B9 20000000 mov ecx, 20
004D5D8B E8 C4F5F2FF call 00405354
004D5D90 8B45 EC mov eax, dword ptr [ebp-14]
004D5D93 8B55 F4 mov edx, dword ptr [ebp-C]
004D5D96 E8 55F7F2FF call 004054F0
004D5D9B 75 02 jnz short 004D5D9F //本身就跳,我们可以尝试下让它不跳。
004D5D9D B3 01 mov bl, 1
004D5D9F 46 inc esi
004D5DA0 81FE 81030000 cmp esi, 381
004D5DA6 ^ 75 D0 jnz short 004D5D78
004D5DA8 33C0 xor eax, eax
004D5DAA 5A pop edx
004D5DAB 59 pop ecx
004D5DAC 59 pop ecx
004D5DAD 64:8910 mov dword ptr fs:[eax], edx
004D5DB0 68 D25D4D00 push 004D5DD2
004D5DB5 8D45 EC lea eax, dword ptr [ebp-14]
004D5DB8 E8 17F3F2FF call 004050D4
004D5DBD 8D45 F4 lea eax, dword ptr [ebp-C]
004D5DC0 BA 03000000 mov edx, 3
004D5DC5 E8 2EF3F2FF call 004050F8
004D5DCA C3 retn
004D5DCB ^ E9 20ECF2FF jmp 004049F0
004D5DD0 ^ EB E3 jmp short 004D5DB5
004D5DD2 8BC3 mov eax, ebx
004D5DD4 5E pop esi
004D5DD5 5B pop ebx
004D5DD6 8BE5 mov esp, ebp
004D5DD8 5D pop ebp
004D5DD9 C3 retn
大家照常走下。你会发觉那走完后出去了,那个跳还是没办法实现。那么只有一种可能了,在上面 004D5D9B 75 02 jnz short 004D5D9F
我们让它不跳。结果很明显。那个jnz实现了。把跳过register的jmp也过了。那么就能注册成功了!
事不宜迟,马上修改退出。。。呵呵。我们不是说还有做破解补丁么?慢慢来!
刚才已经知道了004D5D9B 75 02 jnz short 004D5D9F 就是破解的关键了,那么做补丁就要用到这条地址了。我们就把它nop掉吧。那么 75 02就会变成了9090了。
打开KEYmake.这个软件可能会报毒,所以能做补丁时大家可能要把杀毒软件给暂停掉,不信任的话就不做补丁了,直接爆破就行了!
打开了后,其他---制作内存补丁----
程序名称就是打开原程序就是了,消息标题你喜欢怎么打就怎么打,启动提示也是一样,关键是后面的。
添加后,要你输入“修改地址”那么你就输入刚才破解关键那个地址咯004D5D9B,修改长度假如你爱2个的话,下面原始指令就得输2个字节:就是7502,修改指令就为9090;假如你爱1个的话,原始为:75
修改为:90。然后生成。
再运行下,破解了吧!
喜欢直接爆破的可以在那个地方直接NOP掉,再保存文件就行了。
给大家发上软件吧+(注册机编写器)
http://www.namipan.com/d/i-Sound ... 82fe24daf37a15e2000 (i-sound)
http://www.namipan.com/d/%E6%B3% ... e37c85df88170a10e00 (注册机编写器) |
|