首页
社区
课程
招聘
注入DLL到进程的问题
2018-4-26 10:56 3459

注入DLL到进程的问题

2018-4-26 10:56
3459
前提条件:注入一个DLL到A进程里面,注入成功后会出现一个对话框,对话框上有按钮等控件。
现在DLL是一个线程运行在A进程里面,还是它本身就是一个进程?如果在dll编写函数操作A进程的内存地址,WriteProcessMemory()中第一个句柄参数应该用谁的句柄或线程?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-4-26 10:57 被lwtzero编辑 ,原因:
收藏
免费 0
打赏
分享
最新回复 (8)
雪    币: 218
活跃值: (2834)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-4-26 11:32
2
0
A进程中的一个线程。
当你注入到A进程之后,操作A进程的内存已经不需要WriteProcessMemory了,直接指针操作就可以了。比如memcpy。
如果你真的要用WriteProcessMemory,就打开当前进程的句柄。
雪    币: 2454
活跃值: (2929)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
boursonjane 2018-4-26 11:42
3
0
直接传(HANDLE)-1就行了
雪    币: 13
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lwtzero 2018-4-26 12:43
4
0
yeyeshun A进程中的一个线程。 当你注入到A进程之后,操作A进程的内存已经不需要WriteProcessMemory了,直接指针操作就可以了。比如memcpy。 如果你真的要用WriteProcessMem ...
有没有windows  api实现memcpy的功能的?
雪    币: 238
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
武装的蔷薇 2018-4-26 13:23
5
0
lwtzero 有没有windows api实现memcpy的功能的?
看来你并没有理解注入是怎么回事
雪    币: 218
活跃值: (2834)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-4-26 13:32
6
0
lwtzero 有没有windows api实现memcpy的功能的?
有没有API不是很清楚。
为什么一定要用API,自己写一个for循环填充内存不就行了吗
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
fosom 8 2018-4-26 15:55
7
0
现在DLL是一个线程运行在A进程里面,还是它本身就是一个进程?
回答:
DLL本身只是该进程里面的ModuleList(模块列表)一段Code内存空间,是否会有线程,要看你的Code里面是否create  thread,  如果有。
在ThreadList(线程列表)可以找到你的线程。

比如说:模块列表:
Executable  modules
基址              大小              入口              名称          (系统)            文件版本                    路径
00B40000      00079000      00B4312B      WeChat                              2.4.5.1                      C:\Program  Files  (x86)\Tencent\WeChat\WeChat.exe
6D5E0000      027F9000      6EF4EB93      qbcore                              3.43.691.400            C:\Program  Files  (x86)\Tencent\WeChat\qbcore.dll
6FDE0000      004BA000                            WeChatRe                          1.0.0.0                      C:\Program  Files  (x86)\Tencent\WeChat\WeChatResource.dll
702A0000      005A3000      7030DAFF      libFFmpe                                                              C:\Program  Files  (x86)\Tencent\WeChat\libFFmpeg.dll
70850000      01205000      7130EC9C      WeChatWi                          2.6.2.31                    C:\Program  Files  (x86)\Tencent\WeChat\WeChatWin.dll
72130000      00051000      7215988C      WINSPOOL  (系统)                6.1.7600.16385  (    C:\Windows\system32\WINSPOOL.DRV
722B0000      00070000      722B1F65      ntshrui    (系统)                6.1.7600.16385  (    C:\Windows\system32\ntshrui.dll
你自己的Dll只能在Ring3级别,内存段的一段空间内。除非是驱动可以在8XXXXXXX以上的地址。


如果在dll编写函数操作A进程的内存地址,WriteProcessMemory()中第一个句柄参数应该用谁的句柄或线程?
回答:第一个参数是模块基地址dwModuleBaseAddr,这里可以是主模块基地址,也可以是自己Dll的基地址。
如果要执行,必须先VirtualQuery  查询Protect  =  PAGE_EXECUTE_READWRITE  ,  可写状态。

比如你可以这样写:  这里的pAddress:  Pointer可以是ring3,也就是7XXXXXXX以下的可写地址。
function  SetToWrite(pAddress:  Pointer):  Boolean;
var
    mInfo:  MEMORY_BASIC_INFORMATION;
    dwOldProtect:  DWORD;
begin
    VirtualQuery(pAddress,  mInfo,  SizeOf(mInfo));
    if  mInfo.Protect  =  PAGE_EXECUTE_READWRITE  then
        Result  :=  True
    else
    begin
        if  VirtualProtect(mInfo.BaseAddress,
            mInfo.RegionSize,
            PAGE_EXECUTE_READWRITE,
            @dwOldProtect)  =  True  then
            Result  :=  True
        else
            Result  :=  False;
    end;
end;
雪    币: 218
活跃值: (2834)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2018-4-26 16:50
8
0
fosom 现在DLL是一个线程运行在A进程里面,还是它本身就是一个进程? 回答: DLL本身只是该进程里面的ModuleList(模块列表)一段Code内存空间,是否会有线程,要看你的Code里面是否cre ...
我对你的回答有疑问。
楼主说注入成功弹出对话框,那么一定有线程拉起来。不管是谁创建的线程,肯定会有线程。
WriteProcessMemory第一个参数是进程句柄,从没听说过可以直接传递模块基址的。
也许是我孤陋寡闻了。等一下,你是从第0个参数开始算起的吗?
最后于 2018-4-26 16:51 被yeyeshun编辑 ,原因:
雪    币: 13
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lwtzero 2018-4-26 17:10
9
0
武装的蔷薇 看来你并没有理解注入是怎么回事
确实不是很理解
游客
登录 | 注册 方可回帖
返回