找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 358|回复: 4

脱壳技术,手动脱壳进阶第五篇yoda's Crypter V1.2(图),yoda

[复制链接]
发表于 2009-4-13 11:30:48 | 显示全部楼层 |阅读模式 IP:江苏扬州
脱壳技术,手动脱壳进阶第五篇yoda's Crypter V1.2(图),yoda
2008年06月23日 星期一 下午 03:13
简介:

This is a small PE crypter with some nice protection options.



软件截图









下载地址



本地下载



脱壳目标 yoda's Crypter V1.2加壳Win98的Notepad ,选择除了Erase PE Header外所有加密选项。



本地下载



软件后用PEID测NOTEPAD.EXE的壳为yoda's cryptor 1.2

我们把Od中的选项-调试选项-异常选项卡中

除了忽略在内存访问异常不打勾,其余的全部打勾,请检查自己的Od设置。因为Yoda就一次内存异常是最后一次异常,其余的异常全部让OD忽略。



用OD载入程序后。

确定一个入口点警告,Od提示程序加壳,选不继续分析,插件隐藏OD.



0040D060 > 60 PUSHAD 外壳入口。

0040D061 E8 00000000 CALL NOTEPAD.0040D066

0040D066 5D POP EBP

0040D067 81ED F31D4000 SUB EBP,NOTEPAD.00401DF3


0040D06D B9 7B090000 MOV ECX,97B

0040D072 8DBD 3B1E4000 LEA EDI,DWORD PTR SS:[EBP 401E3B]

0040D078 8BF7 MOV ESI,EDI

0040D07A AC LODS BYTE PTR DS:[ESI]

0040D07B F8 CLC

0040D07C F9 STC

0040D07D 34 49 XOR AL,49

0040D07F C0C8 18 ROR AL,18

0040D082 EB 01 JMP SHORT NOTEPAD.0040D085

0040D084 E8 EB01E82C CALL 2D28D274

0040D089 DD ??? ; 未知命令

..................................................................



F9运行,确定一个入口警告。

内存异常。



0040D769 0000 ADD BYTE PTR DS:[EAX],AL 最后一次Seh异常。

0040D76B 0000 ADD BYTE PTR DS:[EAX],AL

0040D76D 0000 ADD BYTE PTR DS:[EAX],AL

0040D76F 0000 ADD BYTE PTR DS:[EAX],AL

0040D771 0000 ADD BYTE PTR DS:[EAX],AL

0040D773 0000 ADD BYTE PTR DS:[EAX],AL

0040D775 0000 ADD BYTE PTR DS:[EAX],AL

0040D777 0000 ADD BYTE PTR DS:[EAX],AL

0040D779 0000 ADD BYTE PTR DS:[EAX],AL

0040D77B 0000 ADD BYTE PTR DS:[EAX],AL

0040D77D 0000 ADD BYTE PTR DS:[EAX],AL

0040D77F 0000 ADD BYTE PTR DS:[EAX],AL

0040D781 0000 ADD BYTE PTR DS:[EAX],AL

0040D783 0000 ADD BYTE PTR DS:[EAX],AL

0040D785 0000 ADD BYTE PTR DS:[EAX],AL

0040D787 0000 ADD BYTE PTR DS:[EAX],AL

..................................................................



看堆栈。



0012FFBC 0012FFE0 指针到下一个 SEH 记录

0012FFC0 0040D70C SE 句柄 去出口下断点。

0012FFC4 77E67903 返回到 KeRnEl32.77E67903



断在这里。



0040D70C 55 PUSH EBP

0040D70D 8BEC MOV EBP,ESP

0040D70F 57 PUSH EDI

0040D710 8B45 10 MOV EAX,DWORD PTR SS:[EBP 10]

0040D713 8BB8 C4000000 MOV EDI,DWORD PTR DS:[EAX C4]

0040D719 FF37 PUSH DWORD PTR DS:[EDI]

0040D71B 33FF XOR EDI,EDI

0040D71D 64:8F07 POP DWORD PTR FS:[EDI] 这里很容易成为特征码,下面的pop edi中就是oep,和EXE Stealth2.72,仙剑早期版本一摸一样。

0040D720 8380 C4000000 0>ADD DWORD PTR DS:[EAX C4],8

0040D727 8BB8 A4000000 MOV EDI,DWORD PTR DS:[EAX A4]

0040D72D C1C7 07 ROL EDI,7

0040D730 89B8 B8000000 MOV DWORD PTR DS:[EAX B8],EDI

0040D736 B8 00000000 MOV EAX,0

0040D73B 5F POP EDI 这里是Oep的唯一线索。Oep计算处在SEH处理过程中早就过了,我们等会再分析。我们看到Edi中存放的是4010cc,记事本的Oep,那我们去4010cc下断点吧。

0040D73C C9 LEAVE

0040D73D C3 RETN 通过这里后你将回到系统领空,迷失在代码中,不久程序运行。



直接Ctrl G去4010cc下断点。



004010CC 55 PUSH EBP 来到这里,我们再这里用Od的Dump插件直接脱壳。

004010CD 8BEC MOV EBP,ESP

004010CF 83EC 44 SUB ESP,44

004010D2 56 PUSH ESI

004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4]

004010D9 8BF0 MOV ESI,EAX

004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]

004010DD 3C 22 CMP AL,22

004010DF 75 1B JNZ SHORT 004010FC

004010E1 56 PUSH ESI

004010E2 FF15 F4644000 CALL DWORD PTR DS:[4064F4]

004010E8 8BF0 MOV ESI,EAX

004010EA 8A00 MOV AL,BYTE PTR DS:[EAX]

004010EC 84C0 TEST AL,AL



重建输入表时,插件有两个选项。Method2重建输入表很快,脱壳后运行率高。Method1重建输入表慢,脱壳后运行率较低。本程序用Method1重建输入表后程序可直接运行。

如果你提前看过我的仙剑脱壳过程,你是不是觉得它们很像呢?

我们这次详细跟踪一次。

在手动脱壳进阶第四篇EXE Stealth2.72我已经讲的很详细,yoda和EXE Stealth2.72过程几乎一样,这次快一些。Btw:详细跟踪要设置忽略全部异常.

载入程序,隐藏OD。无特别提示,一律F8走。



0040D060 > 60 PUSHAD

0040D061 E8 00000000 CALL NOTEPAD.0040D066 F7过。

0040D066 5D POP EBP

0040D067 81ED F31D4000 SUB EBP,NOTEPAD.00401DF3

0040D06D B9 7B090000 MOV ECX,97B

0040D072 8DBD 3B1E4000 LEA EDI,DWORD PTR SS:[EBP 401E3B]

0040D078 8BF7 MOV ESI,EDI

0040D07A AC LODS BYTE PTR DS:[ESI]

0040D07B F8 CLC

0040D07C F9 STC

0040D07D 34 49 XOR AL,49

0040D07F C0C8 18 ROR AL,18

0040D082 EB 01 JMP SHORT NOTEPAD.0040D085

0040D085 /EB 01 JMP SHORT NOTEPAD.0040D088

0040D088 2C DD SUB AL,0DD

0040D08A 2AC1 SUB AL,CL

0040D08C 04 6F ADD AL,6F

0040D08E F9 STC

0040D08F C0C8 55 ROR AL,55 ; 移动常数超出 1..31 的范围

0040D092 2AC1 SUB AL,CL

0040D094 F9 STC

0040D095 EB 01 JMP SHORT NOTEPAD.0040D098

0040D098 90 NOP

0040D099 2C AF SUB AL,0AF

0040D09B 34 38 XOR AL,38

0040D09D 02C1 ADD AL,CL

0040D09F F8 CLC

0040D0A0 2AC1 SUB AL,CL

0040D0A2 F8 CLC

0040D0A3 2AC1 SUB AL,CL

0040D0A5 2C 69 SUB AL,69

0040D0A7 FEC8 DEC AL

0040D0A9 2AC1 SUB AL,CL

0040D0AB AA STOS BYTE PTR ES:[EDI]

0040D0AC ^ E2 CC LOOPD SHORT NOTEPAD.0040D07A

0040D0AE E1 29 LOOPDE SHORT NOTEPAD.0040D0D9 F4到这里语句变化。



0040D0AE 8B4424 20 MOV EAX,DWORD PTR SS:[ESP 20] ; KeRnEl32.77E67903

0040D0B2 40 INC EAX

0040D0B3 78 0A JS SHORT NOTEPAD.0040D0BF

0040D0B5 C785 78254000 0>MOV DWORD PTR SS:[EBP 402578],1

0040D0BF 8D85 ED1D4000 LEA EAX,DWORD PTR SS:[EBP 401DED]

0040D0C5 B9 2A060000 MOV ECX,62A

0040D0CA E8 41020000 CALL NOTEPAD.0040D310

0040D0CF 8985 74254000 MOV DWORD PTR SS:[EBP 402574],EAX

0040D0D5 8B85 6C254000 MOV EAX,DWORD PTR SS:[EBP 40256C]

0040D0DB 83E0 01 AND EAX,1

0040D0DE 74 40 JE SHORT NOTEPAD.0040D120



0040D120 8B85 64254000 MOV EAX,DWORD PTR SS:[EBP 402564] ; NOTEPAD.00400000

0040D126 0340 3C ADD EAX,DWORD PTR DS:[EAX 3C]

0040D129 05 80000000 ADD EAX,80

0040D12E 8B08 MOV ECX,DWORD PTR DS:[EAX]

0040D130 038D 64254000 ADD ECX,DWORD PTR SS:[EBP 402564]

0040D136 83C1 10 ADD ECX,10

0040D139 8B01 MOV EAX,DWORD PTR DS:[ECX]

0040D13B 0385 64254000 ADD EAX,DWORD PTR SS:[EBP 402564]

0040D141 8B18 MOV EBX,DWORD PTR DS:[EAX]

0040D143 899D F0264000 MOV DWORD PTR SS:[EBP 4026F0],EBX

0040D149 83C0 04 ADD EAX,4

0040D14C 8B18 MOV EBX,DWORD PTR DS:[EAX]

0040D14E 899D F4264000 MOV DWORD PTR SS:[EBP 4026F4],EBX

0040D154 8D85 F8264000 LEA EAX,DWORD PTR SS:[EBP 4026F8]

.......................................................................

0040D1E6 E8 1F000000 CALL NOTEPAD.0040D20A

0040D1EB 8985 90274000 MOV DWORD PTR SS:[EBP 402790],EAX

0040D1F1 8D85 94274000 LEA EAX,DWORD PTR SS:[EBP 402794]

0040D1F7 E8 0E000000 CALL NOTEPAD.0040D20A

0040D1FC 8985 A0274000 MOV DWORD PTR SS:[EBP 4027A0],EAX

0040D202 8D85 A01F4000 LEA EAX,DWORD PTR SS:[EBP 401FA0]

0040D208 50 PUSH EAX

0040D209 C3 RETN 返回。



0040D213 F785 6C254000 1>TEST DWORD PTR SS:[EBP 40256C],10

0040D21D 74 37 JE SHORT NOTEPAD.0040D256 这里,一个大循环出口,没跳转,回车直接去哪里,跑飞再说。

0040D21F 64:FF35 3000000>PUSH DWORD PTR FS:[30]

0040D256 8BBD 64254000 MOV EDI,DWORD PTR SS:[EBP 402564] F4到达这里.

0040D25C 037F 3C ADD EDI,DWORD PTR DS:[EDI 3C]

0040D25F 8BB5 64254000 MOV ESI,DWORD PTR SS:[EBP 402564]

0040D265 8B4F 54 MOV ECX,DWORD PTR DS:[EDI 54]

0040D268 8D85 D2274000 LEA EAX,DWORD PTR SS:[EBP 4027D2]

0040D26E 50 PUSH EAX

0040D26F 6A 04 PUSH 4

0040D271 51 PUSH ECX

0040D272 FFB5 64254000 PUSH DWORD PTR SS:[EBP 402564]

0040D278 FF95 2D274000 CALL DWORD PTR SS:[EBP 40272D]

0040D27E F785 6C254000 0>TEST DWORD PTR SS:[EBP 40256C],8

0040D288 0F84 A7000000 JE NOTEPAD.0040D335 又一个大循环出口,没跳转,回车直接去哪里,跑飞再说。



0040D335 8B85 64254000 MOV EAX,DWORD PTR SS:[EBP 402564] F4到达这里.

0040D33B BB 01000000 MOV EBX,1

0040D340 E8 08000000 CALL NOTEPAD.0040D34D 变形,注意如果你太小心F7过,会绕圈子,F8直接走.

0040D345 8D85 A3214000 LEA EAX,DWORD PTR SS:[EBP 4021A3]

0040D34B 50 PUSH EAX

0040D34C C3 RETN



0040D416 8B9D 64254000 MOV EBX,DWORD PTR SS:[EBP 402564] ; NOTEPAD.00400000 基地址400000

0040D41C 039D 68254000 ADD EBX,DWORD PTR SS:[EBP 402568] 将堆栈中值10cc 400000=4010cc 得出记事本的Oep.

0040D422 C1CB 07 ROR EBX,7 计算出Oep.

0040D425 895C24 10 MOV DWORD PTR SS:[ESP 10],EBX

0040D429 8D9D 99244000 LEA EBX,DWORD PTR SS:[EBP 402499]

0040D42F 895C24 1C MOV DWORD PTR SS:[ESP 1C],EBX

0040D433 8BBD 64254000 MOV EDI,DWORD PTR SS:[EBP 402564]

0040D439 037F 3C ADD EDI,DWORD PTR DS:[EDI 3C]

0040D43C 8B9F C0000000 MOV EBX,DWORD PTR DS:[EDI C0]

0040D442 83FB 00 CMP EBX,0

0040D445 74 0F JE SHORT NOTEPAD.0040D456

0040D447 039D 64254000 ADD EBX,DWORD PTR SS:[EBP 402564]

......................................................................



换成其它程序加壳,可以用如下三句作为特征码,知道是Oep值。



0040D416 8B9D 64254000 MOV EBX,DWORD PTR SS:[EBP 402564] ; NOTEPAD.00400000 基地址400000

0040D41C 039D 68254000 ADD EBX,DWORD PTR SS:[EBP 402568] 将堆栈中值10cc 400000=4010cc 得出记事本Oep.

0040D422 C1CB 07 ROR EBX,7 计算出Oep.



F8步过0040D422 C1CB 07 ROR EBX,7 计算出Oep这句.

这时我们可以Ctrl G直接去4010cc下内存访问断点脱壳,你必须设置忽略内存异常,不然遇到Seh异常程序直接退出导致跟踪失败,粗略跟踪已经知道.

OK,在4010CC内存处下 内存访问断点,F9运行,断在OEP处!



004010CC 55 PUSH EBP //在这儿用OllyDump插件直接DUMP

004010CD 8BEC MOV EBP,ESP

004010CF 83EC 44 SUB ESP,44

004010D2 56 PUSH ESI

004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4]

004010D9 8BF0 MOV ESI,EAX

004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]

004010DD 3C 22 CMP AL,22

004010DF 75 1B JNZ SHORT 004010FC

004010E1 56 PUSH ESI

004010E2 FF15 F4644000 CALL DWORD PTR DS:[4064F4]

004010E8 8BF0 MOV ESI,EAX

004010EA 8A00 MOV AL,BYTE PTR DS:[EAX]

————————————————————————



运行ImportREC,选择这个进程。把OEP改为000010CC,点IT AutoSearch,点“Get Import”,用“追踪层次1”全部修复,FixDump,正常运行!



脱文by weiyi75[Dfcg]
发表于 2009-12-26 15:05:04 | 显示全部楼层 IP:日本
一楼的位置好啊..我考,这是一种文明,我指 的是回帖。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 11:37 , Processed in 0.267160 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表