人肉复流:轻松蹂躏Chord的某CrackMe
【文章标题】: 人肉复流:轻松蹂躏Chord的某CrackMe【文章作者】: Luck
【作者邮箱】: admin@sooluck.cn
【作者主页】: www.sooluck.cn
【作者QQ号】: 466748210
【软件名称】: CrackMe
【下载地址】: http://www.52pojie.cn/thread-23042-1-2.html
【加壳方式】: 什么都没找到 *
【保护方式】: 变异易格式+未知保护壳
【编写语言】: E language
【使用工具】: OllyDbg
【操作平台】: Win7
【软件介绍】: 就一个CrackMe,没啥好说的啦~
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
这个CrackMe,根据作者及后面的提示,我们可以知道是易的CrackMe。
既然是无法快速脱壳的,那么我们还脱它干嘛?直接上。
执行CrackMe,输入"Luck"。确认,提示失败。
于是想到用Bp MessageBoxA回溯到关键判断法.【见《易语言那点“破”事》中无视壳的破解方法】
OllyDbg加载,F9执行程序。下断Bp MessageBoxA。
点按钮,OllyDbg暂停了。
取消断点
76FFEA71 >8BFF mov edi, edi
76FFEA73 55 push ebp
76FFEA74 8BEC mov ebp, esp
76FFEA76 833D 749A0077 0>cmp dword ptr , 0x0
76FFEA7D 74 24 je short 76FFEAA3
76FFEA7F 64:A1 18000000mov eax, dword ptr fs:
76FFEA85 6A 00 push 0x0
76FFEA87 FF70 24 push dword ptr
76FFEA8A 68 A49E0077 push 77009EA4
76FFEA8F FF15 3414FA76 call dword ptr [<&KERNEL32.Interlocke>; kernel32.InterlockedCompareExchange
76FFEA95 85C0 test eax, eax
76FFEA97 75 0A jnz short 76FFEAA3
76FFEA99 C705 A09E0077 0>mov dword ptr , 0x1
76FFEAA3 6A 00 push 0x0
76FFEAA5 FF75 14 push dword ptr
76FFEAA8 FF75 10 push dword ptr
76FFEAAB FF75 0C push dword ptr
76FFEAAE FF75 08 push dword ptr
76FFEAB1 E8 73FFFFFF call MessageBoxExA
76FFEAB6 5D pop ebp
76FFEAB7 C2 1000 retn 0x10
于是F8,
76FFEAB1 E8 73FFFFFF call MessageBoxExA
76FFEAB6 5D pop ebp
76FFEAB7 C2 1000 retn 0x10
这里弹出信息框,确定。
继续F8,直到
10062E72 83F8 04 cmp eax, 0x4
10062E75 0F95C2 setne dl
10062E78 4A dec edx
10062E79 83E2 03 and edx, 0x3
10062E7C 8BC2 mov eax, edx
10062E7E 8901 mov dword ptr , eax
10062E80 83C4 64 add esp, 0x64
10062E83 C3 retn
观察数据窗口,得到:
0012F3E0 0040976ERETURN to Chord.0040976E from Chord.0040A452
0040976E即为我们的着手点
模块里选择Chord.exe,然后Ctrl+G输入0040976E
00409706 /0F84 35000000 je 00409741
0040970C |6A 00 push 0x0
0040970E |6A 00 push 0x0
00409710 |6A 00 push 0x0
00409712 |68 01030080 push 0x80000301
00409717 |6A 00 push 0x0
00409719 |68 00000000 push 0x0
0040971E |68 04000080 push 0x80000004
00409723 |6A 00 push 0x0
00409725 |68 2C914000 push 0040912C
0040972A |68 03000000 push 0x3
0040972F |BB 00030000 mov ebx, 0x300
00409734 |E8 190D0000 call 0040A452
00409739 |83C4 28 add esp, 0x28
0040973C |E9 30000000 jmp 00409771
00409741 \6A 00 push 0x0
00409743 6A 00 push 0x0
00409745 6A 00 push 0x0
00409747 68 01030080 push 0x80000301
0040974C 6A 00 push 0x0
0040974E 68 00000000 push 0x0
00409753 68 04000080 push 0x80000004
00409758 6A 00 push 0x0
0040975A 68 37914000 push 00409137
0040975F 68 03000000 push 0x3
00409764 BB 00030000 mov ebx, 0x300
00409769 E8 E40C0000 call 0040A452
0040976E 83C4 28 add esp, 0x28
应该没啥多说的了,嘿嘿。
爆破就在
00409706 /0F84 35000000 je 00409741
如果有兴趣也可以分析下流程,然后KeyGen就更完美了。
此文主旨是用于解释在《易语言那点“破”事》中无视壳类保护,因为这个是个难点,
很多朋友都认为必须脱了才能破,其实不然。此方法通用于使用超级伪装者的软件。
我们再用按钮法来分析下流程。
重新加载Chord.exe,并F9跑起。
模块中选择krnln.双击进入。Ctrl+B输入"FF 55 FC",来到
100290A6 FF55 FC call dword ptr
F2断下。切回程序,输入Luck,点按钮。
OD成功断下,F2取消断点,F7跟进。
004095FA 55 push ebp
004095FB 8BEC mov ebp, esp
004095FD 81EC 18000000 sub esp, 0x18
00409603 C745 FC 0000000>mov dword ptr , 0x0
0040960A 68 00000000 push 0x0
0040960F BB C4060000 mov ebx, 0x6C4
F8会得到数字:
eax=001F2558, (ASCII "88892000")
Stack ss:=001DDA28
测试这个注册码是有效的
--------------------------------------------------------------------------------
【经验总结】
1.易语言的程序并非都是需要脱壳的
2.在熟悉一个东西以后再牛的东西也会程序虚设。正如Nooby对VMP的蹂躏
--------------------------------------------------------------------------------
【版权声明】: 本文原创于Luck, 转载请注明作者并保持文章的完整, 谢谢!
2009年11月01日 14:14:10 看着算法我就郁闷了、
如果需要KeyGen可以考虑用内存读取或逆算法~
页:
[1]