好友
阅读权限20
听众
最后登录1970-1-1
|
SoftSentry 3.0简单脱壳【原创】
--------------------------------------------------------------------------------
【破解作者】 layper
【作者邮箱】 layper2002@yahoo.com.cn
【作者主页】 layper.51.net
【使用工具】 peid,od,lordPE
【破解平台】 Win9x/NT/2000/XP
【软件名称】 cakewalk sonar4.01汉化版
【软件简介】 呵呵,这个软件搞MIDI的朋友就不用说也知道它的江湖地位了
【软件大小】 6.73M
【加壳方式】 SoftSentry 3.0
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
首先我感谢这位为我们汉化这个软件的作者,这个专业级的软件对于英语不好的朋友来说,入门可以说是很难的,这位
汉化的作者呢汉化了两部分的内容,非常难得。可是主程序没有汉化,而且,还加上了壳,我一不小心直接把他所谓的
汉化主程序覆盖了原来的主程序,呵呵,只能开工脱他的壳了。这个脱文很简单,高手免看了。:)
PEID查壳SoftSentry 3.0 -> 20/20 Software,直接OD载入准备脱壳,经过漫长的等待终于加载成功,
00B81270 > 55 PUSH EBP ;OD停在这里
00B81271 8BEC MOV EBP,ESP
00B81273 83EC 78 SUB ESP,78
00B81276 53 PUSH EBX
00B81277 56 PUSH ESI
00B81278 57 PUSH EDI
00B81279 E9 B0060000 JMP sonarpdr.00B8192E ;SoftSentry壳的典型入口特征,跳
00B81923 FF15 24C1B800 CALL DWORD PTR DS:[<&KERNEL32.ExitProces>; kernel32.ExitProcess
00B81929 8B45 B4 MOV EAX,DWORD PTR SS:[EBP-4C]
00B8192C EB 05 JMP SHORT sonarpdr.00B81933
00B8192E ^ E9 3BFAFFFF JMP sonarpdr.00B8136E ;来到这里,往回跳不能F4往下,否则跑飞,跟着跳
00B81933 5F POP EDI
00B81934 5E POP ESI
00B81935 5B POP EBX
00B81936 8BE5 MOV ESP,EBP
00B81938 5D POP EBP
00B81939 C2 1000 RETN 10
00B8136E C745 E4 0000000>MOV DWORD PTR SS:[EBP-1C],0 ;来到这里F8走,注意函数变化
00B81375 8D45 B8 LEA EAX,DWORD PTR SS:[EBP-48]
00B81378 50 PUSH EAX
00B81379 FF15 30C1B800 CALL DWORD PTR DS:[<&KERNEL32.GetStartup>; kernel32.GetStartupInfoA
00B8137F 8B4D E4 MOV ECX,DWORD PTR SS:[EBP-1C]
00B81382 83E1 01 AND ECX,1
00B81385 85C9 TEST ECX,ECX
00B81387 74 0E JE SHORT sonarpdr.00B81397
00B81389 8B55 E8 MOV EDX,DWORD PTR SS:[EBP-18]
00B8138C 81E2 FFFF0000 AND EDX,0FFFF
00B81392 8955 88 MOV DWORD PTR SS:[EBP-78],EDX
00B81395 EB 07 JMP SHORT sonarpdr.00B8139E ;跳
00B81397 C745 88 0A00000>MOV DWORD PTR SS:[EBP-78],0A
00B8139E 8B45 88 MOV EAX,DWORD PTR SS:[EBP-78] ;跳到这
00B813A1 8945 14 MOV DWORD PTR SS:[EBP+14],EAX
00B813A4 6A 00 PUSH 0
00B813A6 FF15 40C1B800 CALL DWORD PTR DS:[<&KERNEL32.GetModuleH>; kernel32.GetModuleHandleA
00B813AC 8945 08 MOV DWORD PTR SS:[EBP+8],EAX
00B813AF C745 0C 0000000>MOV DWORD PTR SS:[EBP+C],0
00B813B6 FF15 1CC1B800 CALL DWORD PTR DS:[<&KERNEL32.GetCommand>; kernel32.GetCommandLineA
00B813BC 8945 10 MOV DWORD PTR SS:[EBP+10],EAX
00B813BF 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00B813C2 894D AC MOV DWORD PTR SS:[EBP-54],ECX
00B813C5 66:C705 10BEB80>MOV WORD PTR DS:[B8BE10],0
00B813CE 66:C705 08BBB80>MOV WORD PTR DS:[B8BB08],0
00B813D7 837D 0C 00 CMP DWORD PTR SS:[EBP+C],0
00B813DB 75 13 JNZ SHORT sonarpdr.00B813F0
00B813DD 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00B813E0 E8 EB100000 CALL sonarpdr.00B824D0
00B813E5 85C0 TEST EAX,EAX
00B813E7 75 07 JNZ SHORT sonarpdr.00B813F0 ;跳
00B813E9 33C0 XOR EAX,EAX
00B813EB E9 43050000 JMP sonarpdr.00B81933
00B813F0 68 04010000 PUSH 104 ;跳到这
00B813F5 68 7CBCB800 PUSH sonarpdr.00B8BC7C
00B813FA 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
00B813FD 52 PUSH EDX
00B813FE FF15 20C1B800 CALL DWORD PTR DS:[<&KERNEL32.GetModuleF>; kernel32.GetModuleFileNameA
00B81404 85C0 TEST EAX,EAX
00B81406 75 07 JNZ SHORT sonarpdr.00B8140F ;跳
00B81408 33C0 XOR EAX,EAX
00B8140A E9 24050000 JMP sonarpdr.00B81933
00B8140F 8B55 14 MOV EDX,DWORD PTR SS:[EBP+14] ;跳到这里
00B81412 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00B81415 E8 16110000 CALL sonarpdr.00B82530
00B8141A 85C0 TEST EAX,EAX
00B8141C 75 1B JNZ SHORT sonarpdr.00B81439 ;跳
00B8141E 6A 00 PUSH 0
00B81420 68 7CBBB800 PUSH sonarpdr.00B8BB7C
00B81425 68 D882B800 PUSH sonarpdr.00B882D8 ; ASCII "InitInstance FALSE"
00B8142A 6A 00 PUSH 0
00B8142C FF15 00C2B800 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; USER32.MessageBoxA
00B81432 33C0 XOR EAX,EAX
00B81434 E9 FA040000 JMP sonarpdr.00B81933
00B81439 C745 B4 0100000>MOV DWORD PTR SS:[EBP-4C],1 ;跳到这里
00B81440 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
00B81443 A3 1CBCB800 MOV DWORD PTR DS:[B8BC1C],EAX
00B81448 E8 C32E0000 CALL sonarpdr.00B84310
00B8144D 85C0 TEST EAX,EAX
00B8144F 0F84 28010000 JE sonarpdr.00B8157D ;这里跳走,如果这里跳的话就无法跟踪到OEP了,nop它
前面这里并非我有意灌水,想我初学手动脱壳,先注意观察一下代码是有好处的,以后直接下bp GetModuleFileNameA断点就轻松多了,F8继
续
00B814F4 85C9 TEST ECX,ECX
00B814F6 75 1E JNZ SHORT sonarpdr.00B81516 ;跳
00B81522 85C9 TEST ECX,ECX
00B81524 75 21 JNZ SHORT sonarpdr.00B81547 ;跳
00B81573 A3 80BDB800 MOV DWORD PTR DS:[B8BD80],EAX
00B81578 E9 1C030000 JMP sonarpdr.00B81899 ;大跳
00B818E9 50 PUSH EAX
00B818EA 68 8882B800 PUSH sonarpdr.00B88288 ; ASCII "sSENTRYWndClass"
00B818EF FF15 98C1B800 CALL DWORD PTR DS:[<&USER32.UnregisterCl>; USER32.UnregisterClassA
这两句是特征码,经过这里注意CALL
00B818F5 33C9 XOR ECX,ECX
00B818F7 66:8B0D 9882B80>MOV CX,WORD PTR DS:[B88298]
00B818FE 85C9 TEST ECX,ECX
00B81900 74 0F JE SHORT sonarpdr.00B81911
00B81902 8B55 AC MOV EDX,DWORD PTR SS:[EBP-54]
00B81905 52 PUSH EDX
00B81906 8D55 B0 LEA EDX,DWORD PTR SS:[EBP-50]
00B81909 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00B8190C E8 2F000000 CALL sonarpdr.00B81940 ;这里是关键CALL,如果F8往下单步则跑飞,跟进
00B81940 A1 80BDB800 MOV EAX,DWORD PTR DS:[B8BD80] ;跟进到这里
00B81945 53 PUSH EBX
00B81946 55 PUSH EBP
00B81947 56 PUSH ESI
00B81948 8B71 06 MOV ESI,DWORD PTR DS:[ECX+6]
00B8194B 57 PUSH EDI
00B8194C 8BFA MOV EDI,EDX
00B8194E 8B51 02 MOV EDX,DWORD PTR DS:[ECX+2]
00B81951 33D0 XOR EDX,EAX
00B81953 8BC2 MOV EAX,EDX
00B81955 8951 02 MOV DWORD PTR DS:[ECX+2],EDX ;不能单步走到这里,否则跑飞
00B81958 8B51 0A MOV EDX,DWORD PTR DS:[ECX+A] ;F2下断,直接下来,继续
00B819AA FFD6 CALL ESI ;跟进,到了
00879BD8 55 DB 55 ; CHAR 'U',从模块删除分析,LordPE完整脱壳
00879BD9 8B DB 8B
00879BDA EC DB EC
00879BDB 6A DB 6A ; CHAR 'j'
脱壳后用LordPE中的PE编辑器载入脱壳后的文件,修改入口点为00879BD8-00400000=00479BD8,保存脱壳就完成了
--------------------------------------------------------------------------------
【破解总结】
(1)下bp GetModuleFileNameA断点返回用户代码
(2)之后第三个跳转(je)改为nop
(3)经过"sSENTRYWndClass"、UnregisterClassA注意CALL
(4)跟进关键CALL
(5)查看特征码MOV DWORD PTR DS:[ECX+2],EDX,在它下面下断F9直接下去
(6)CALL ESI跟进,脱壳
(7)修正入口点,保存
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! |
|