首页
社区
课程
招聘
ASProtect 1.2-1.2c脱壳分析
发表于: 2006-3-18 11:43 4716

ASProtect 1.2-1.2c脱壳分析

2006-3-18 11:43
4716
ASProtect 1.2  1.2c脱壳分析

第一步:用PEID载入软件为ASProtect 1.2 / 1.2c-> Alexey Solodovnikov。

第二步:用OD载入软件,
  <ModuleEn> 68 01F04800      PUSH ASProtec.0048F001       停在此处
00401005   C3               RETN
我们在调试设置中除“内存访问异常”不忽略外,其余都忽略,隐藏OD后,F9运行,
00DB009D   3100             XOR DWORD PTR DS:[EAX],EAX           异常在这里
00DB009F   EB 01            JMP SHORT 00DB00A2

继续按Shift+F9运行,注意观察堆栈区
按了十六次,看堆栈区
0013D738   0013D740  指针到下一个 SEH 记录
0013D73C   00DB0217  SE 句柄
0013D740   0013FFE0  指针到下一个 SEH 记录
0013D744   00DB0A6F  SE 句柄
0013D748   0013FF90
0013D74C   00DA0000
0013D750   00D80000
0013D754   00DB0038
0013D758   00000000
0013D75C   00DC1C44  ASCII "+U69wAAApMo="     出现硬盘指纹
0013D760   00000000

继续按Shift+F9运行一次 ,再看堆栈区
0013D738   0013D740  指针到下一个 SEH 记录
0013D73C   00DB09E2  SE 句柄
0013D740   0013FFE0  指针到下一个 SEH 记录
0013D744   00DB0A6F  SE 句柄
0013D748   0013FF90
0013D74C   00DA0000
0013D750   00D80000
0013D754   00DB0038
0013D758   00000000                                  硬盘指纹消失
0013D75C   00DC5D50  ASCII "SOFTWARE\ASProtect"   
0013D760   00000000

OK
00DB0A2B   3100             XOR DWORD PTR DS:[EAX],EAX             异常停在此处
00DB0A2D   EB 01            JMP SHORT 00DB0A30
00DB0A2F   68 648F0500      PUSH 58F64
00DB0A34   0000             ADD BYTE PTR DS:[EAX],AL
00DB0A36   00EB             ADD BL,CH
00DB0A38   02E8             ADD CH,AL
00DB0A3A   0158 33          ADD DWORD PTR DS:[EAX+33],EBX
00DB0A3D   C05A 59 59       RCR BYTE PTR DS:[EDX+59],59              ; 移动常数超出 1..31 的范围
00DB0A41   64:8910          MOV DWORD PTR FS:[EAX],EDX
00DB0A44   68 760ADB00      PUSH 0DB0A76
00DB0A49   8D85 C8D7FFFF    LEA EAX,DWORD PTR SS:[EBP-2838]
00DB0A4F   BA 02000000      MOV EDX,2
00DB0A54   E8 5727FFFF      CALL 00DA31B0
00DB0A59   8D45 C8          LEA EAX,DWORD PTR SS:[EBP-38]
00DB0A5C   E8 2F27FFFF      CALL 00DA3190
00DB0A61   8D45 D0          LEA EAX,DWORD PTR SS:[EBP-30]
00DB0A64   BA 02000000      MOV EDX,2
00DB0A69   E8 4227FFFF      CALL 00DA31B0
00DB0A6E   C3               RETN             按F2下断在此,Shift+F9运行,中断了,F7返回00DADFB0

00DADFB0   68 952D21FD      PUSH FD212D95        返回在此
00DADFB5   68 680F0000      PUSH 0F68
00DADFBA   68 44D00000      PUSH 0D044
00DADFBF   68 00600100      PUSH 16000
00DADFC4   FF35 1430DB00    PUSH DWORD PTR DS:[DB3014]
00DADFCA   E8 71E8FFFF      CALL 00DAC840
00DADFCF   310424           XOR DWORD PTR SS:[ESP],EAX
00DADFD2   8B05 1430DB00    MOV EAX,DWORD PTR DS:[DB3014]
00DADFD8   010424           ADD DWORD PTR SS:[ESP],EAX
00DADFDB   C3               RETN

AIT+M,找到00401000句,按F2下断
内存镜像,项目 22
地址=00401000
大小=00059000 (364544.)
Owner=ASProtec 00400000
区段=
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
Shift+f9运行三次,来到OEP处
00458FD8   55               PUSH EBP              来到此处,为OEP
00458FD9   8BEC             MOV EBP,ESP
00458FDB   83C4 F4          ADD ESP,-0C
00458FDE   E8 99A3FAFF      CALL ASProtec.0040337C
00458FE3   E8 F0B8FAFF      CALL ASProtec.004048D8
00458FE8   E8 23FAFAFF      CALL ASProtec.00408A10
00458FED   E8 9667FBFF      CALL ASProtec.0040F788
00458FF2   E8 AD6BFBFF      CALL ASProtec.0040FBA4
00458FF7   E8 048BFBFF      CALL ASProtec.00411B00
00458FFC   E8 7F03FCFF      CALL ASProtec.00419380
00459001   E8 AAD4FCFF      CALL ASProtec.004264B0
00459006   E8 5556FDFF      CALL ASProtec.0042E660
0045900B   E8 4074FDFF      CALL ASProtec.00430450
00459010   E8 4706FEFF      CALL ASProtec.0043965C
00459015   E8 32C1FEFF      CALL ASProtec.0044514C
0045901A   E8 21C8FEFF      CALL ASProtec.00445840
0045901F   E8 0440FFFF      CALL ASProtec.0044D028
00459024   E8 4340FFFF      CALL ASProtec.0044D06C
00459029   E8 EE40FFFF      CALL ASProtec.0044D11C
0045902E   E8 8942FFFF      CALL ASProtec.0044D2BC
00459033   E8 7C55FFFF      CALL ASProtec.0044E5B4
00459038   E8 5F61FFFF      CALL ASProtec.0044F19C
0045903D   A1 28564600      MOV EAX,DWORD PTR DS:[465628]

第四步:用OD插件DUMP它。程序不能运行,再用ImportREC V1.6F 载入程序,OEP=58FD8,点“IAT自动搜索”
――“获得输入信息”,有很多无效指针,先用“追踪等级I级”修复,再用插件ASProtect 1.22追踪,OK全部为有效指针,修复它吧!
第五步:运行修复后的程序还是不能正常运行,用OD载入修复后的程序,F9运行,出现异常
注意堆栈区
0013FE28   00454965  返回到 ASProtec.00454965 来自 00DAC6D8    注意这行
0013FE2C   0013FE5C  指针到下一个 SEH 记录
0013FE30   00454B5B  SE 句柄

我们在反汇编中跟随,返回到CPU区如下
00454954  |. 8B80 6C020000  MOV EAX,DWORD PTR DS:[EAX+26C]
0045495A  |. E8 89FAFBFF    CALL ASProtec.004143E8
0045495F  |. FF15 AC4F4600  CALL DWORD PTR DS:[464FAC]       是这个Call出错了
00454965  |. 8D55 F4        LEA EDX,DWORD PTR SS:[EBP-C]    返回到此,往上走
00454968  |. 33C0           XOR EAX,EAX
0045496A  |. E8 C1DEFAFF    CALL ASProtec.00402830
0045496F  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
00454972  |. B2 01          MOV DL,1

在命令行下“D 464FAC”,在数据窗口可看到
00464FAC  00DAC6D8           这个值要修改   ,修改为“00401238”
00464FB0  00DAC6D8
00464FB4  00000000
00464FB8  00000000
00464FBC  00000000
00464FC0  00000000
00464FC4  00000000

修改方法:我们随便在程序中找个retn。Ctrl+F,输入“retn”,回车  (00401238   . C3             RETN              我们就找这个吧 ,然后在刚才的要修改的地方改成“00401238”这个值

然后复制到可执行文件,保存!

再次运行,还有错!晕,再载入修改后的程序,按第五步再操作一下,注意堆栈区
0013FE28   00454B40  返回到 ASProtec.00454B40 来自 00DAC6D8
0013FE2C   0013FE5C  指针到下一个 SEH 记录
0013FE30   00454B5B  SE 句柄
0013FE34   0013FE54

返回到00454B40句后,可以找到是00454B3A句出错
00454B3A   > FF15 B04F4600  CALL DWORD PTR DS:[464FB0]    修改
00454B40   . 33C0           XOR EAX,EAX

按同样方法,修改值为“00401238”,复制到可执行文件,保存!

再运行,OK!万事大吉了!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ASPr 2.0以前的版本,ImportREC的插件修复比较容易~
2006-3-18 14:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你怎么知道是哪个CALL出错了?

怎么对比?查找?

关于IMR修复IAT后还是出错,如何解决的问题,我一直还没搞清楚....
2006-7-3 16:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
SKE的才难
2006-9-7 18:33
0
游客
登录 | 注册 方可回帖
返回
//