能力值:
( LV2,RANK:10 )
|
-
-
2 楼
call eax //eax==apiaddress
or
call dword ptr [xxxxxxx] // xxxxxxx->apiaddress
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
首先感谢一下fixfix
我call的是内核函数ObOpenObjectByPointer ,貌似这样子不可以
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
push $CCOUNTED_UNICODE_STRING ("ObOpenObjectByPointer")
call MmGetSystemRoutineAddress
call eax
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
vc在驱动中是不是要对 call地址进行修复过啊 这样直接还是不可以
内核中的代码 应该怎么模拟?
805756d9 e89f7dffff call nt!ObOpenObjectByPointer (8056d47d)
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
look 4 lou
na jiu shi moni
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
4楼的代码不行 VC直接报错了
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
那代码给你传达的信息是先用 MmGetSystemRoutineAddress 获取那函数地址
然后再CALL
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
意思我知道 就是地址什么都对
但是一运行 跳转的地址完全不是那样
比如真实的ObOpenObjectByPointer地址是0x8056d47d
驱动运行之后发现call的地址变成了其他的未知地址
805756d9 e89f7dffff call nt!ObOpenObjectByPointer (8056d47d)
模拟一模一样也不行
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
把API地址放到个XXXXXXXX全局变量里,然后
call dword ptr [xxxxxxxx]
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
805756d9 e89f7dffff call nt!ObOpenObjectByPointer (8056d47d)
9f7dffff == 8056d47d - -- 805756d9 ---5
805756d9 这就不一样了
你看看哪一环出错把
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
内核原始的
805756d9 e89f7dffff call nt!ObOpenObjectByPointer (8056d47d)
我编的在内存中的汇编
821f93e7 e87dd45680 call 02766869
结果call到其他的未知地址去了
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
看11楼的算法 看那个地址错了
用10楼的方法把,那样不用算
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
11楼算法没看明白什么意思 怎么换算的
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
全局变量.
DWORD add = (DWORD)ObOpenObjectByPointer;
__declspec(naked) my_function_detour_seaccesscheck()
{
__asm
{
// exec missing instructions
// 模拟前面的代码
push ebp
mov ebp, esp
push ebx
xor ebx, ebx
cmp [ebp+24], bl
call [add]
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
可以了 非常感谢 六月 和 fixfix
|
|
|