首页
社区
课程
招聘
[旧帖] [原创]-------------------NTdll函数里有没有获取子进程PID的API--------DLL独立运行位进程问题 0.00雪花
发表于: 2012-7-11 18:45 1427

[旧帖] [原创]-------------------NTdll函数里有没有获取子进程PID的API--------DLL独立运行位进程问题 0.00雪花

2012-7-11 18:45
1427
研究一款软件

一个.EXE启动了一个.DLL
在进程看 那个DLL是独立运行的

2个问题:

1.如何能知道EXE启动DLL的参数(DLL怎么样才能独立运行为进程)

2.获取DLL的PID

因为我想注入,可是启动EXE运行的却是DLL 所以才想注入子进程PID方式注入到那个DLL

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
windows的加载策略是,你提供一些正确的信息,然后我完成加载。至于其他的信息正确与否,无所谓。

所以在windows下,可执行文件可以是任意后缀名,动态链接库也可以是任意后缀名。然而windows外壳explorer.exe只注册了.exe后缀的执行命令,所以一个.dll后缀的可执行文件,则必须调用者自己使用API来完成启动。

启动之后,这个.dll文件将构成新进程的执行主体。

不过,按你说的情况除了上面的可能还会有另一种情况,调用者使用rundll32.exe来运行这个DLL,其内部实现模式是这样的,首先运行rundll32.exe,然后它会处理自己的命令行,然后去LoadLibrary参数中的Dll,如果后面还有一个参数,则GetProcAddress以这个参数为名的导出函数,如果后面还有参数,则将这些参数作为这个导出函数的参数压栈,之后调用导出函数本身。

对于你的问题:
问题一:
若是上面第一种情况,那么你要么去拦截EXE中启动DLL的API所传入的参数,要么侵入DLL进程去call GetCommandLineA/W
若第二种情况,我想我说的也很明白了。

问题二:
如果是上面第一种情况,同样的,可以去拦截EXE中启动DLL的API传入的参数的返回值(针对CreateProcess),也可以CreateToolHelp32Snapshot,我想这个你也很熟练的。
如果是上面第二种情况,那么这个DLL不存在PID,它寄身于rundll32.exe的进程中。
2012-7-12 02:21
0
雪    币: 8
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢鸟哥  分析的不错

我尝试了几种方法 最后最简单的方法成功了

获取EXE启动DLL的参数 然后传入就可以运行 并且可以注入

后来思考了下  DLL和EXE都是PE结构  那么后缀其实不重要了 只要DLL人家做好了参数正确都可以启动
2012-7-12 13:00
0
游客
登录 | 注册 方可回帖
返回
//