【文章标题】: 菜鸟的第一个破解文
【文章作者】: xiaosan
【软件名称】: A-one Zune Video Converter
【软件大小】: 主应用程序183 KB
【下载地址】: 自己搜索下载
【加壳方式】: 什么也没有
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: PEid v0.94 .OD.LD.IR
【操作平台】: Windows XP
【软件介绍】: 媒体转换工具
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! 只提供研究学习,请勿做非法用途。
--------------------------------------------------------------------------------
【详细过程】
安装完毕后,用PEid,查壳。显示为“什么也没有”,用“PEid的扩展,发现该文件已被加密”
不知道是什么壳,也不能用专用脱壳工具了,只好手动脱壳试试。
用OD载入,进入后,代码显示如下:
005F6536 > 9C pushfd EAX 00000000
005F6537 60 pushad ECX 0012FFB0
005F6538 E8 00000000 call A-one_Zu.005F653D EDX 7C92EB94 ntdll.KiFastSystemCallRet
005F653D 5D pop ebp EBX 7FFD5000
005F653E 83ED 07 sub ebp,7 ESP 0012FFC4
005F6541 8D8D 26FCFFFF lea ecx,dword ptr ss:[ebp-3DA] EBP 0012FFF0
005F6547 8039 01 cmp byte ptr ds:[ecx],1 ESI 05940000
005F654A 0F84 42020000 je A-one_Zu.005F6792
005F6550 C601 01 mov byte ptr ds:[ecx],1
005F6553 8BC5 mov eax,ebp
005F6555 2B85 BAFBFFFF sub eax,dword ptr ss:[ebp-446]
005F655B 8985 BAFBFFFF mov dword ptr ss:[ebp-446],eax
005F6561 0185 EAFBFFFF add dword ptr ss:[ebp-416],eax
005F6567 8DB5 2EFCFFFF lea esi,dword ptr ss:[ebp-3D2]
005F656D 0106 add dword ptr ds:[esi],eax
试着用ESP定律,脱掉此壳。F8单步3次。ESP:0012FFAO,在数据窗口中跟随,数值窗口显示:00650076
然后对此下硬件访问“字”断点,F9运行:到这里
005F67A7 9D popfd
005F67A8 - E9 7D87FFFF jmp A-one_Zu.005EEF2A
005F67AD 8BB5 B2FBFFFF mov esi,dword ptr ss:[ebp-44E]
005F67B3 0BF6 or esi,esi
005F67B5 0F84 97000000 je A-one_Zu.005F6852
005F67BB 8B95 BAFBFFFF mov edx,dword ptr ss:[ebp-446]
005F67C1 03F2 add esi,edx
005F67C3 833E 00 cmp dword ptr ds:[esi],0
005F67C6 75 0E jnz short A-one_Zu.005F67D6
005F67C8 837E 04 00 cmp dword ptr ds:[esi+4],0
005F67CC 75 08 jnz short A-one_Zu.005F67D6
005F67CE 837E 08 00 cmp dword ptr ds:[esi+8],0
005F67D2 75 02 jnz short A-one_Zu.005F67D6
005F67D4 EB 7A jmp short A-one_Zu.005F6850
/*****记得要删除硬件断点哦********/
继续F8单步两次,跳转到这里:
005EEF2A 60 pushad
005EEF2B E8 00000000 call A-one_Zu.005EEF30
005EEF30 5B pop ebx
005EEF31 8D5B C6 lea ebx,dword ptr ds:[ebx-3A]
005EEF34 011B add dword ptr ds:[ebx],ebx
005EEF36 8B13 mov edx,dword ptr ds:[ebx]
005EEF38 8D73 14 lea esi,dword ptr ds:[ebx+14]
005EEF3B 6A 08 push 8
005EEF3D 59 pop ecx
005EEF3E 0116 add dword ptr ds:[esi],edx
005EEF40 AD lods dword ptr ds:[esi]
005EEF41 49 dec ecx
005EEF42 ^ 75 FA jnz short A-one_Zu.005EEF3E
之后,结合F8,F4来到了这:
0041D324 55 push ebp//这里就是OEP了
0041D325 8BEC mov ebp,esp
0041D327 6A FF push -1
0041D329 68 40594200 push A-one_Zu.00425940
0041D32E 68 B0D44100 push A-one_Zu.0041D4B0 ; jmp to msvcrt._except_handler3; SE handler installation
0041D333 64:A1 00000000 mov eax,dword ptr fs:[0]
0041D339 50 push eax
0041D33A 64:8925 0000000>mov dword ptr fs:[0],esp
0041D341 83EC 68 sub esp,68
进行脱壳后,首先用LordPE 重建一次,然后用ImportREC对重建后的程序进行修复。修复后,程序可正常运行。
再用PEid 查壳,发现是VC++写的软件。
进入软件,试注册。发现“注册码不正确”错误提示。呵呵,
用OD载入脱壳后的程序。
查找“超级字符串”,找到后,就来到了这里:
004079EC . 5E POP ESI
004079ED > B9 98C74200 MOV ECX,1D32400_.0042C798
004079F2 . E8 03560100 CALL <JMP.&mfc42.#6282_?TrimLeft@CString>
004079F7 . B9 98C74200 MOV ECX,1D32400_.0042C798
004079FC . E8 F3550100 CALL <JMP.&mfc42.#6283_?TrimRight@CStrin>
00407A01 . 68 80000000 PUSH 80
00407A06 . B9 98C74200 MOV ECX,1D32400_.0042C798
00407A0B . E8 04540100 CALL <JMP.&mfc42.#2915_?GetBuffer@CStrin>
00407A10 . 50 PUSH EAX
00407A11 . E8 1AF1FFFF CALL 1D32400_.00406B30
00407A16 . 83C4 04 ADD ESP,4
00407A19 . 83F8 01 CMP EAX,1
00407A1C . 75 31 JNZ SHORT 1D32400_.00407A4F ///此跳转自然是关键跳转了。
00407A1E . 6A 40 PUSH 40
00407A20 . 68 CC854200 PUSH 1D32400_.004285CC ; 注册成功
00407A25 . 68 A4854200 PUSH 1D32400_.004285A4 ; 感谢注册
00407A2A . 8BCB MOV ECX,EBX
00407A2C . E8 CF550100 CALL <JMP.&mfc42.#4224_?MessageBoxA@CWnd>
00407A31 . 8B15 28C74200 MOV EDX,DWORD PTR DS:[42C728]
00407A37 . A1 20C54200 MOV EAX,DWORD PTR DS:[42C520]
00407A3C . 52 PUSH EDX
00407A3D . 50 PUSH EAX
00407A3E . C705 A4C74200>MOV DWORD PTR DS:[42C7A4],1
00407A48 . 68 9C854200 PUSH 1D32400_.0042859C ; %s v%s
00407A4D . EB 2F JMP SHORT 1D32400_.00407A7E
00407A4F > 6A 10 PUSH 10
00407A51 . 68 8C854200 PUSH 1D32400_.0042858C ; 注册失败
00407A56 . 68 64854200 PUSH 1D32400_.00428564 ; 注册码不正确
00407A5B . 8BCB MOV ECX,EBX
00407A5D . E8 9E550100 CALL <JMP.&mfc42.#4224_?MessageBoxA@CWnd>
分析,此软件非明码比较,可知,关键跳转上的那个call,就是关键call了,跟进,发现是对所输入的注册码进行一连串的
处理,我是看不懂。呵呵,只好爆破了。。
发现,关键call后,不是紧接着,关键跳,而是由
00407A16 . 83C4 04 ADD ESP,4///这个可能是用来,平衡栈的吧。
00407A19 . 83F8 01 CMP EAX,1//这个是关键 了,由EAX的值决定JNZ。。只好改EAX的值了
跟进关建call直接来到:
00406C2B |. 5F POP EDI
00406C2C |. 0F94C1 SETE CL
00406C2F |. 5E POP ESI
00406C30 8BC1 MOV EAX,ECX
00406C32 5B POP EBX
00406C33 81C4 00030000 ADD ESP,300
00406C39 |. C3 RETN
将其改为:
00406C2F |. 5E POP ESI
00406C30 |. 8BC1 MOV EAX,ECX
00406C32 |. 5B POP EBX
00406C33 |. 81C4 00030000 ADD ESP,300
00406C39 |. C3 RETN
00406C3A |> 5F POP EDI
00406C3B |. 5E POP ESI
00406C3C |. B8 01000000 MOV EAX,1
00406C41 |. 90 NOP
00406C42 |. 90 NOP
00406C43 |. 5B POP EBX
00406C44 |. 81C4 00030000 ADD ESP,300
00406C4A \. C3 RETN
保存修改,随便输入几个数字。
软件提示"感谢注册“
试试转换一下。
呵呵,能够完全转换,未注册的只能转换50%。。
看来成功了。。
---------------------------------------------------------------------------------------------------------------
版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年02月27日 23:40:45
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!