欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

手动脱壳入门第十八篇 PC Shrinker 0.71

程序员文章站 2022-03-19 11:20:49
【脱文标题】 手动脱壳入门第十八篇 PC Shrinker 0.71 【脱文作者】 weiyi75[Dfcg] 【作者邮箱】 weiyi75@sohu.com 【作者主页】 Dfcg官方大本营 【使用工具】 Peid,O... 08-10-08...
【脱文标题】 手动脱壳入门第十八篇 pc shrinker 0.71
【脱文作者】 weiyi75[dfcg]
【作者邮箱】 weiyi75@sohu.com
【作者主页】 dfcg官方大本营
【使用工具】 peid,ollydbg,importrec
【脱壳平台】 win2k/xp
【软件名称】 pcshrink.exe
【软件简介】 phrozen crew pe shrinker is an windows 9x/nt executable file compressor, allowing compressed executables to run, functionally,the same as always, but occupy a significantly less amount of disk space.
【软件大小】 15 kb
【下载地址】 本地下载
pc shrinker 0.71.rar
【加壳方式】 pc shrinker 0.71 -> virogen
【保护方式】 pc shrinker压缩壳
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【脱壳内容】
这个程序的压缩选项是非常丰富的,从界面中也没有加密选项,无效隐藏od和设置异常。
先看看它加壳的记事本
本地下载
notepad.rar
首先peid查壳,为pc shrinker 0.71 -> virogen,od载入运行,无任何异常,判断其为压缩壳。
0040aafb > 9c pushfd //记事本外壳入口。
0040aafc 60 pushad //仍然是esp定律
0040aafd bd b7710000 mov ebp,71b7 //这里的esp为12ffa0
0040ab02 01ad 543a4000 add dword ptr ss:[ebp 403a54],ebp
0040ab08 ffb5 503a4000 push dword ptr ss:[ebp 403a50]
0040ab0e 6a 40 push 40
0040ab10 ff95 883a4000 call dword ptr ss:[ebp 403a88]
0040ab16 50 push eax
0040ab17 50 push eax
0040ab18 2d 7d394000 sub eax,notepad.0040397d
0040ab1d 8985 7e394000 mov dword ptr ss:[ebp 40397e],eax
0040ab23 5f pop edi
0040ab24 8db5 7d394000 lea esi,dword ptr ss:[ebp 40397d]
0040ab2a b9 fc000000 mov ecx,0fc
0040ab2f f3:a5 rep movs dword ptr es:[edi],dword ptr ds>
0040ab31 5f pop edi
0040ab32 ffe7 jmp edi
..................................................
命令行 dd 12ffa0
下硬件访问-dword断点。
f9运行
硬件中断。
标签1
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
0040aafb > 9c pushfd //记事本外壳入口。
0040aafc 60 pushad //
解压缩过程,就是我们以前慢慢跟踪的一下循环圈。
00132dc6 61 popad //堆栈平衡,完全工整对应。
00132dc7 9d popfd //这里是出口,我们断在这里。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
00132dc6 61 popad
00132dc7 9d popfd //这里是出口,我们断在这里。转标签1看看
00132dc8 ba cc104000 mov edx,4010cc
00132dcd ffe2 jmp edx //edx=4010cc,这个是地球人都只道的记事本的oep
004010cc 55 push ebp //在这里用loadpe直接脱壳
004010cd 8bec mov ebp,esp
004010cf 83ec 44 sub esp,44
004010d2 56 push esi //我们看到加密表没有破坏,往下看到kernel32.getcommandlinea
004010d3 ff15 e4634000 call dword ptr ds:[4063e4] ; kernel32.getcommandlinea
004010d9 8bf0 mov esi,eax
004010db 8a00 mov al,byte ptr ds:[eax]
004010dd 3c 22 cmp al,22
004010df 75 1b jnz short notepad.004010fc
004010e1 56 push esi
004010e2 ff15 f4644000 call dword ptr ds:[4064f4] ; user32.charnexta
004010e8 8bf0 mov esi,eax
004010ea 8a00 mov al,byte ptr ds:[eax]
004010ec 84c0 test al,al
004010ee 74 04 je short notepad.004010f4
004010f0 3c 22 cmp al,22
004010f2 ^ 75 ed jnz short notepad.004010e1
...........................................................
运行importrec,选择这个进程。把oep改为000010cc,点it autosearch,点“get import”,函数都是有效的。fixdump,正常运行,记事本脱壳完毕。
脱壳主程序
继续od载入它的主程序。
004066f8 > 9c pushfd //主程序外壳入口。
004066f9 60 pushad //从这这句过后用esp定律吧,
004066fa bd b42d0000 mov ebp,2db4 //到这里esp=19ffa0
004066ff 01ad 543a4000 add dword ptr ss:[ebp 403a54],ebp
00406705 ffb5 503a4000 push dword ptr ss:[ebp 403a50]
0040670b 6a 40 push 40
0040670d ff95 883a4000 call dword ptr ss:[ebp 403a88]
00406713 50 push eax
00406714 50 push eax
00406715 2d 7d394000 sub eax,pcshrink.0040397d
0040671a 8985 7e394000 mov dword ptr ss:[ebp 40397e],eax
00406720 5f pop edi
00406721 8db5 7d394000 lea esi,dword ptr ss:[ebp 40397d]
00406727 b9 fc000000 mov ecx,0fc
0040672c f3:a5 rep movs dword ptr es:[edi],dword ptr ds>
0040672e 5f pop edi
0040672f ffe7 jmp edi
................................................................................
dd 19ffa0
下硬件访问-dword断点。
f9运行
硬件中断。
001a2dd6 61 popad
001a2dd7 9d popfd //堆栈平衡
001a2dd8 ba 00104000 mov edx,401000
001a2ddd ffe2 jmp edx //edx=401000是主程序的oep
00401000 e8 db e8 //这种情况大家应该见多了,点右键-分析-清除分析。
00401001 05 db 05
00401002 16 db 16
00401003 00 db 00
00401004 00 db 00
00401005 a3 db a3
00401006 df db df
00401007 37 db 37 ; char '7'
00401008 40 db 40 ; char '@'
00401009 00 db 00
0040100a e8 db e8
0040100b bf db bf
0040100c 15 db 15