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

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

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

http://dl.360safe.com/killer_zjz.zip
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
peaceclub 6 2008-7-30 21:24
56
0
这个0x400000是不好预留的,地址空间经常会被map掉。
雪    币: 272
活跃值: (143)
能力值: ( LV15,RANK:930 )
在线值:
发帖
回帖
粉丝
dummy 23 2008-7-30 21:36
57
0
当进程内只有 kernel32.dll、 ntdll.dll 和主程序时,得到0x400000很简单,user32.dll 如果被加载进程空间将变得很乱...
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2008-7-30 22:01
58
0
所以说,最好用asm或者c去写,不要用delphi去写
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 24 2008-7-30 23:32
59
0
汉,没太明白你和作者的意思。生成了一个xavengine.dll,貌似用这个,调用360产品的病毒引擎进行病毒扫描吧。

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

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

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
1、代码重定位,只需记录IMAGE_BASE就够了;
2、变量地址的重定位,用IDC脚本查找代码中所有需要变更的对变量引用的地址,放入addrlist.txt备用;
3、在自己的程序(称为调用程序)中读入目标程序,我在网上找了一段代码(http://www.wwwer.net/cn/article.asp?id=852);
4、按addrlist.txt记录的地址,修改变量地址(= 当前值 - 原来的BASE + 新BASE);
5、为了保持目标程序的运行环境,从目标程序入口点开始执行到main函数;
6、修改main函数开始处的指令直接跳回调用程序,这里的关键是能恢复调用程序的运行环境。我这里只是简单的恢复EBP的值,似乎够用了。
7、准备参数,调用目标函数,显示返回结果;

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

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
游客
登录 | 注册 方可回帖
返回