- UID
- 90629
注册时间2015-5-19
阅读权限20
最后登录1970-1-1
以武会友
 
TA的每日心情 | 开心 2015-12-12 14:28 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
本帖最后由 bbaa987 于 2017-4-3 10:31 编辑
仿照Aheadlib做的64位的版本。 由于默认vs编译器不支持x64的内联汇编。所以使用了obj文件。
obj文件源码是obj.asm文件。
写个例子 说下 转发的原理:
1.原始是call [0x405000];
2.进入劫持函数 void MyFunc() { AsmFunc1(); AsmFunc2((INT64)RealFuncAddr); }
//这里只是保存一下第一个参数到rax AsmFunc1: mov rax,rcx retn
//让rax指向真正的 eip(rcx是第一个参数) 还原第一个参数,跳到原始函数执行 AsmFunc2: xchg rax,rcx jmp rax
返回的时候是先返回到 AsmFunc2 下面 再返回到 原始调用处的下面
实际情况自己找个DLL劫持下走一遍就清晰了。
64位版本的很少,这个是从古歌搜索到的。这里是源码。哪位大牛研究研究源码看看能否写出来更好的工具。
|
评分
-
查看全部评分
|