首页
社区
课程
招聘
[旧帖] [求助]没有邀请码,只好到这来提问,关于将系统模块复制到用户地址空间然后调用的问题 0.00雪花
发表于: 2009-6-24 15:08 1422

[旧帖] [求助]没有邀请码,只好到这来提问,关于将系统模块复制到用户地址空间然后调用的问题 0.00雪花

2009-6-24 15:08
1422
有个想法,就是将系统空间的DLL 例如User32.DLL,直接从磁盘上读取到到用户的地址空间。
然后代码需要调用这些DLL中的API时 不去调用系统空间的地址,而是直接调用用户地址空间中的地址,为了能达到和正常调用API一样的效果,需要解决哪些问题?

望看雪的大佬们指点一下。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
WINDOWS NT/XP/VISTA系统上,每个进程有自己的地址空间,即使是同一程序的不同的进程实例也是各有自己的地址空间。另外一种分法是地址空间分为用户态地址空间(默认是2G以下)和内核态地址空间(默认是2G以上),在用户态的代码是无法访问内核态的地址空间的。系统动态库(如USER32.DLL)需要时会映射或显式加载到进程的地址空间,此过程不是简单的将代码复制到内存,而是要做许多初始化工作(分节加载,重定位,加载关联动态库等),调用DllMain做模块的初始化工作等。自己加载USER32.DLL是很复杂的,是系统版本相关的,是没有多大意义的。
2009-6-24 20:10
0
雪    币: 55
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你想做远程调试还是啥?LS的说法是自己写一个LoadLibrary函数,确实比较麻烦。

如果真像我刚说的你只是想做远程调试的话,可以直接自己定位到系统地址空间中的LoadLibraryA函数然后通过它加载所需要的各种DLL。事实上系统本身的各种DLL也是用那个函数里面的代码加载进去的。
2009-6-24 20:50
0
雪    币: 72
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
最近在分析一款软件时 发现 他加载了几个系统DLL到内存后 就不在调用这些DLL的API,所以想问一下免得自己搞错了方向。
他加载DLL的过程大概如下:CreateFileA ReadFile 读取数据到内存 然后VirtualMalloc一个内存块,之后就没有调用相关的API。紧接着就出现了一大堆NTDLL中的API调用,而且调用代码全在 用户地址空间 小于0x70000的地址空间。 所以想知道他是怎么做到的。
2009-6-25 09:44
0
游客
登录 | 注册 方可回帖
返回
//