吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4422|回复: 0
收起左侧

手工脱ASPR壳的一点思路

[复制链接]
mayl8822 发表于 2008-9-25 18:29
我就简单的把脱壳的思路讲一下吧!
一,经过ASPR加壳的程序采用了以下几种反脱壳的手法:
1,破坏引入表。
2,把程序中的一部分代码移到壳的空间中。这个空间在WIN98上的地址在:80000000以上。在WINXP上的地址为:00F00000~01XXXXXX处。
3,花指令加异常等ANTIDEBUG手法,让跟踪的难度加大。
4,用注册码来解码,解码的数据在程序运行中要用到。没有正确的注册码就不可能解出正解的程序代码来。
二,对付上面几种反脱壳的方法:
1,修复引入表。
如果一个程序未被加壳的话,它的API函数调用一般是这样子的:
CALL 00412345
在00412345处的代码如下:
00412345JMP [004XXXXX] 这个004XXXXX处保存的数据就是函数的地址。(一般是WINXP:FFXXXXXXXX,WIN98;BFXXXXXXXX),但是在被加壳的程序中这个数却不是API函数的地址,而是在壳的空间中。我们所要做的就是把004XXXXX中的数据还原。
在加壳的程序中,它自己会模拟操作系统来重定位API函数的地址。一般来说要用到GETPROCADDRESSA这个函数来获得API函数的地址。在得到 了API函数的地址后,它并没有把函数地址填入到004XXXXX中去,而是把它保存到壳的空间中,并且把这个函数在壳中的地址填入到004XXXXX中去。我们要想知道API函数的正确名字就要拦截在程序调用GETPROCADDRESSA的地方。这个地方也就是在程序写引入表数据的地方。如何才能找到程序写引入表数据的地方呢?
我们先在程序运行出现窗口后DUMP出主程序。反编译这个DUMP程序。找到JMP [004XXXXX]
JMP [004XXXXX]
JMP [004XXXXX]
JMP [004XXXXX]
。。。。。。。。,这样子的地方很好找的,一长串的JMP连着的就是了。我们记下004XXXXX中的值。回到OllyDbg中载入加壳的程序,下断点
BPM 004X0000,接下来不停的按SHIFT+F9,
当我们停在MOV [EDX],EAX这样的指令处,看EDX中的值为004XXXXX。这个地方就是程序写引入表的地方了。这个时候EBP-101处就是函数名,
EBP+C处就是DLL名,我们可以用SMC的技术自己编一个程序来把函数名和DLL名保存下来,得到一个正确的引入表。(这个程序我已写好了。大家只要输入MOV [EDX],EAX处指令地址就可以得到正确的引入表。)原理就是这样子的。没有例子,如果大家对引入表有了解的话,应该容易理解。

二,对于程序代码在壳中的解决。
我推荐大家用WINXP,正如前面所说的壳的空间在WINXP上在00FFXXXX处,在WIN98上在80000000处。我们可以把这部分的代码用LORDPE来DUMP出来,并把它贴到DUMP主程序中去,并把这并且部分代码的RVA改成00FFXXXX-400000。如果你是WIN98这样做就会程序非法,因为程序映射的空间太大。所以我推荐大家用WINXP或WIN2000。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-9 01:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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