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

eXPressor v1.1 脱壳技术,脱壳,脱壳技术

2010-1-30 18:21| 发布者: admin| 查看: 82| 评论: 0|原作者: 韩菱纱


eXPressor v1.1 脱壳技术,脱壳,脱壳技术
2008年06月23日 星期一 下午 05:33
---------------------------------------------------------------------------

; eXPressor v1.1 脱壳

; ---------------------------------------------------------------------------



; ---------------------------------------------------------------------------

; 寻找恰当时机 Dump 文件

; ---------------------------------------------------------------------------

OllyDbg 载入,



00438019 > $Content$nbsp;/E9 15130000 jmp 00439333

0043801E . |E9 F0120000 jmp 00439313

00438023 . |E9 58120000 jmp 00439280

00438028 $Content$nbsp;|E9 AF0C0000 jmp 00438CDC

0043802D $Content$nbsp;|E9 AE020000 jmp 004382E0

00438032 $Content$nbsp;|E9 B40B0000 jmp 00438BEB

00438037 $Content$nbsp;|E9 E00C0000 jmp 00438D1C



运行起来有个 NAG,拦截 MessageBoxA 试试:



77D5050B > 8BFF mov edi, edi

77D5050D 55 push ebp

77D5050E 8BEC mov ebp, esp

77D50510 833D 1C04D777 0>cmp dword ptr [77D7041C], 0

77D50517 74 24 je short 77D5053D

77D50519 64:A1 18000000 mov eax, fs:[18]

77D5051F 6A 00 push 0

77D50521 FF70 24 push dword ptr [eax 24]

77D50524 68 F40AD777 push 77D70AF4

77D50529 FF15 1812D177 call [<&KERNEL32.InterlockedCompareEx>; kernel32.InterlockedCompareExchange

77D5052F 85C0 test eax, eax

77D50531 75 0A jnz short 77D5053D

77D50533 C705 F00AD777 0>mov dword ptr [77D70AF0], 1

77D5053D 6A 00 push 0

77D5053F FF75 14 push dword ptr [ebp 14]

77D50542 FF75 10 push dword ptr [ebp 10]

77D50545 FF75 0C push dword ptr [ebp C]

77D50548 FF75 08 push dword ptr [ebp 8]

77D5054B E8 2D000000 call MessageBoxExA

77D50550 5D pop ebp

77D50551 C2 1000 retn 10 ; Breakpoint



在 retn 上设置一个断点,运行程序,出现:



---------------------------

Nfo

---------------------------

This program was packed with a demo version of eXPressor

---------------------------

确定

---------------------------



关闭 NAG,返回到程序领空:





004393A8 > /8B85 34FEFFFF mov eax, [ebp-1CC]

004393AE . |0FBE08 movsx ecx, byte ptr [eax]

004393B1 . |83F9 5C cmp ecx, 5C

004393B4 . |74 11 je short 004393C7

004393B6 . |8B95 34FEFFFF mov edx, [ebp-1CC]



为了找到处理输入表的地方,拦截 LoadLibraryA ,然后 Alt F9 返回程序:



004396A5 . 8985 58FEFFFF mov [ebp-1A8], eax ; comdlg32.76320000

004396AB > 83BD 58FEFFFF>cmp dword ptr [ebp-1A8], 0

004396B2 . 75 37 jnz short 004396EB

004396B4 . 8B4D F8 mov ecx, [ebp-8]

004396B7 . 51 push ecx ; /<%hs>

004396B8 . 68 78814300 push 00438178 ; |Format = "A required .DLL file, %hs, was not found."

004396BD . 8D95 60FEFFFF lea edx, [ebp-1A0] ; |

004396C3 . 52 push edx ; |s

004396C4 . FF15 2CE14300 call [<&USER32.wsprintfA>] ; \wsprintfA



明显开始装载引入表了,向上回溯:



00439636 . 8B95 ECFEFFFF mov edx, [ebp-114]

0043963C . 0315 88F04300 add edx, [43F088]

00439642 . 8995 38FEFFFF mov [ebp-1C8], edx

00439648 > 8B85 38FEFFFF mov eax, [ebp-1C8]

0043964E . 8378 0C 00 cmp dword ptr [eax C], 0

00439652 . 0F84 65020000 je 004398BD



[ebp-1C8] 应该就是引入表了,运行到这里可能已经修改,重新来,直达 00439642;



在命令行输入 dd edx,看看引入表 IID 有多大:



004231F8 00023350

004231FC 00000000

00423200 00000000

00423204 00023EDC

00423208 0001F0B8



0042320C 00023520

00423210 00000000

00423214 00000000

00423218 000245FC

0042321C 0001F288



00423220 000232B4

00423224 00000000

00423228 00000000

0042322C 0002482E

00423230 0001F01C



00423234 00023710

00423238 00000000

0042323C 00000000

00423240 0002485C

00423244 0001F478



00423248 00023700

0042324C 00000000

00423250 00000000

00423254 000248A0

00423258 0001F468



0042325C 00023298

00423260 00000000

00423264 00000000

00423268 000248F0

0042326C 0001F000



00423270 000232AC

00423274 00000000

00423278 00000000

0042327C 0002490A

00423280 0001F014



00423284 00000000

00423288 00000000

0042328C 00000000

00423290 00000000

00423294 00000000



8 组 IID,RVA 是231F8,大小为8*4*5=160=0A0h,现在把文件 Dump 出来,保存为 dumped.exe



; ---------------------------------------------------------------------------

; 众里寻他千百度

; ---------------------------------------------------------------------------



别忙关闭调试器,接着找 OEP,向下翻页,找可疑指令:



00439ABA . 0315 80F04300 add edx, [43F080]

00439AC0 . 8B45 F4 mov eax, [ebp-C]

00439AC3 . 0350 34 add edx, [eax 34]

00439AC6 . 2B95 ECFEFFFF sub edx, [ebp-114]

00439ACC . 8995 50FEFFFF mov [ebp-1B0], edx

00439AD2 . FFA5 50FEFFFF jmp [ebp-1B0] ; !!!

00439AD8 > 5F pop edi

00439AD9 . 5E pop esi

00439ADA . 5B pop ebx

00439ADB . 8BE5 mov esp, ebp

00439ADD . 5D pop ebp

00439ADE . C3 retn



上面都是填充 IAT 的,直觉这里比较像,F4 过去再 F7 跟入,柳暗花明又一村:



00407A23 55 push ebp

00407A24 8BEC mov ebp, esp

00407A26 6A FF push -1

00407A28 68 D00B4200 push 00420BD0

00407A2D 68 1CB74000 push 0040B71C

00407A32 64:A1 00000000 mov eax, fs:[0]

00407A38 50 push eax

00407A39 64:8925 0000000>mov fs:[0], esp

00407A40 83EC 58 sub esp, 58

00407A43 53 push ebx

00407A44 56 push esi

00407A45 57 push edi

00407A46 8965 E8 mov [ebp-18], esp

00407A49 FF15 DCF14100 call [41F1DC] ; kernel32.GetVersion

00407A4F 33D2 xor edx, edx

00407A51 8AD4 mov dl, ah

00407A53 8915 04D24200 mov [42D204], edx



; ---------------------------------------------------------------------------

; 优化文件

; ---------------------------------------------------------------------------



不言而喻 OEP = 7A23,现在可以让 OllyDbg 休息一下了.



LordPE 上阵,打开 dumped.exe,修改入口点为 7A23,在数据目录里修改引入表项,RVA = 231F8,Size = A0



重定位是给外壳用的,可以清掉,不过可以让LordPE 替我们做。IAT项似乎是原程序的,可以不修改了。



打开区段表,清除 .ex_cod .ex_id .ex_dat



然后 PE Rebuilder 选上清除重定位表和有效化 PE,对齐文件,重建一下。



似乎完成了,但是资源不可修改,用 ResFixer Method I 重建一个 .rsrc,进入 LordPE 删除原来的 .ex_rsc 重建,



然后从磁盘载入区段,选择刚才的 .rsrc,再次重建,用ResHacker打开看看,资源正确了。



以前 heXer 发给我一个 ResFixer 一直没用,今天试试,也可以用 FreeRes 代替,大小差不多。




最新评论

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

GMT+8, 2024-9-29 21:24 , Processed in 0.271345 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部