首页
社区
课程
招聘
[原创]例说Exe程序作为DLL进行加载
发表于: 2008-7-17 23:05 35003

[原创]例说Exe程序作为DLL进行加载

nbw 活跃值
24
2008-7-17 23:05
35003
收藏
免费 7
支持
分享
最新回复 (63)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
51
把带壳文件dump出来一份直接用一般就可以了。不果如果iat被特殊处理,或者你调用的函数里面被加了sdk,那就有些麻烦了。
2008-7-30 10:37
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
52
nbw,你有没有试过delphi程序,貌似加载delphi会有tls的问题。
2008-7-30 10:59
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
53
没有。delphi编译出来的程序,很多库函数都被inline进程序体了,导致程序代码比较庞大,你要用的话可能需要处理的东西比较多。你程序大不大,不大的话可以发给我,不过我可能也没多少空看了。
2008-7-30 18:10
0
雪    币: 7357
活跃值: (3878)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
54
他没有从ep开始执行,不会出问题的
2008-7-30 18:12
0
雪    币: 272
活跃值: (143)
能力值: ( LV15,RANK:930 )
在线值:
发帖
回帖
粉丝
55
下面的专杀即是 loadexe 做的,为了躲避特木马的征码扫描

3e9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8D9i4K6u0W2x3K6j5H3M7$3q4X3k6g2)9J5k6h3y4G2L8g2)9J5c8X3E0A6L8r3I4W2M7W2)9#2k6Y4A6B7P5W2)9J5k6i4A6A6M7l9`.`.
2008-7-30 19:46
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
56
这个0x400000是不好预留的,地址空间经常会被map掉。
2008-7-30 21:24
0
雪    币: 272
活跃值: (143)
能力值: ( LV15,RANK:930 )
在线值:
发帖
回帖
粉丝
57
当进程内只有 kernel32.dll、 ntdll.dll 和主程序时,得到0x400000很简单,user32.dll 如果被加载进程空间将变得很乱...
2008-7-30 21:36
0
雪    币: 7357
活跃值: (3878)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
58
所以说,最好用asm或者c去写,不要用delphi去写
2008-7-30 22:01
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
59
汉,没太明白你和作者的意思。生成了一个xavengine.dll,貌似用这个,调用360产品的病毒引擎进行病毒扫描吧。

你是不是想说SuperKiller.exe被运行.exe给load了?他这个load没必要搞那么复杂的,貌似他的SuperKiller.exe可以作为一个DLL被调用,也就是有导出表,同时拥有exe和dll属性。貌似是这样的,哪天有空看看或者找胖同学问一下
2008-7-30 23:32
0
雪    币: 216
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
60
我的疑问和大米差不多,其实个人写程序大多要想load的话写出导出表就是了,你大概是指针对第三方程序?
2008-7-30 23:41
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
61
你不试试怎么知道呢
2008-7-30 23:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
厉害.学习中
2008-7-30 23:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
不太懂,顶一下
2008-7-31 08:41
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
64
我也做过一次,主要难点在于反汇编引擎。

笨笨雄的思路应该是可行的,在调用范围之外用
try{}catch{}包围起来,调整地址。等有机会再试一下。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
1、代码重定位,只需记录IMAGE_BASE就够了;
2、变量地址的重定位,用IDC脚本查找代码中所有需要变更的对变量引用的地址,放入addrlist.txt备用;
3、在自己的程序(称为调用程序)中读入目标程序,我在网上找了一段代码(a43K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6%4N6$3g2J5i4K6u0W2L8X3g2@1i4K6u0r3j5$3&6Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0W2j5i4y4H3i4K6y4r3K9h3c8Q4x3@1b7^5y4e0u0Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8f1k6Q4b7V1y4Q4z5f1t1`.
4、按addrlist.txt记录的地址,修改变量地址(= 当前值 - 原来的BASE + 新BASE);
5、为了保持目标程序的运行环境,从目标程序入口点开始执行到main函数;
6、修改main函数开始处的指令直接跳回调用程序,这里的关键是能恢复调用程序的运行环境。我这里只是简单的恢复EBP的值,似乎够用了。
7、准备参数,调用目标函数,显示返回结果;

看来关键还是IDA Pro的反汇编能力(或者说加标签的能力 :)),当上面的第5点不能顺利完成时,主要原因是漏掉了某个需要修改的地址值,回到IDA中察看,一般是IDA没分析出来。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
2008-11-17 12:31
0
游客
登录 | 注册 方可回帖
返回