首页
社区
课程
招聘
关于call API代码抽取的一些讨论
发表于: 2005-10-8 02:46 7017

关于call API代码抽取的一些讨论

2005-10-8 02:46
7017
现在壳都在玩call API代码的抽取,这个是一个难点,也是众位大侠门感觉壳开始离我们越来越远的原因。这里是一个山,对于众多高手来说,这个抽取的代码和乱序IAT之间有千丝万缕的关系,而且在寻找magic jmp的道路上越来越艰难。
有很多程序根本就没有magic jmp.面对大量的乱序IAT大家感觉怎么修复IAT成了恶梦。

思路如下:

1。在仔细的研究完某个壳的时候,发现抽取的IAT代码,有一张完整的表,这个表和call XXX(call [API-乱序]抽到壳中)有着完全一一对应的关系。

2。跟踪出如何还原这个表的算法,就求出了[API-乱序]地址。

(讨论点:这个表是不是存在)

3.还原call [API-乱序],将整个代码区中的整个call XXX给还原回来。

4.将HOOK [API-乱序]还原回来,这个对于大家不难。

这个时候,程序已经可以清晰的看见call [API-乱序]了,剩下的是如何解决乱序!

要讨论点:
找到程序空间加壳前原先放置IAT表的地方,这个空间一定存在(原来就在),我想应该不会填上乱七八糟的代码,要填也是没有用的东西,我们直接将乱序的IAT分类后放回原来的地方,可能顺序不是原来排列的顺序了,但是这个是完整的IAT。

5 .将乱序的IAT整理好后放回原理的地址,也可以是其它地址

6. 再次利用遍历,将call [API-乱序]的地址一一对应好新地址中的IAT地址,
   由于[API-乱序]和[API]不同,但是API是相同的,遍历一一配对后,更改
   call [API-乱序]为CALL [API]

这样就完美解决了没有MAGIC JMP的时候的方式。希望能和大家讨论。
大家可以参考一下,各种壳的IAT模式和call xxx代码抽取模式。

此方法完美的脱掉了2种重要的难壳。

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

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
2
没有人能看得懂还是完全不值得讨论??

这么技术讨论的帖子那么难,正确或者错误也希望大虾们出来看看呀
2005-10-9 00:46
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主的境界果然高,可以秒杀Hying0.76了,不过不是不值得讨论...
只是没有正常人会象我这样半夜来灌水
2005-10-9 02:21
0
雪    币: 245
活跃值: (195)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
你好像都真完了,.....

IAT ,?程序,而言,??有?序?铨,只有???铨...

只要 Create New IAT,? 重新定位,原? CALL [API] ,Address

就可以了,原?的表,在不在,都?所洲了.....:confused

回?其?不膣的,?? Patch 就 OK 了....:
2005-10-9 04:17
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
5
问题是壳破坏了IAT表,不重建IAT是不行的,而现在的Import REConstructor v1.6F不不能很好的处理乱序的IAT只能手工一个一个修,所以必须重新排序,让REConstructor v1.6能重新的建立IAT起来.

其实,我希望讨论的是这个表,就是call xxxI对应的有一张表的.你玩过最新的ASP,它的抽代码部分,是不是也存在这样的逆向表??
2005-10-9 06:16
0
雪    币: 245
活跃值: (195)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
6
最初由 hnhuqiong 发布
问题是壳破坏了IAT表,不重建IAT是不行的,而现在的Import REConstructor v1.6F不不能很好的处理乱序的IAT只能手工一个一个修,所以必须重新排序,让REConstructor v1.6能重新的建立IAT起来.

其实,我希望讨论的是这个表,就是call xxxI对应的有一张表的.你玩过最新的ASP,它的抽代码部分,是不是也存在这样的逆向表??


不需要手工修?,只要? PATCH ,就可以....你可以?考呃篇

http://bbs.pediy.com/showthread.php?threadid=16774

你要找,有?有逆向表,粉??,就??的OEP,找到程序的 OEP
  就可以,知道有?有??表了...

其?,根本不用管,有?有表,膣道?有表,就不能??了????

如果有?成的,??表,呃?也不膣?了......
2005-10-9 06:58
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 syscom 发布


不需要手工修?,只要? PATCH ,就可以....你可以?考呃篇

http://bbs.pediy.com/showthread.php?threadid=16774
........


Patch如何写是难点。。。

PS:你的那篇文章的Patch为什么要那么写呢?
2005-10-9 08:13
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
南蛮妈妈认为,只要有表可查,就能想办法修复
除非用自己的代码模拟api
2005-10-9 09:20
0
雪    币: 245
活跃值: (195)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
9
最初由 南蛮妈妈 发布
南蛮妈妈认为,只要有表可查,就能想办法修复
除非用自己的代码模拟api


你猜?了,ASPR_SKE 就是?自己,模? API,有的 API 是完全模?的...!!!.

也就是,完全不?跳到 KERNEL32.DLL 的 MEMORY ??,
直接模?完,就返回主程序...
2005-10-9 09:48
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
最初由 syscom 发布


你猜?了,ASPR_SKE 就是?自己,模? API,有的 API 是完全模?的...!!!.

也就是,完全不?跳到 KERNEL32.DLL 的 MEMORY ??,
........


南蛮妈妈认为, 这些模拟的api,只要把进ntdll.dll的修复就行了
2005-10-9 09:53
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
11
模拟的API应该不难,因为壳需要在到达OEP前,预处理这些模拟的API,得出适当的值保存给其他的调用,提前拦截它们的预处理,就知道到底多少是预处理的API了,剩下的就是找到它们预处理的API表.(又一张表)
2005-10-9 10:04
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
12
会不会是随机的,或是一些特定的函数。
2005-10-9 12:44
0
游客
登录 | 注册 方可回帖
返回
//