首页
社区
课程
招聘
[求助]写脱壳机中,脱FSG2.0想到的导入表新建问题
发表于: 2007-5-7 23:04 5703

[求助]写脱壳机中,脱FSG2.0想到的导入表新建问题

2007-5-7 23:04
5703
脱壳机是基于虚拟机的
先说下以前脱下那些壳,导入表重建原理,在脱壳过程中,对GetProcAddress这些关键函数信息进行拦截,以便以后重建导入表用,脱壳后,用0x15ff 0x25ff搜索程序的每个节,查找系统调用信息,来发现脱壳处理后的IAT,然后用这个IAT建立新的导入表(这个过程中用了脱壳后的IAT,没有新建IAT),这个也是ollydump建立导入表的原理
今天发现,脱壳处理后发现的那个IAT,并非IAT,它只不过是张函数地址表,fsg2.0脱壳后的这张表,每个dll导入的函数之间并没有用0隔开(貌似用0x7fffffff隔开了,利用它应该可以搞定导入表新建问题,我未雨绸缪下,如果各dll函数地址间没有无效地址隔开怎么办),导致上面那个重建导入表的思路不能工作了
然后,我自己又写了一段重建导入表的程序,在这个程序中连IAT也重建了,然后,重新搜索每个节,把0x15ff 0x25ff指令的操作数改到我们新建的IAT上来,这样出来的程序,通过0x15ff 0x25ff调用API是没有问题的,但是发现其它一些指令(比如mov)还会去操作脱壳后的那张IAT(准确的说是张地址表),这样导致程序没有办法执行....

现在的问题是:
1.如果我用脱壳处理后的那个“IAT”,只是张函数表,如果每个Dll间没有无效地址隔开,我用ollydump那种思路就无法建立导入表了(当然目前发现大多数壳不这样)
2.如果我连IAT也新建的话,只该了0x15ff 0x25ff指令的参数,其它指令引起的系统API调用怎么办

貌似没有什么办法了,特向各位老大求救,帮我想个招,先谢过了

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
1.那个用来间隔的地址,你自己可以判断下是不是有效的那不就行了,不是有效的就用0填掉.
2. 新建导入表时,你如果能找到原始导入表需要填充的IAT的范围,按那个范围来新建的IAT,是否就不需要考虑0x15ff,0x25ff的问题?
2007-5-8 10:00
0
雪    币: 1746
活跃值: (287)
能力值: (RANK:450 )
在线值:
发帖
回帖
粉丝
3
就FSG2.0来说,我目前是按你说的1处理的,把非dll中函数地址该成0了,这样处理后,导入表好使

你说的第二点,我还真没有想到,还真的可以通过拦截GetProcAddress这些关键函数知道IAT的范围,避免0x15ff 0x25ff搜索问题,谢谢skylly兄了

也欢迎各位继续跟贴,发表高见,谢谢了
2007-5-8 12:20
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
4
依靠FF15和FF25是肯定不行的

某些加密壳可能根本就不会给你那个东西

而且被壳虚拟了的函数,你又要怎么识别?

假如只能针对某些壳,那何必做虚拟机。静态或动态脱壳机都可以。
2007-5-8 12:34
0
雪    币: 1746
活跃值: (287)
能力值: (RANK:450 )
在线值:
发帖
回帖
粉丝
5
虚拟机脱壳也自有它的好处,尤其是在有恶意代码的时候,它可以保障系统的安全;相对静态脱壳来说,它可以不用具体分析壳的特性,应该更具有一定的通用性,
当然虚拟机脱壳,当然是只能针对某些壳的,不可能任何壳都可以鸟杀的,想想你手工脱壳,对一些壳都是那么困难,何况虚拟机这种没有智商的东西呢,它遇到的困难就更加不用说了,加之它还没有操作系统的支持......
虽然虚拟机脱壳有很多系统特性要仿真,不过在脱壳方面效果还是不错的,目前我只花了两个月的业余时间(白天要为生计奔波,没时间搞),已经试验了25种壳的共121个版本,总体来说,都可以搞定,不过这些壳都是压缩壳,最多也只是用了下SEH,简单的anti,我也知道要用它脱加密壳,基本上不太可能,不过,我还是会试试的,不过估计要在等两个月....
2007-5-8 20:03
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6

比我那CoolDumpper好多了,我的那个引擎不能下硬断点,不能下内存断点
脱压缩壳基本没问题,脱加密壳就麻烦多了
不过最大的优点是不怕任何形式的调试器检测~~~~
2007-5-9 09:38
0
雪    币: 188
活跃值: (32)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
感觉我正要学的就是以上的东西啊 ,真的一点都不懂啊!
2007-5-9 10:21
0
雪    币: 513
活跃值: (2258)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=;]...[/QUOTE]
静态解码,再静态重构一份输入表就行了,fsg相对简单些。
做脱壳虚拟机,我倒觉得不如直接做成rldepacker、procdump那样一个动态debugger。
要实现完整的虚拟机,要走的路很远,一个人做的很累很辛苦。
2007-5-9 13:44
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
9
loveboom你这下跑出来了,以为你掉太平洋海沟了.

ff15,ff25这个办法肯定不行,虚拟机真的不是一般的累,真能出来的时候,也就到了大牛的基本水准了.
一般来说,你的方法对于老壳和压缩壳的确有效,而我窃以为,IAT的范围确定还是容易求出的,IAT混淆也还是能整理出来,我记忆中,IAT间隔没有000000的壳还没有(FSG没有玩),但用假的IAT来混淆的加密壳倒是不少,这个有点晕,怎么最后剔除这些假的IAT就真不知道怎么靠脱壳机的IA来判别了.
2007-5-9 14:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我倒是有两只FSG2.0的脱壳机  需不需要发来大家一起研究研究呀
2007-5-10 01:16
0
游客
登录 | 注册 方可回帖
返回
//