首页
社区
课程
招聘
[原创]HDasm1.06的脱壳(快速脱未知壳的思路)
发表于: 2005-5-22 17:40 5122

[原创]HDasm1.06的脱壳(快速脱未知壳的思路)

2005-5-22 17:40
5122
软件名称: HDasm1.06
功能: 类似于w32asm,c32asm的反编译软件,反编译速度很快
下载地址: http://bbs.pediy.com/upload/2005/10/files/hdasm.zip
壳的类型: 未知(虽然有aspack section,但其实是经过伪装或变形的)
脱壳工具: OllyDbg,Imprec,LordPE
分析:
  1、经过使用Esp Ballance方式来进行跟踪,找不到,跟踪麻烦,所以就放弃了;
 2、开始思考,应付方案,Thinking...叮...出来了:

先找oep,然后再对付iat:
通常壳都会返回OEP都有常用的方式,比如upx的
popad 61
jmp xxxxxxxx e9 xx xx xx xx
或者很多其它壳的
push xxxxxxx 68 xx xx xx xx
retn c3

HOHO,我到内存(壳解码内存块)中找一下不就可以了?!
  Yes! Let's Go!


脱壳过程ABC:
  A:
      Ollydbg载入Hdasm.exe,停在0044AD54

0044AD54 > BF E0AD4400 MOV EDI,HDasm.0044ADE0 ***
0044AD59 68 989C0400 PUSH 49C98
0044AD5E 68 00104000 PUSH HDasm.00401000
0044AD63 E8 30FFFFFF CALL HDasm.0044AC98
0044AD68 68 00680000 PUSH 6800
0044AD6D 68 00F04B00 PUSH HDasm.004BF000
0044AD72 E8 21FFFFFF CALL HDasm.0044AC98

      ALT+M,移动到00401000(程序代码段)所在行,我们将要进行查找
  Ctrl+B,查找二进制代码,我们这里查找,十六进制数(HEX) 68 ?? ?? ?? 00 C3
        faq: Q: 68 ?? ?? ?? 00 c3代表什么?
        A: 代表push 00xxxxxx retn,增加准确度.
  确定后,出现了转存区(Dump),我们开到地址 5133BA
 好样的,来到反汇编区域(CPU),Ctrl+G,5133BA

005133BA 68 00000000 PUSH 0 ******Yeah,BlaBla..******
005133BF C3 RETN *****Set BreakPoint*****
005133C0 8B85 26040000 MOV EAX,DWORD PTR SS:[EBP+426]
005133C6 8D8D 3B040000 LEA ECX,DWORD PTR SS:[EBP+43B]
005133CC 51 PUSH ECX
005133CD 50 PUSH EAX
005133CE FF95 490F0000 CALL DWORD PTR SS:[EBP+F49]

  正和我意,OK了,在005133bf  retn处下断点(F2一下)吧!
  F9,断在5133BF处,F8后,来到了黄山光明顶!
  Dump it!
B
  进行IAT修复
  用Imprec直接修复,发现不了,经过查看,壳对IAT进行了搬移,但没加密 HOHO
  

00401480 EB 10 JMP SHORT HDasm.00401492
00401482 66:623A BOUND DI,DWORD PTR DS:[EDX]
00401485 43 INC EBX
00401486 2B2B SUB EBP,DWORD PTR DS:[EBX]
00401488 48 DEC EAX
00401489 4F DEC EDI
0040148A 4F DEC EDI
0040148B 4B DEC EBX
0040148C 90 NOP
0040148D -E9 98F04B00 JMP 008C052A
00401492 A1 8BF04B00 MOV EAX,DWORD PTR DS:[4BF08B]
00401497 C1E0 02 SHL EAX,2
0040149A A3 8FF04B00 MOV DWORD PTR DS:[4BF08F],EAX
0040149F 52 PUSH EDX
004014A0 6A 00 PUSH 0
004014A2 E8 83C30B00 CALL HDasm.004BD82A ; JMP to kernel32.GetModuleHandleA
004014A7 8BD0 MOV EDX,EAX
004014A9 E8 BEF60A00 CALL HDasm.004B0B6C
004014AE 5A POP EDX
004014AF E8 1CF60A00 CALL HDasm.004B0AD0
004014B4 E8 F3F60A00 CALL HDasm.004B0BAC
004014B9 6A 00 PUSH 0
004014BB E8 580C0B00 CALL HDasm.004B2118



  看到一个kernel32.GetModuleHandleA,我们到004BD82A看看先.
 

004BD82A -FF25 54134E00 JMP DWORD PTR DS:[4E1354] ; kernel32.GetModuleHandleA
004BD830 -FF25 58134E00 JMP DWORD PTR DS:[4E1358] ; kernel32.GetOEMCP
004BD836 -FF25 5C134E00 JMP DWORD PTR DS:[4E135C] ; kernel32.GetProcAddress
004BD83C -FF25 60134E00 JMP DWORD PTR DS:[4E1360] ; kernel32.GetProcessHeap
004BD842 -FF25 64134E00 JMP DWORD PTR DS:[4E1364] ; kernel32.GetStartupInfoA
004BD848 -FF25 68134E00 JMP DWORD PTR DS:[4E1368] ; kernel32.GetStdHandle
004BD84E -FF25 6C134E00 JMP DWORD PTR DS:[4E136C] ; kernel32.GetStringTypeExA
004BD854 -FF25 70134E00 JMP DWORD PTR DS:[4E1370] ; kernel32.GetStringTypeW
004BD85A -FF25 74134E00 JMP DWORD PTR DS:[4E1374] ; kernel32.GetSystemDirectoryA



看到了吧?
我们到dump区域,Ctrl+G,004E1354看看,恩,看到好多货哦.
上下观察一下,我们发现IAT从4e12c8开始,长B90,
所以在imprec上手工填:
       OEP: 1480
       RAV: e12c8
       大小:B90
获取输入表,显示无效的,CUT掉!         
 修复我们刚才的DUMP文件即可.

C:
  发现文件大了点,我们再借用LordPE来重建一下吧.
 重建后,文件大小为: 1,119,205字节.
 好了,完工,运行,使用正常.

PS:此篇文章脱壳过程没什么技术,只是提供大家一个思考问题的思路,各位看官见笑了!

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
鼓励一下,多想想办法,思路就会开阔

BTW:HDasm里面就是AsPacK吧
2005-5-22 17:47
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
3
继续努力.
2005-5-22 19:31
0
雪    币: 223
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
象我等菜鸟也看的懂了
2005-5-23 01:51
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
5
学习~
2005-5-23 08:35
0
雪    币: 1866
活跃值: (95)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
呵呵!你的导入表修复的有问题!有遗漏!换个平台试试就知道了!
2005-5-24 02:49
0
雪    币: 8
活跃值: (2626)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
壳脱了,但用您的IAT修复方法没法修复
2005-5-24 08:17
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
8
里面是AsPacK
在输入表处理之前dump出来
找到Import Table RVA就行啦
2005-5-24 08:50
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
9
iat的具体地址要根据我的思路自己找,不要直接用我的数据.
2005-5-24 09:35
0
雪    币: 8
活跃值: (2626)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢fly、peaceclub
2005-5-24 10:18
0
游客
登录 | 注册 方可回帖
返回
//