首页
论坛
课程
招聘
[原创]一个Win7X64内核注入32位进程的例子
2015-4-26 18:18 18888

[原创]一个Win7X64内核注入32位进程的例子

2015-4-26 18:18
18888
这是前段时间完成的一个内核注入的代码, 没用采用APC,无线程,无dll,启动时注入。

读取C:\\process.txt, process.txt存放需注入的进程名, 一行一个.

原理是在注册模块回调"\\WINDOWS\\SysWOW64\\KernelBase.dll"的时候修改已经被读入内存的OEP转入shellcode中,运行后再跳回去. 简单易懂. 也没有什么技术含量

之所以选择\\WINDOWS\\SysWOW64\\KernelBase.dll是因为SysWOW64中的DLL只有32位进程才会加载,这样就不需要判断是否是32位进程了。选择KernelBase.dll则是一个模块加载时机问题。其他一些dll加载时机都比较早了. 读取一些信息不太方便, 连PEB都没初始化完

在修改内存中OEP时为了方便,X64TrapFrame都是用的硬编码,都是临时调试出来的。
因为在加载KernelBase.dll时, 内存中存放入口地址的指针位于RSI+0x7B0,通过直接修改这个值达到目的

//修改读入内存的OEP
PULONGLONG WriteOEP(PEPROCESS curProc, PULONGLONG pBuf)
{
    PEPROCESS proc = curProc;
    PETHREAD pThread = NULL;
    PULONGLONG pX64TrapFrame, pRsi, pRet, pOEP;
    NTSTATUS status;
    
    //获得KTHREAD
    pRet = ((ULONGLONG)curProc+0x308);
    pThread = *pRet - 0x420;

    //获得KTRAP_FRAME结构
    pX64TrapFrame = (ULONGLONG)pThread + 0x1d8;
  
    //获得pRsi寄存器
    pRsi = *pX64TrapFrame + 0x150;
    
    //获得OEP
    pRsi = *pRsi + 0x7B0;
    pOEP = *pRsi;
    *pRsi = pBuf;

    //写入shellcode+0x240
    //mov eax, 0x00000000
    //jmp eax
    RtlCopyMemory( (PUCHAR)pBuf+240, &pOEP, 4 );

    return pOEP;
}

自己看吧。可注释掉文件判断测试注入所有32位进程,Win7X64虚拟机测试没问题

近些天无聊在做一个网络防火墙, 搞定后放码,快完了.

[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年6月班火热招生!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (20)
雪    币: 71
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LifeVscen 活跃值 2015-4-26 18:52
2
0
抱歉,没仔细看。。。。。
雪    币: 71
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LifeVscen 活跃值 2015-4-26 18:53
3
0
还是谢谢LZ的辛勤劳动;我的观点有点直接,见谅。
雪    币: 2081
活跃值: 活跃值 (44)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
exile 活跃值 1 2015-4-26 20:53
4
0
你把代码看完再喷啊。。。。都没见你下附件
雪    币: 71
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LifeVscen 活跃值 2015-4-26 22:30
5
0
给大家带来的不适抱歉。
雪    币: 2
活跃值: 活跃值 (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
breakchan 活跃值 2015-4-27 00:20
6
0
不错~~
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
albeta 活跃值 2015-4-28 16:20
7
0
凡是对看雪提供支持的朋友,我都会努力点个赞。。。
雪    币: 37
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fnwk 活跃值 2015-5-25 11:03
8
0
支持,就是有大量硬编码..
雪    币: 28
活跃值: 活跃值 (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
圜长 活跃值 2016-4-22 21:12
9
0
刚睡醒,占个楼...
雪    币: 201
活跃值: 活跃值 (681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yy虫子yy 活跃值 2016-4-22 21:42
10
0
路过留个mark
雪    币: 514
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
xacker 活跃值 1 2016-5-16 15:36
11
0
MARK
雪    币: 38
活跃值: 活跃值 (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chilun 活跃值 2016-5-16 22:53
12
0
小白请教?把什么注入了?shellcode?我想把dll注入怎么搞呀?
雪    币: 216
活跃值: 活跃值 (292)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
编程小白 活跃值 2016-5-19 13:27
13
0
下来看看 多谢分享
雪    币: 38
活跃值: 活跃值 (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chilun 活跃值 2016-5-19 17:06
14
0
哥唉,怎样把shellcode改为注入dll?
雪    币: 159
活跃值: 活跃值 (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aisht 活跃值 2016-5-20 18:37
15
0
方法不错.就是.... 硬编码硬伤
雪    币: 77
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yishunjian 活跃值 2016-5-23 14:10
16
0
支持楼主,辛苦了
雪    币: 77
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yishunjian 活跃值 2016-5-23 15:11
17
0
UCHAR shellcode[] = {X,X,X,X,X}; 里面的内容是什么东东?如何添加一个动态库注入?
雪    币: 8
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_jqdhfeev 活跃值 2020-5-5 22:43
18
0
666
雪    币: 95
活跃值: 活跃值 (289)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem 活跃值 2020-5-6 02:28
19
0
777
雪    币: 15
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
蒋明通 活跃值 2020-5-8 11:37
20
0
驱动中如何判断当前进程是32位还是64位呢.我记得有一个命令可以查询(不是ZwQueryInformationProcess)但忘了是什么了.
雪    币: 93
活跃值: 活跃值 (205)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
taizhong 活跃值 2020-6-9 01:10
21
0
硬编码是硬伤,亲测win7 64 虚拟机蓝屏
加载成功,启动进程的时候蓝屏
游客
登录 | 注册 方可回帖
返回