首页
社区
课程
招聘
[演示]调用任意EXE,DLL内部函数,无须导出
发表于: 2008-6-23 15:04 11255

[演示]调用任意EXE,DLL内部函数,无须导出

2008-6-23 15:04
11255
程序演示的是一个只需要知道任意PE文件内部函数RVA便可以直接调用的小工具,无须导出内部函数,解决EXE文件的重定位表问题

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
听起来很厉害,下来看看。
2008-6-23 17:02
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
3
什么叫解决exe文件的重定位表问题

把hook32.exe的重定位表删掉还能演示嘛?
2008-6-23 17:40
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
4
楼主没理解我的意思

当你需要载入的exe没有重定位表,并且基址和你的exe基址一样的时候,你是无法载入运行的(不管你用什么方法),除非特例(那个函数没用到需要重定位的数据)
2008-6-23 17:49
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
5
加载模块然后重定位,就可以了。
不过说起“调用任意EXE,DLL内部函数”,LZ有点夸大了,那还得分析这个函数的参数,返回值,和调用方式。

btw:楼上的海风牛,有笔误之处--->“基址和你的exe基址一样的时候”
2008-6-23 18:33
0
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
是么,听起来却是挺狠的
2008-6-23 18:38
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
7
我没表达好
假设a.exe需要调用b.exe的0x401000位置的未导出函数
我的意思是,b.exe的pNtHdr->OptionalHeader.ImageBase和a.exe的pNtHdr->OptionalHeader.ImageBase相等的时候,并且,b.exe没有重定位表的时候,基本上是无法处理的
2008-6-23 20:49
0
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
反正就是没用
2008-6-23 22:10
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
9
哈哈 这种情况 a.exe肯定是自己写的
当然要主动规避嘛。。。你要调用别人的函数 就要去适应别人的代码嘛
  其实作为调用其他exe的函数 自己exe的基质一般都取个比较特殊的好
2008-6-24 08:02
0
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
10
了解海风月影兄的意思了!你说的不是处理重新定位表的问题 而是程序根本没有重新定位表的问题 哈哈!
这样的情况 只能自己吃点亏 让自己的EXE的基址主动回避一下啦!
2008-6-24 08:38
0
雪    币: 209
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
在没有重定位表的情况下要看运气,运气好的话说不定要调用的函数不需要重定位,或者自己能在理论范围内进行重定位就可以调用了。。。如果运气不好的话就调用不了了。。。

可参见2007金山杯我的第3题答案
2008-6-24 09:09
0
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
12
重新定位表 也可以自己分析要调用函数中用到的手工添加
2008-6-24 09:10
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
13
太 猥琐 了
2008-6-24 09:20
0
雪    币: 209
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
海风的意思是没有重定位表的情况
2008-6-24 09:38
0
雪    币: 193
活跃值: (26)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
15
没有就自己手加啦  分析一下自己需要调用的函数  没办法啦!微软太猥琐 了 我们自能自己苦力

不过我记得以前有个工具 是根据代码区域范围 自动添加重定位表的

当时我以为没什么用 就没下过
2008-6-24 09:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不可能100%正确。只能解决一部分重定位问题。
2008-6-24 10:02
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
17
试试这个附件,调用0x401000位置
上传的附件:
2008-6-24 10:10
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
18
可以的 不过需要一个反汇编引擎识别代码
识别完代码之间的关系以后就可以随便移动了
2008-6-24 10:42
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
19
不要拿vmp来欺负人哦
2008-6-24 10:43
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
20
vmp是防止代码被改的
我不喜欢用vmp来欺负人,我喜欢放src

0x401000处的src如下:

void callme()
{
	DWORD MyBase;
	LIST_ENTRY *ListHead;
	PLDR_MODULE pstEntry;
  
	PPEB peb;
	GetPeb(peb);
	MyBase = GetMyBase();

	ListHead = peb->LoaderData->InLoadOrderModuleList.Flink;
	pstEntry = CONTAINING_RECORD( ListHead, LDR_MODULE, InLoadOrderModuleList);
	if(((DWORD)pstEntry->BaseAddress == MyBase) && ((DWORD)peb->ImageBaseAddress == MyBase) && MyBase == 0x400000)
		MessageBox(NULL,"调用成功!","Good Call",MB_ICONINFORMATION);
	else
		MessageBox(NULL,"别忽悠我!","Bad Call",MB_ICONERROR);

	return;
}
2008-6-24 10:45
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
21
如果你有自动添加重定位表的引擎,我可以提供你试炼品测试一下
2008-6-24 10:53
0
游客
登录 | 注册 方可回帖
返回
//