首页
社区
课程
招聘
[旧帖] 怎样写取DLL内存基址+偏移! 0.00雪花
发表于: 2010-1-8 17:55 11967

[旧帖] 怎样写取DLL内存基址+偏移! 0.00雪花

2010-1-8 17:55
11967
怎样写取DLL内存基址+偏移!主要是为了给DLL打内存补丁,因为每次运行的时候基址都会变,用这个软件能够实现,但是DLL一般都是被附加上的,也就是说有两层附加,还有就是不能过壳

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
  • 1.jpg (32.84kb,505次下载)
收藏
免费 0
支持
分享
最新回复 (27)
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
都没人知道吗?
2010-1-8 21:20
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
没人知道这样的软件怎么写吗
2010-1-9 01:33
0
雪    币: 424
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
求何谓两层附加
2010-1-9 09:48
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
名字自己取的,也就是说那个DLL要附加两次,最后还是附加在游戏上!
2010-1-9 11:40
0
雪    币: 247
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
                HWND hWndOBJ = ::FindWindow(NULL, "窗口名字");
	if(!hWndOBJ)
	{
		AfxMessageBox("找不到窗口");
		return;
	}
	GetWindowThreadProcessId(hWndOBJ, &warpid);
	if(!warpid)
	{
		AfxMessageBox("获得pid失败");
		return;
	}
	uProcess.th32ProcessID = warpid;
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, uProcess.th32ProcessID);
	uProcess.dwSize = sizeof(uProcess);
	n = Module32First(hSnapshot, &uProcess);
	while(n)
	{
		if(stricmp(uProcess.szModule, "dll名字") == 0)
		{
			base = (DWORD)uProcess.modBaseAddr;
			sprintf(tmp, "%d", base);
			AfxMessageBox(tmp);
			break;
		}
		n = Module32Next(hSnapshot, &uProcess);
	}
2010-1-9 11:59
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
大哥,能不能传个源文件,我对C++还不是太了解
2010-1-9 14:23
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你这个好象是挂接DLL函数吧,如何给DLL打内存补丁呢,DLL内存基址是随即的,好比如像上面图片那个基址+偏移,不过他那个不能过壳部分壳检测,最好是个DLL型
2010-1-9 14:26
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
没有高人知道吗?
2010-1-10 12:55
0
雪    币: 424
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
他那个应该就是取得程序中dll的基址
2010-1-10 13:03
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
dll名字还会变的?????????????
2010-1-10 13:39
0
雪    币: 94
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
HINSTANCE hinstance = LoadLibrary("user32.dll");
hinstance就是加载的DLL的基址
2010-1-10 14:03
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
DLL名字不会变,但是内存基址要变
2010-1-10 18:49
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
请问应该怎么写?
2010-1-10 18:50
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
看LOADLIBRARY源码就可以了
2010-1-10 19:07
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不太清楚 应该传个文件试试
2010-1-10 20:03
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
请问在哪看?
2010-1-11 01:49
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
是不是不会用这个工具?
2010-1-11 09:41
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
没见过,大哥能不能传个上来
2010-1-11 10:47
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不懂帮顶!还在初级阶段呵呵
2010-1-11 11:30
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
21
LoadLibrary函数加载Dll 返回的句柄就是DLL的基地址。
可以通过PE头结构对DLL进行分析。
2010-1-11 12:51
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
主要是不知道怎么写,斑竹能不能传个上来
2010-1-11 17:23
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
2010-1-12 12:27
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
有没有懂的啊,谁传个上来
2010-1-13 10:46
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
25
从我做的小工具里面摘出一段:
	MODULEENTRY32 TModuleEntry32;
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwID);
	if (!Module32First(hSnapshot, &TModuleEntry32))
	{
		return ;
	}
	do
	{
		DWORD dwImageSize = 0;
		DWORD dwImageBase = 0;
		dwImageBase = (DWORD)TModuleEntry32.modBaseAddr;
		dwImageSize = TModuleEntry32.modBaseSize;
	}while(Module32Next(hSnapshot, &TModuleEntry32));


得到进程ID为 dwID所有加载的Dll的基址和镜像大小
注意:这个基址和Dll的PE头里面的基址不一样,PE头里面的定死的 而这个基址的会变化的,虽然大多数情况下这两个值是一样的,Good Luck!
2010-1-13 15:08
0
游客
登录 | 注册 方可回帖
返回
//