首页
社区
课程
招聘
[原创]重载内核全程分析笔记
发表于: 2013-8-20 20:19 101264

[原创]重载内核全程分析笔记

2013-8-20 20:19
101264
收藏
免费 6
支持
分享
最新回复 (152)
雪    币: 281
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
76
看了一篇LZ的代码,竟然看懂了!内核重载原来是这么一回事!
试运行了一下,发现有错误:
                if (!strcmp((char*)PsGetCurrentProcess()+0x174,"cheatengine-i38"))
                {
                        return pNewSSDT->ServiceTableBase[FuncIndex];
                }
在return pNewSSDT->ServiceTableBase[FuncIndex];这里出错了

b85c0550 8b11            mov     edx,dword ptr [ecx]
1: kd> r ecx
ecx=00000000
怎么回事?
2013-9-27 14:22
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
77
完整的重定位应该是介样子的吧。
kd> u IoCreateFile la
nt!IoCreateFile:
8057791c 8bff            mov     edi,edi
8057791e 55              push    ebp
8057791f 8bec            mov     ebp,esp
80577921 83ec0c          sub     esp,0Ch
80577924 53              push    ebx
80577925 56              push    esi
80577926 33f6            xor     esi,esi
80577928 8975fc          mov     dword ptr [ebp-4],esi
8057792b 8b1db8a05580    mov     ebx,dword ptr [nt!ExHotpSyncRenameSequence (8055a0b8)]
80577931 f6c301          test    bl,1
kd> u 0xe2ad591c la
e2ad591c 8bff            mov     edi,edi
e2ad591e 55              push    ebp
e2ad591f 8bec            mov     ebp,esp
e2ad5921 83ec0c          sub     esp,0Ch
e2ad5924 53              push    ebx
e2ad5925 56              push    esi
e2ad5926 33f6            xor     esi,esi
e2ad5928 8975fc          mov     dword ptr [ebp-4],esi
e2ad592b 8b1db880abe2    mov     ebx,dword ptr ds:[0E2AB80B8h]
e2ad5931 f6c301          test    bl,1

你用了原内核的基址来重定位才会变成
8b1db8a05580    mov     ebx,dword ptr [nt!ExHotpSyncRenameSequence (8055a0b8)]
介个介个,是不是内核初始化的时候还有些数据我们重载的没有才这样做呢?还是导入表就懒得自己去加载? 介样子好像会在新内核跟原内核之间跳来跳去的,有可能有些函数还没hook了
2013-9-27 16:12
0
雪    币: 524
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
78
*uRelocAddress=*uRelocAddress+(OrigImage-OriginalImageBase);中OriginalImageBase 是imagebase但是OrigImage这个是什么?看你的源码是定义的是804D8000
2013-9-27 16:36
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
79
我用的测试机是XP,估计你是用的win7吧?
2013-9-27 16:55
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
80
自己加载 的内核文件因为没有运行,所以全局变量这些都没得到初始化,因此只能用老内核的全局变量。
2013-9-27 16:56
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
81
这个是原来的内核文件加载的地址,因为我发现XP下这个地址不会变,就没有用其它方法去获取 ,win7下就不行了,win7下需要动态获取这个加载 地址。
2013-9-27 16:57
0
雪    币: 524
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
82
原来的内核文件地址减imagebase不明白什么意思?
2013-9-27 18:06
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
83
就是为了获得相对地址。
2013-9-27 18:08
0
雪    币: 281
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
84
LZ我研究了一个下午,我的是xp sp3的系统,出错的地方只是开了CE就出错了,全局的pNewSSDT竟是空的!
0: kd> dd pNewSSDT
b85e5290  00000000 805cc3fc 8054260a 00000000

但是我明明检查过不是空的,真是搞不明。
你的openprocess被调用一次后就被你还原了。所以只有CE是用新内核。如果不崩那说明重载的内核正常运行了!
这个BUG我再研究下
2013-9-27 18:22
0
雪    币: 524
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
85
应该是原内核加载地址和新内核加载地址的差值吧。获得需要重定位地址处的值加上这个差值就是重定位后的值。
2013-9-27 20:15
0
雪    币: 60
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
86
Mark…  ^O^。
2013-9-27 21:01
0
雪    币: 8764
活跃值: (5240)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
87
学习了。。。
2013-9-27 21:18
0
雪    币: 281
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
88
LZ的代码终于运行正常了!原来是我用了别的内核~~~而LZ的内核是写死的

写个hook验证是否成功了用了很多时间~~~真是太强大了重载内核!!无视Hook啊!重载内核,用pchunter也只看到一个hook,就查不到别的痕迹了!
那这个kifastcallentry应该是兵家必争之地啊,那检测内核重载,是不是只能检测kifastcallentry是否被hook了?
2013-9-29 17:15
0
雪    币: 281
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
89
LZ你好,请教 一个问题,我发现你的代码,没有对NT的导入和导出表进行处理啊,为什么这样都能正常运行?难道ntopenprocess,ntreadvirtualmemory这些函数都没有用到别的模块的?
我发现nt也有用到别的模块 啊,好像hal.dll,kdcom.dll ,不用处理的吗百思不得其解啊
2013-9-29 18:16
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
90
呵呵,你真是用心了。其实 很多问题我也在继续学习中,还得向各位大牛请教。
2013-9-29 20:15
0
雪    币: 163
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
91
绝世好文!!!
2013-10-4 03:32
0
雪    币: 18
活跃值: (117)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
92
mark。。。。
2013-10-8 16:39
0
雪    币: 222
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
93
HOOK KiFastCallEntry,让RING3进程调用走新内核!!如果安装了360安全卫士,除了卸载,又该怎么办呢?
2013-10-8 18:03
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
94
还有其它方法可以实现这个功能的,不一定非要hook KiFastCallEntry,具体方法你自己在网上找一下吧。
2013-10-9 09:27
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
95
楼主可以再考虑下,导入表,导出表,ntos中全局变量的最后会落实到那个模块这些问题。。重载个内核不难,究竟哪些东西走的新内核才是要思考的地方啊。
2013-10-29 09:25
0
雪    币: 39
活跃值: (244)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
96
虽然看不懂 还是先留个名吧
2013-10-29 16:29
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
97
非常不错的文章,试了下,有效果。但是不是只有ssdt表中的函数才会走新内核?如果其它未导致出的函数也要走新内核要怎么做?
2013-11-2 12:22
0
雪    币: 560
活跃值: (949)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
98
好学习资料啊 mark一下
2013-11-2 13:34
0
雪    币: 100
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
99
mark一下,以后再看
2013-11-4 10:31
0
雪    币: 92
活跃值: (70)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
100
好文章,学习了,目前正在学习这块,楼主的文章正好解疑了,谢谢楼主
2013-11-5 09:16
0
游客
登录 | 注册 方可回帖
返回
//