hook模板x86/x64通用版(2)--中转函数的shellcode编写
来源:互联网 发布:石油来源 知乎 编辑:程序博客网 时间:2024/06/02 01:55
这个模板的思路是这样的:
1.破坏原地址的指令(至少5字节,此处如果含有跳转会报失败),写一个跳转,被破坏的指令迁移到别的地方;
2.跳转到中转函数,中转函数中会调用用户定义的功能函数;
3.执行原地址被破坏的指令,跳转到原地址的下一指令处。
如果是在API(或普通call)头部进行hook的话,还支持执行API前调用用户定义的“执行前处理函数”,并在执行完API后调用用户定义的“执行后处理函数”。
使用了bea引擎来识别指令长度;
使用了Tls进行线程同步;
对API或者call进行hook的时候不需要知道函数原型;
对API或者call进行hook的时候支持修改函数参数和函数返回值;
肯定还是有很多不足的地方,欢迎朋友们指出和指导!
普通地址hook的中转函数x64代码:
push raxpush rcxpush rdxmov ecx,<TlsValue_for_register> mov rdx,rspsub rdx,68sub rsp,20call @lable1 //e8 00 00 00 00@lable1:add dword ptr ss:[rsp],12push <low_32bit_TlsSetValue>mov dword ptr ss:[rsp+4],<high_32bit_TlsSetValue>retadd rsp,20push rbxpush rbppush rsppush rsipush rdipush r8push r9push r10push r11push r12push r13push r14push r15call @lable2 //e8 00 00 00 00@lable2:add dword ptr ss:[rsp],12push <low_32bit_user_define_function>mov dword ptr ss:[rsp+4],<high_32bit_user_define_function>retpop r15pop r14pop r13pop r12pop r11pop r10pop r9pop r8pop rdipop rsipop rsppop rbppop rbxpop rdxpop rcxpop raxnop //复制原地址被破坏的指令到这里nopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnoppushfqpush raxpush rcxpush rdxsub rsp,20mov ecx,<TlsValue_for_register>xor rdx,rdxcall @lable3 //e8 00 00 00 00@lable3:add dword ptr ss:[rsp],12push <low_32bit_TlsSetValue>mov dword ptr ss:[rsp+4],<high_32bit_TlsSetValue>retadd rsp,20pop rdxpop rcxpop raxpopfqpush <low_32bit_jmpbackAdr>mov dword ptr ss:[rsp+4],<high_32bit_jmpbackAdr>ret
API的hook中转函数x64代码:
push raxpush rcxpush rdxmov ecx,<TlsValue_for_register> mov rdx,rspsub rdx,68sub rsp,20call @lable1 //e8 00 00 00 00@lable1:add dword ptr ss:[rsp],12push <low_32bit_TlsSetValue>mov dword ptr ss:[rsp+4],<high_32bit_TlsSetValue>retadd rsp,20push rbxpush rbppush rsppush rsipush rdipush r8push r9push r10push r11push r12push r13push r14push r15call @lable2 //e8 00 00 00 00@lable2:add dword ptr ss:[rsp],12push <low_32bit_user_define_function>mov dword ptr ss:[rsp+4],<high_32bit_user_define_function>retpop r15pop r14pop r13pop r12pop r11pop r10pop r9pop r8pop rdipop rsipop rsppop rbppop rbxpop rdxpop rcxpop raxnop //复制原地址被破坏的指令到这里nopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnopnoppushfqpush raxpush rcxpush rdxsub rsp,20mov ecx,<TlsValue_for_register>xor rdx,rdxcall @lable3 //e8 00 00 00 00@lable3:add dword ptr ss:[rsp],12push <low_32bit_TlsSetValue>mov dword ptr ss:[rsp+4],<high_32bit_TlsSetValue>retadd rsp,20pop rdxpop rcxpop raxpopfqpush <low_32bit_jmpbackAdr>mov dword ptr ss:[rsp+4],<high_32bit_jmpbackAdr>ret
x86的中转函数也没必要贴了,搜索一下满地都是。
利用代码就不贴了,需要成品的可以到零日论坛下载:http://www.jmpoep.com/thread-1053-1-1.html
0 0
- hook模板x86/x64通用版(2)--中转函数的shellcode编写
- hook模板x86/x64通用版(1)--x64下的jmp远跳、远call指令
- hook模板x86/x64通用版(3)--CHook.h说明
- hook模板x86/x64通用版(4)--CHook.cpp说明
- Powerful x86/x64 Mini Hook-Engine
- 关于C#编写x86与x64程序的分析
- 关于C#编写x86与x64程序的分析
- 关于C#编写x86与x64程序的分析
- detours, x86 kernel hook 以及 x64 kernel hook
- detours, x86 kernel hook 以及 x64 kernel hook
- detours, x86 kernel hook 以及 x64 kernel hook
- 使用x86的detours库编写hook-dll
- shellcode的初步编写
- 编写"优美"的SHELLCODE
- 编写shellcode的全过程
- 编写"优美"的SHELLCODE
- Shellcode的编写
- Shellcode的编写
- error C2664: “atio”: 不能将参数 1 从“WCHA [260]”转换为“const char *”
- ubuntu 14.04 下intel 3160 3165 7260和7265无法驱动问题
- Nodejs学习笔记之从bodyParse来看app.use()
- Windows平台下CodeBlocks+Wxwidgets开发环境搭建
- 如何手工释放linux内存
- hook模板x86/x64通用版(2)--中转函数的shellcode编写
- 浏览器-页签显示图片
- python中tuple/list/dict/set常用方法
- MoveWindow的问题
- 算法导论22章基本的图算法 思考题总结
- mytop安装,使用mytop监控MySQL性
- iOS与JS交互实战篇(ObjC版)
- Java基础整理-Java试题(一)
- iOS 关闭键盘 退出键盘 的5种方式