找回密码
 注册
搜索
热搜: 回贴

脱壳技术,关于双进程Armadillo标准壳的脱法,Armadillo

2010-1-30 18:19| 发布者: admin| 查看: 211| 评论: 0|原作者: 天仙子


脱壳技术,关于双进程Armadillo标准壳的脱法,Armadillo
2008年06月23日 星期一 下午 04:23
昨天看了csjwoman的那个双进程标准壳的NOTEPAD.EXE,说真的一开始还真不知如何下手,既不能用脱COPYMEMII(它没有用内存写入函数)的方法,也不能简单套用以前脱标准壳的方法(因为它还是有子进程的),后来仔细参考了下mysqladm的文章《试玩armadillo3.50a一点心得 》有了点启发(最近从他的这篇脱文中学到的东西可不少)。下面谈谈如何脱这种双进程的标准壳。

最近很懒,不愿写东西,所以也就不讲什么原理了(可以参考mysqladm的脱文),这里就简单说下方法。其实很简单就是不要让父进程生成子进程。所以我们可以这样做。

载入后隐藏OD,忽略所有异常,然后BP OpenMutexA,F9运行,断下后在一块空地输入如下代码,这里在401000输入,代码如下(抄来的)

00401000 60 PUSHAD

00401001 9C PUSHFD

00401002 68 B4FB1200 PUSH 12FBB4 (这里的12fbb4也就是MutexName,可以通过堆栈看到,也可以在某个寄存器器看到,我原来以为一直在EDX中,后来发现2000下是在ECX中,现更正一下。)

00401007 33C0 XOR EAX,EAX

00401009 50 PUSH EAX

0040100A 50 PUSH EAX

0040100B E8 E694A677 CALL KERNEL32.CreateMutexA

00401010 9D POPFD

00401011 61 POPAD

00401012 - E9 8F9FA777 JMP KERNEL32.OpenMutexA

在401000处新建起源。F9,程序又断回到OpenMutexA处,清除断点和刚才的工作代码。这时我们就完全可以象调试普通标准壳那样调试它了,因为它已经不会生成子进程而是把自己当作子进程运行起来。

这时我们下断bp VirtualProtect,F9运行,中断9-10次后清除断点,再bp GetCurrentThreadId,断下后几下ALT F9返回,再F8几下就到那个CALL EDI了,如下

00DB455C C705 DCDBDB00 E>MOV DWORD PTR [DBDBDC], 0DBE6EC ; ASCII "RB"

00DB4566 FF15 1481DB00 CALL [DB8114] ; kernel32.GetCurrentThreadId

00DB456C A3 AC56DC00 MOV [DC56AC], EAX 返回到这里,

00DB4571 E8 1537FEFF CALL 00D97C8B

00DB4576 6A 00 PUSH 0

00DB4578 E8 648FFEFF CALL 00D9D4E1

00DB457D 6A 00 PUSH 0

00DB457F C705 DCDBDB00 E>MOV DWORD PTR [DBDBDC], 0DBE6E8 ; ASCII "RC"

00DB4589 E8 7231FEFF CALL 00D97700

00DB458E 59 POP ECX ; 0012FF2C

00DB458F 59 POP ECX ; 0012FF2C

00DB4590 E8 4A11FFFF CALL 00DA56DF

00DB4595 8BF8 MOV EDI, EAX

00DB4597 A1 9455DC00 MOV EAX, [DC5594]

00DB459C 8B48 70 MOV ECX, [EAX 70]

00DB459F 3348 40 XOR ECX, [EAX 40]

00DB45A2 3348 08 XOR ECX, [EAX 8]

00DB45A5 03F9 ADD EDI, ECX

00DB45A7 8B0E MOV ECX, [ESI]

00DB45A9 85C9 TEST ECX, ECX

00DB45AB 75 2F JNZ SHORT 00DB45DC

00DB45AD 8B78 70 MOV EDI, [EAX 70]

00DB45B0 E8 2A11FFFF CALL 00DA56DF

00DB45B5 8B0D 9455DC00 MOV ECX, [DC5594] ; NOTEPAD.0044D260

00DB45BB FF76 14 PUSH DWORD PTR [ESI 14]

00DB45BE 8B51 40 MOV EDX, [ECX 40]

00DB45C1 FF76 10 PUSH DWORD PTR [ESI 10]

00DB45C4 3351 08 XOR EDX, [ECX 8]

00DB45C7 FF76 0C PUSH DWORD PTR [ESI C]

00DB45CA 33D7 XOR EDX, EDI

00DB45CC 03C2 ADD EAX, EDX

00DB45CE 8B51 68 MOV EDX, [ECX 68]

00DB45D1 3351 04 XOR EDX, [ECX 4]

00DB45D4 33D7 XOR EDX, EDI

00DB45D6 2BC2 SUB EAX, EDX

00DB45D8 FFD0 CALL EAX

00DB45DA EB 25 JMP SHORT 00DB4601

00DB45DC 83F9 01 CMP ECX, 1

00DB45DF 75 22 JNZ SHORT 00DB4603

00DB45E1 FF76 04 PUSH DWORD PTR [ESI 4]

00DB45E4 FF76 08 PUSH DWORD PTR [ESI 8]

00DB45E7 6A 00 PUSH 0

00DB45E9 E8 F110FFFF CALL 00DA56DF

00DB45EE 50 PUSH EAX

00DB45EF A1 9455DC00 MOV EAX, [DC5594]

00DB45F4 8B48 70 MOV ECX, [EAX 70]

00DB45F7 3348 68 XOR ECX, [EAX 68]

00DB45FA 3348 04 XOR ECX, [EAX 4]

00DB45FD 2BF9 SUB EDI, ECX

00DB45FF FFD7 CALL EDI ,这里F7,飞向光明之颠。

00DB4601 8BD8 MOV EBX, EAX

00DB4603 5F POP EDI ; 0012FF2C

00DB4604 8BC3 MOV EAX, EBX

00DB4606 5E POP ESI ; 0012FF2C

00DB4607 5B POP EBX ; 0012FF2C

00DB4608 C3 RETN

在那个CALL EDI处F7我们就到入口了,这时可以DUMP了。

至于IAT的修复,我不想多说了。


最新评论

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

GMT+8, 2024-9-29 23:26 , Processed in 0.130289 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部