返回信息流如何用一个进程使另一个进程调用它身上dll中的函数?谢谢,我想用CreateRemoteThread可是不知道如何得到那个函数的地址[em9]
这是一条镜像帖。来源:北邮人论坛 / security / #8301同步于 2007/2/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
再次求教
FFT
2007/2/19镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
你为什么要插入别的进程来loadlirary
如果你是怕你用来调用hook的这个进程被人发现的,多虑了
进程隐藏可以完全脱离这步来做,你这步所要完成的就是有把握的把钩子给装上
还有现在这种全局钩子卡巴都会报
还有,无论你是自己写进程来调用这个dll里的函数,还是在别的进程里插入线程来调用
都要获得函数地址
我觉得你是对dllexport这块不清楚,不知道怎么调用dll里的函数
你对导出函数有了解否?
在函数声明时把函数进行导出
这样就可以在loadlirary之后用getprocaddress把dll里的函数指针得出来
然后就可以调用这个函数了
我用EXPORTS 导出的hook安装函数,斑竹的意思是我远程注入带有hook的DLL,然后用CreateRemoteThread开一个线程getprocaddresshook得到安装函数的地址,再用CreateRemoteThread安装是么?那么我怎样获得getprocaddresshook的返回?
进程隐藏的话,手段就更丰富了
这个你可以在xfocus找到一些系统的介绍
是否常驻内存这个看你自己了,现在用户态比较常见的是写入内存后,把dll这个文件手动卸载
这个手法可以去参见byshell的源代码
内核态的等我回学校把以前的几种技术都给转过来吧,要不让猫哥写一篇也行,HOHO
我得意思一种就是开进程挂钩子然后隐藏进程
那个createremotethread的意思其实和这个一样,只是不单开进程了,而是利用进程间通信在别的进程开启新的线程来执行挂钩
我认为猪猪的意思就是现在最流行的那种用法。。。
先在本线程GetProcAddress获取LoadLibrary的地址。。。
然后CreateRemoteThread一个线程。。。这个线程唯一的执行函数就是LoadLibrary。。。参数就是在本地CreateRemoteThread的时候传给它的你要注入的dll的文件名所在对方线程中的存放地址。。。需要用VirturalAllocEx分配然后用WriteProcessMemory把dll的全路径文件名写过去。。。然后剩下的工作你就可以在dll中完成了。。。这里隐含的一个东西就是Kernel32.dll在所有进程中的基址是一样的。。。所以才可以这么用。。。
在dll中再用GetProcAddress获取你要的dll自己的导出函数。。这样就可以用了。。。
然后《windows环境下的32位汇编语言程序设计2nd》中还介绍了一种直接将代码写入的方法。。。这样将只是在对方进程中建了一个只有TID的线程。。。插入dll的方法书里没有但是配套光盘上有源代码。。。
这书还介绍了一种不利用导入表直接手工查导出表来获得函数基址的方法。。。在后面PE文件结构那章。。。
至于你问的问题。。。我感觉和你要达到的目的没多大关系。。。= =
如果真要进行少量的数据传递。。。在dll中开个全局变量区就行了。。。
【 在 FFT 的大作中提到: 】
: 谢谢~,斑竹真是辛苦了,我还是不太明白用createremotethread调用getprocaddress的返回值怎么返回我的进程,还需要用其他的函数么?
【 在 CNLAS 的大作中提到: 】
: 我认为猪猪的意思就是现在最流行的那种用法。。。
: 先在本线程GetProcAddress获取LoadLibrary的地址。。。
: 然后CreateRemoteThread一个线程。。。这个线程唯一的执行函数就是LoadLibrary。。。参数就是在本地CreateRemoteThread的时候传给它的你要注入的dll的文件名所在对方线程中的存放地址。。。需要用VirturalAllocEx分配然后用WriteProcessMemory把dll的全路径文件名写过去。。。然后剩下的工作你就可以在dll中完成了。。。这里隐含的一个东西就是Kernel32.dll在所有进程中的基址是一样的。。。所以才可以这么用。。。
: ...................
对你最后一段话深有同感。。。。
谢谢了~~[em68]
【 在 CNLAS 的大作中提到: 】
在dll中再用GetProcAddress获取你要的dll自己的导出函数。。这样就可以用了。。。