Private Exe Protector V2.0快速脱壳!
【破文标题】Private Exe Protector V2.0脱壳【破文作者】tangxiaodao
【作者邮箱】[email protected]
【作者主页】dtxd.vicp.netQQ:172751148
【破解工具】PEID V0.94,DeFixed,LoadPE,ImportREC
【破解平台】Window XP sp2
【软件名称】某一国产外挂(在这里同大家交流脱壳方法,所以软件就不说了)
【原版下载】不提供下载地址了
【保护方式】Private exe Protector V2.0 -> SetiSoft Team *
【作者声明】我是菜鸟。偶遇一点脱壳心得,愿与大家分享。
【详细过程】
1.首先查壳:Private exe Protector V2.0 -> SetiSoft Team *据说此壳很猛(关于壳的介绍大家
可以到百度,GooGle上面找),但有所心不甘,就信手动之。
2.寻找OEP,这步比较容易.
OD载入(我用的是DeFixed版本).停在这里:
00401000 > $60 PUSHAD
00401001 .61 POPAD
00401002 .89F9 MOV ECX,EDI
00401004 .51 PUSH ECX
00401005 .58 POP EAX
00401006 .89D8 MOV EAX,EBX
00401008 .39F2 CMP EDX,ESI
0040100A .8D3B LEA EDI,DWORD PTR DS:
0040100C .85F2 TEST EDX,ESI
0040100E .BF 79D7BD2B MOV EDI,2BBDD779
00401013 .66:9C PUSHFW
00401015 .66:9D POPFW
00401017 .29DF SUB EDI,EBX
00401019 .F7D9 NEG ECX
0040101B .75 00 JNZ SHORT 0040101D
0040101D >C1F1 8D SAL ECX,8D
然后ALT+M打开内存,用内存断点法分次在.rdata.rsrc.data.code段下断并F9运行
其实就是四次内存断点法,最后来到这里
0046A944 55 PUSH EBP
0046A945 8BEC MOV EBP,ESP
0046A947 83C4 F0 ADD ESP,-10
0046A94A B8 3CA74600 MOV EAX,0046A73C
0046A94F E8 94BAF9FF CALL 004063E8
0046A954 A1 9CC34600 MOV EAX,DWORD PTR DS:
0046A959 8B00 MOV EAX,DWORD PTR DS:
0046A95B E8 2CDBFEFF CALL 0045848C
0046A960 A1 9CC34600 MOV EAX,DWORD PTR DS:
大家看到了吧!很明显是delphi程序的入口点,这不就是OEP了嘛!然后dump出来,此时用ImportREC修复,出
现问题了,找不到IAT地址了.看来IAT加密了,咋办?当然是找IAT的真实地址了。
3.寻找IAT地址,这步也不是很难
用HexWorkShop打开加壳程序,拉到最后,如下图:
https://www.chinapyg.com/attachment.php?aid=34289¬humb=yes
大家看到KerNel32.dllExitProcess这样的东东了
吧,然后记下前面的地址。在OD中到这个地址,然后向上翻翻,找到类似Call xxxxxx ,JMP xxxxxx类似
的东东,因为delphi的程序的特殊性,所以我找到的call如下:
00587F81 E8 0E50A4B0 CALL B0FCCF94
00587F86 2E:2986 C08E1F5>SUB DWORD PTR CS:,EAX
00587F8D 0D 4BE5D9DA OR EAX,DAD9E54B
00587F92 40 INC EAX
00587F93 B9 489E10A5 MOV ECX,A5109E48
00587F98 36:D188 47AA22A>ROR DWORD PTR SS:,1
00587F9F 91 XCHG EAX,ECX
在这个call地址下内存访问断点,F9运行,来到这里
0048269F 54 PUSH ESP
004826A0 E8 B3EAFFFF CALL 00481158 ; JMP to
kernel32.QueryPerformanceCounter
004826A5 85C0 TEST EAX,EAX
004826A7 74 0B JE SHORT 004826B4
004826A9 8B0424 MOV EAX,DWORD PTR SS:
004826AC A3 08403900 MOV DWORD PTR DS:,EAX
004826B1 59 POP ECX
004826B2 5A POP EDX
004826B3 C3 RET
004826B4 E8 A7EAFFFF CALL 00481160 ; JMP to
kernel32.GetTickCount
大家看到后面的注释内容了吧,那是什么?不就是API嘛!选一个call,键盘上按Enter,来到这里
00481068- FF25 48913900 JMP DWORD PTR DS: ; kernel32.CreateFileA
0048106E 8BC0 MOV EAX,EAX
00481070- FF25 44913900 JMP DWORD PTR DS: ; kernel32.GetFileType
00481076 8BC0 MOV EAX,EAX
00481078- FF25 40913900 JMP DWORD PTR DS: ; kernel32.GetFileSize
0048107E 8BC0 MOV EAX,EAX
00481080- FF25 3C913900 JMP DWORD PTR DS: ;
kernel32.GetStdHandle
00481086 8BC0 MOV EAX,EAX
00481088- FF25 38913900 JMP DWORD PTR DS: ;
kernel32.RaiseException
0048108E 8BC0 MOV EAX,EAX
00481090- FF25 34913900 JMP DWORD PTR DS: ; kernel32.ReadFile
00481096 8BC0 MOV EAX,EAX
00481098- FF25 30913900 JMP DWORD PTR DS: ; ntdll.RtlUnwind
0048109E 8BC0 MOV EAX,EAX
004810A0- FF25 2C913900 JMP DWORD PTR DS: ;
kernel32.SetEndOfFile
004810A6 8BC0 MOV EAX,EAX
004810A8- FF25 28913900 JMP DWORD PTR DS: ;
kernel32.SetFilePointer
004810AE 8BC0 MOV EAX,EAX
004810B0- FF25 24913900 JMP DWORD PTR DS: ;
kernel32.UnhandledExceptionFilter
004810B6 8BC0 MOV EAX,EAX
004810B8- FF25 20913900 JMP DWORD PTR DS: ; kernel32.WriteFile
004810BE 8BC0 MOV EAX,EAX
004810C0- FF25 1C913900 JMP DWORD PTR DS: ; kernel32.ExitProcess
这不正是我们想到的东东嘛!然后随便选一个JMP在数据窗口中跟随,如下:
004991487C801A24kernel32.CreateFileA
0049914C7C809B47kernel32.CloseHandle
0049915000000000
0049915477D3119Buser32.GetKeyboardType
0049915877D5058Auser32.MessageBoxA
0049915C00000000
0049916077DA7883ADVAPI32.RegQueryValueExA
0049916477DA761BADVAPI32.RegOpenKeyExA
0049916877DA6BF0ADVAPI32.RegCloseKey
0049916C00000000
00499170770F4880oleaut32.SysFreeString
00499174771244ADoleaut32.SysReAllocStringLen
00499178770F4BA7oleaut32.SysAllocStringLen
0049917C00000000
004991807C809BC5kernel32.TlsSetValue
004991847C809740kernel32.TlsGetValue
004991887C8136D7kernel32.TlsFree
0049918C7C812D9Fkernel32.TlsAlloc
004991907C80992Fkernel32.LocalFree
004991947C80998Dkernel32.LocalAlloc
......
嘿。。大家轻松快活地去IAT的起始地址和结束地址去吧!
4.ImportREC修复程序
OEP找到了RVA知道了大小知道了全部输入->获得输入信息,全部有效->修复抓取文件!
OK!脱壳完毕!
********************本脱文出自原创,如需转载,请注明出处,谢谢!**********************
[ 本帖最后由 tangxiaodao 于 2008-7-8 20:49 编辑 ] 自己抢个SF坐坐吧!别人的SF老是抢不到^_^ 外挂发上来练习一下。呵呵。 很好的文章..呵呵 看这壳的猥琐程度,貌似非PEP加的壳,而到像是PEID识别出错,PEP是一款比较猥琐的壳,这里我用PEP正版加了一个计算器,加密力度:最小(选项除勾选注册NAG作为演示外,其余功能选项均不选):loveliness: ...这壳我都没见过 看这壳的猥琐程度,我根本看不懂 我想问高手 内存断点 什么时候用2次什么时候用4次 不会告我要自己一次一次试验吧/:01 相当不错啊可是附件的地址怎么看?
页:
[1]