首页
社区
课程
招聘
求助]call指令对其的问题?
发表于: 2009-5-24 21:04 5414

求助]call指令对其的问题?

2009-5-24 21:04
5414
__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   到某个函数  <-(这里怎么实现?)
        }
}

跳到的位置总不是我想要的  该怎么办  求各位高手方便的话指点一下

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
call eax //eax==apiaddress

or

call dword ptr [xxxxxxx] // xxxxxxx->apiaddress
2009-5-24 21:13
0
雪    币: 457
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先感谢一下fixfix
我call的是内核函数ObOpenObjectByPointer  ,貌似这样子不可以
2009-5-24 22:04
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
push $CCOUNTED_UNICODE_STRING ("ObOpenObjectByPointer")
call MmGetSystemRoutineAddress
call eax
2009-5-24 22:11
0
雪    币: 457
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
vc在驱动中是不是要对 call地址进行修复过啊  这样直接还是不可以

内核中的代码   应该怎么模拟?
805756d9 e89f7dffff      call    nt!ObOpenObjectByPointer (8056d47d)
2009-5-24 22:22
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
look 4 lou

na jiu shi moni
2009-5-24 22:23
0
雪    币: 457
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
4楼的代码不行  VC直接报错了
2009-5-24 22:25
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那代码给你传达的信息是先用 MmGetSystemRoutineAddress 获取那函数地址
然后再CALL
2009-5-24 22:31
0
雪    币: 457
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
意思我知道   就是地址什么都对  
但是一运行  跳转的地址完全不是那样

比如真实的ObOpenObjectByPointer地址是0x8056d47d

驱动运行之后发现call的地址变成了其他的未知地址

805756d9 e89f7dffff      call    nt!ObOpenObjectByPointer (8056d47d)

模拟一模一样也不行
2009-5-24 22:46
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
把API地址放到个XXXXXXXX全局变量里,然后

call dword ptr [xxxxxxxx]
2009-5-24 22:52
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
805756d9 e89f7dffff      call    nt!ObOpenObjectByPointer (8056d47d)

9f7dffff ==  8056d47d - -- 805756d9 ---5

805756d9  这就不一样了
你看看哪一环出错把
2009-5-24 22:55
0
雪    币: 457
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
内核原始的
805756d9 e89f7dffff      call    nt!ObOpenObjectByPointer (8056d47d)

我编的在内存中的汇编

821f93e7 e87dd45680      call    02766869

结果call到其他的未知地址去了
2009-5-24 23:06
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
看11楼的算法 看那个地址错了

用10楼的方法把,那样不用算
2009-5-24 23:07
0
雪    币: 457
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
11楼算法没看明白什么意思  怎么换算的
2009-5-24 23:11
0
雪    币: 129
活跃值: (31)
能力值: ( 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]  
}
}
2009-5-24 23:16
0
雪    币: 457
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
可以了  非常感谢 六月 和 fixfix
2009-5-24 23:49
0
游客
登录 | 注册 方可回帖
返回
//