首页
社区
课程
招聘
[原创]轻轻松松学开车7.8 多层壳+Anti+暗桩
发表于: 2005-10-2 16:50 6606

[原创]轻轻松松学开车7.8 多层壳+Anti+暗桩

2005-10-2 16:50
6606
轻轻松松学开车 7.8
脱壳过程  By Cater 2005/10/02
好久没来上网了,昨天晚上我疯狂在看雪论坛里面找寻一些精华,心想可以十一有的学习了,看中了
xIkUg 大虾写的 《写给新手 - 浅谈脱方法》,也照旧学习,试炼起来,可事大虾写的是6.6版本的,现在已经到7.8版本了,当初我没注意只感觉怎么不对劲怎么是nspack加的壳阿,后来才发现果然不是一个版本~既然不是那我门就自己动手来吧~

目标程序:Manual for 轻轻松松学开车 7.8
下载地址:http://bbs.xp-program.com/
调试工具:OD
正文:
OD加载
一,脱壳
0040101B 是的一层的OEP
0040101B D> $- E9 97843000 jmp DrvStudy.007094B7         典型的 Nspack 壳,回车 跟进去!
00401020 B4 db B4
00401021 09 db 09
00401022 BA db BA
00401023 0B db 0B
00401024 01 db 01
00401025 CD db CD
00401026 21 db 21 ; CHAR '!'
00401027 B4 db B4
00401028 4C db 4C ; CHAR 'L'
00401029 CD db CD
0040102A . 21 70 61 63 6B 6>ascii "!packed by nspac"
0040103A . 6B 24 40 00 ascii "k$@",0
0040103E 00 db 00
0040103F 00504500 dd DrvStudy.00455000

来到这里
007094B7 9C pushfd
007094B8 60 pushad
007094B9 E8 00000000 call DrvStudy.007094BE
007094BE 5D pop ebp
007094BF B8 07000000 mov eax,7
007094C4 2BE8 sub ebp,eax
007094C6 8DB5 E9FAFFFF lea esi,dword ptr ss:[ebp-517]
007094CC 8B06 mov eax,dword ptr ds:[esi]
007094CE 83F8 00 cmp eax,0
007094D1 74 11 je short DrvStudy.007094E4
007094D3 8DB5 11FBFFFF lea esi,dword ptr ss:[ebp-4EF]
007094D9 8B06 mov eax,dword ptr ds:[esi]
007094DB 83F8 01 cmp eax,1
007094DE 0F84 4B020000 je DrvStudy.0070972F

注:看到 “pushfd,pushad”当然你可以搜索“popad,popfd”,可是本人有个小小的坏习惯,喜欢在这些黄色注明的 条件跳转指令上面点一下,看看向下跳转的幅度,喜欢满足最大跳转!
这样我就选择了 007094DE 0F84 4B020000 je DrvStudy.0070972F
回车 去过来到
0070972F 61 popad
00709730 9D popfd
00709731 - E9 CA68FFFF jmp DrvStudy.00700000
好啦,下面的流程已经是确定了没有条件跳了,只能执行过来啦~
命令 G 00700000
00700000 55 db 55 ; CHAR 'U'
00700001 8B db 8B
00700002 EC db EC
00700003 6A db 6A ; CHAR 'j'
00700004 FF db FF
00700005 68 db 68 ; CHAR 'h'
00700006 2A db 2A ; CHAR '*'
00700007 2C db 2C ; CHAR ','
00700008 0A db 0A

00700000 就是 第二层的OEP,Ctrl+A 分析下,代码变成~
00700000 . 55 push ebp               一段 伪装成 VC 的代码!
00700001 . 8BEC mov ebp,esp
00700003 . 6A FF push -1
00700005 . 68 2A2C0A00 push 0A2C2A
0070000A . 68 38900D00 push 0D9038 ; SE 句柄安装
0070000F . 64:A1 00000000 mov eax,dword ptr fs:[0]
00700015 . 50 push eax
00700016 . 64:8925 00000000 mov dword ptr fs:[0],esp
0070001D . 58 pop eax
0070001E . 64:A3 00000000 mov dword ptr fs:[0],eax
00700024 . 58 pop eax
00700025 . 58 pop eax
00700026 . 58 pop eax
00700027 . 58 pop eax
00700028 . 8BE8 mov ebp,eax
0070002A . B8 01D06F00 mov eax,DrvStudy.006FD001
0070002F . FFE0 jmp eax                这个 指令有经验的人一定知道是干什么用的吧~F4  过来!
00700031 90 nop

F8来到
006FD001 60 db 60 ; CHAR '`'
006FD002 E8 db E8
006FD003 03 db 03
006FD004 00 db 00
006FD005 00 db 00
006FD006 00 db 00
006FD007 E9 db E9
006FD008 EB db EB
006FD009 . 04 5D add al,5D
006FD00B . 45 inc ebp
006FD00C . 55 push ebp
006FD00D . C3 retn

006FD001 是的三层的 OEP
不过这里的执行指令是以数据形式存放的~当然你现在也可以Dump下,加载dump后的文件,就知道是 aspack 的壳代码~
不过我喜欢直接一次性KO~
选中上面的那些代码,右键》二进制》NOPIT,然后再撤销,发现代码还原了
006FD001 60 pushad
006FD002 E8 03000000 call DrvStudy.006FD00A       F7 进去
006FD007 - E9 EB045D45 jmp 45CCD4F7
006FD00C 55 push ebp
006FD00D C3 retn
一路 F7来到
006FD014 5D pop ebp
006FD015 BB EDFFFFFF mov ebx,-13
006FD01A 03DD add ebx,ebp
006FD01C 81EB 00D02F00 sub ebx,2FD000
006FD022 83BD 22040000 00 cmp dword ptr ss:[ebp+422],0
006FD029 899D 22040000 mov dword ptr ss:[ebp+422],ebx
006FD02F 0F85 65030000 jnz DrvStudy.006FD39A                我的习惯:点一下,回车
006FD035 8D85 2E040000 lea eax,dword ptr ss:[ebp+42E]
006FD03B 50 push eax
006FD03C FF95 4D0F0000 call dword ptr ss:[ebp+F4D]

来到
006FD39A > \B8 4C841F00 mov eax,1F844C
006FD39F . 50 push eax
006FD3A0 . 0385 22040000 add eax,dword ptr ss:[ebp+422]
006FD3A6 . 59 pop ecx
006FD3A7 . 0BC9 or ecx,ecx
006FD3A9 . 8985 A8030000 mov dword ptr ss:[ebp+3A8],eax
006FD3AF . 61 popad
006FD3B0 . 75 08 jnz short DrvStudy.006FD3BA             我的习惯:再点一下,回车
006FD3B2 . B8 01000000 mov eax,1
006FD3B7 . C2 0C00 retn 0C
006FD3BA > 68 00000000 push 0
006FD3BF . C3 retn                                       好啦流程已成定局,没有其他跳转指令了, F4 过来~

F8来到
005F844C 55 db 55 ; CHAR 'U'
005F844D 8B db 8B
005F844E EC db EC
005F844F 83 db 83
005F8450 C4 db C4
005F8451 F0 db F0
005F8452 53 db 53 ; CHAR 'S'
005F8453 B8 db B8
005F8454 2C7F5F00 dd DrvStudy.005F7F2C

OK,这里 005F844C 为第四层 OEP,由于这些可执行代码也是以数据形式存放的,我们暂时也看不清OD转存下好了~(注意:由于代码段以红色显示,所以前面我说的那个方法:选中上面的那些代码,右键》二进制》NOPIT,然后再撤销。在这里不可使用用~)
好了到这里,我门的脱壳已经成功了,PEID看下是什么软件写的,晕,查不出来,用资源黑客看下资源,里面有 RCData数据,所以很有可能是 Dephi程序!
二。修复
我们发现我们脱壳后的程序无法正常运行,显示错误对话框,看来有安桩吧!
OD加载,终于看到还原好的代码了・
005F844C u> $ 55 push ebp
005F844D . 8BEC mov ebp,esp
005F844F . 83C4 F0 add esp,-10
005F8452 . 53 push ebx
005F8453 . B8 2C7F5F00 mov eax,upack.005F7F2C
005F8458 . E8 E3FAE0FF call upack.00407F40
005F845D . 8B1D 5CA46000 mov ebx,dword ptr ds:[60A45C] ; upack.0060BC10
005F8463 . 6A 00 push 0 ; /Title = NULL

F9 直接运行,发现OD被K了~整个过程没有因为异常错误而中断下来,所以可以认为程序脱壳是成功的,PE结构是好的。至于那个错误显示,那是作者加上去的!
而且还有Anti 防止程序被调试噢~
(一)去 Anti
OD重新加载,Ctrl+N,在
名称位于 upack,项目 25
地址=0060F2A0
区段=?V 0
类型=导入 (已知)
名称=kernel32.CloseHandle

名称位于 upack,项目 493
地址=0060F334
区段=?V 0
类型=导入 (已知)
名称=kernel32.TerminateProcess

名称位于 upack,项目 494
地址=0060F330
区段=?V 0
类型=导入 (已知)
名称=kernel32.TerminateThread
分别三个函数上右键,再每个参考上设置断点,Alt+B,把反汇编里面开头显示 是 “JMP”的断点去掉~ F9运行~
0053EBE4 |. /74 0B je short upack.0053EBF1                     那么断点上面的那个条件跳转就是 Anti 的活塞啦,改成 JMP跳过 下面的那个 Call
0053EBE6 |. |6A 00 push 0 ; /ExitCode = 0
0053EBE8 |. |8B45 F8 mov eax,dword ptr ss:[ebp-8] ; |
0053EBEB |. |50 push eax ; |hProcess
0053EBEC |. |E8 AB98ECFF call <jmp.&kernel32.TerminateProcess> ; \TerminateProcess       发现程序断在这里

0053EBE4 /EB 0B jmp short upack.0053EBF1   改成这样,选中这行,右键》复制到可执行文件》选择部分,再弹出的窗口中右击鼠标,保存文件即可~
到这里 Anti 解除了,OD加载刚才保存的文件,发现,这下不被杀了,不过还是有作者设置的错误显示!
(二)除暗桩!
OD加载,去Anti 的程序,F9运行,待错误框出来,进OD点击 “||”暂停按钮,Alt+F9!再出去点那个确定!
00490141 |. 50 push eax ; |hOwner
00490142 |. E8 7D8BF7FF call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
00490147 |. 8945 F8 mov dword ptr ss:[ebp-8],eax       断点断在这里!

往上一一找 Call过来或是条件跳,跳过来的指令~
这个分析就........太难了我还不会,希望高手指点下,我对付这个暗桩只是将
00490012 |. /75 43 jnz short upack.00490057
修改成
00490012 /EB 43 jmp short upack.00490057
存盘了事的,发现,程序给我改的有点......不过已经有了运行界面了~
^_^~
我也是新手初学,教材简单,献给初学者~
Cater
2005.10.02

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 109
活跃值: (438)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
2
http://www.hackjy.com/cater/
欢迎大家;来我留言板吹吹牛~
2005-10-2 16:51
0
雪    币: 214
活跃值: (86)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
狂汗 ,这软件作者心理是不是有点太BT了……

直接弄个ASPR 2.X的或者ARM4.3的就有的搞了,用不用弄这么多壳…………
2005-10-2 23:21
0
雪    币: 109
活跃值: (438)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
4
还好都是弱壳~
轻轻松松搞定了~

只是 暗桩 我是 瞎破解的~
呵呵!
2005-10-3 09:07
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
支持一下楼主!
2005-10-3 11:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持一下楼主!
2005-10-4 10:46
0
雪    币: 136
活跃值: (424)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
最初由 lidazixun 发布
狂汗 ,这软件作者心理是不是有点太BT了……

直接弄个ASPR 2.X的或者ARM4.3的就有的搞了,用不用弄这么多壳…………


有同感
2005-11-22 08:50
0
雪    币: 221
活跃值: (161)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
好文章!感谢楼主!

我最近正为一些软件中的暗桩和反跟踪代码烦恼,楼主的文章给了我很多启迪。

请教一个问题,有很多软件初次查是用UPX加的壳,用相关脱壳软件或者OD脱掉,然后PEID中可以查看到是什么软件编写的了,但在OD中打开,仍然提示入口在代码之外,而且查看PE区段写着ASPR一类的名字。请问这是加了多层壳还是没脱尽?
2005-11-22 16:59
0
游客
登录 | 注册 方可回帖
返回
//