现在的位置: 首页 > 综合 > 正文

通过远程线程注入DLL!心得!

2012年09月26日 ⁄ 综合 ⁄ 共 3004字 ⁄ 字号 评论关闭

1.       通过GetModuleHandle定位LoadLiabraryKernel32.dll中的虚拟地址!!(根据jerry 牛人的说法,就是kernel32.dll在任何进程中加载的位置都是一样的)

2.       提升当前进程的权限,使其权限提升为debug的权限,这样才能在目标进程中分配虚拟空间和读写虚拟空间操作。

3.       在目标进程中分配存放LoadLibrary的参数的内存。因为必须将参数写到目标进程中,才能让创建的线程访问,要不然,就会发生进程访问数据冲突,(不能垮进程访问地址),通过函数VirtualAllocEx.

4.       在分配的地址空间中写入参数值,通过WriteProcessMemery.

5.       调用CreateRemoteThread创建远程线程!

6.       补充说明一下:提升权限用到的函数:
1)
通过OpenProcess一查询权限打开自己的进程.
2)
通过OpenProcessToken打开访问令牌。

3)
通过LookupPrivilegeValue查询debug权限的值
4)
通过AdjustPrivilegeValue来调整进程权限

7.       在写的过程中遇到了很多麻烦,其中一个问题就是,当我代码没有问题的时候,发现老师只能注入自己的线程,其他的都注入不进去,后来啄么了很久,才防线是依赖库的问题,没有吧依赖库放到一起,再者,需要注意的是,当远程线程在目标进程中运行的时候,如果你传的路径不是绝对路径,那么也会出问题,因为他要从目标进程的目录中搜索,搜索不到,在从环境变量中列出的路径搜索,所以,路径得必须谨慎。其次,是你的函数和传入的路径字符串要是同一字符集。要不让也会出问题!

8.       如果想要卸载注入的DLL,也很简单,通过注入FreeLiabray线程就OK了!!!方法同上!

代码:


10.    

 

抱歉!评论已关闭.