通过Hook NtOpenProcess 函数实现反调试

摘要:
NtOpenProcess,查看要hook的字节数,push0x0c4h,正好五个字节,不用太多修改。    2)过滤函数实现思路:    ①计算跳转地址:原函数地址+偏移=跳转函数地址,因此,很容易计算出偏移=跳转函数地址-原函数地址。      callMyOpenProcess;cmpeax,0;//我处理成功了,其直接进行修改popad;jz__end;//原来被替换的代码push0x000000C4;jmpretOpenProcessAddr;__end:moveax,0;ret0x10;  3)伪造NtOpenProcess函数    我们通过进程ID来判断是否是需要保护的进程,如果是需要保护的进程并且不是自己和系统调用,则直接返回。

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

通过Hook NtOpenProcess 函数实现反调试

1. Hook思路设计

2. Hook NtOpenProcess函数

3. 效果演示

1. Hook思路设计

  我们在Hook一个函数时,其jmp到原来的地址,具体操作如下:

  其实在后期,我们将原函数的执行代码修改为回调函数,在回调函数内部来恢复原来函数即可。

  通过Hook NtOpenProcess 函数实现反调试第1张

2. Hook NtOpenProcess函数(代码2-5)

  现在我们Hook NtOpenProcess函数,实现进程保护,比如,OD、CE打开时,必须调用该函数来获取句柄,

  1)查看Hook的内容

    我们使用 windbg u nt!NtOpenProcess ,查看要hook的字节数,push 0x0c4h,正好五个字节,不用太多修改。

    通过Hook NtOpenProcess 函数实现反调试第2张

2)过滤函数实现思路:

    ① 计算跳转地址:原函数地址 + 偏移 = 跳转函数地址,因此,很容易计算出 偏移 = 跳转函数地址-原函数地址。

    ② 备份原函数代码,pushad

    ③ 参数压栈

      这里是需要一定技巧的,pushad是压入八个寄存器,之后栈变化,因此我们要 push [esp,0x30] 连续四次

      通过Hook NtOpenProcess 函数实现反调试第3张

    ④ 在调用有关函数之后,判断函数正常返回还是直接跳转。

       call MyOpenProcess;
cmp eax, 0; // 我处理成功了,其直接进行修改
popad;
jz __end;
// 原来被替换的代码
push 0x000000C4;
jmp retOpenProcessAddr;
__end:
mov eax, 0;
ret 0x10;

  3)伪造NtOpenProcess函数

    我们通过进程ID来判断是否是需要保护的进程,如果是需要保护的进程并且不是自己和系统调用,则直接返回。

    通过Hook NtOpenProcess 函数实现反调试第4张

3. 测试效果

我们以计算器为例,测试其效果如下,明显无法打开被调试进程。

  通过Hook NtOpenProcess 函数实现反调试第5张

免责声明:文章转载自《通过Hook NtOpenProcess 函数实现反调试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IT面试技巧(2)fio 2种画图方法 fio_generate_plots 和 gfio下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ipadmini从9.3.5降级8.4.1并完美越狱

ipadmini之前是iOS9.3.5实在是卡的用不了,于是打算降级,但是尝试了包括改版本描述等很多方法一直失败。今天突然成功降级8.4.1并且完美越狱,运行流畅了非常多。方法如下:打开网址:https://www.i4.cn/news_detail_18447.html,下载对应设备的8.4.1自制固件,一般的固件是不可以的。...

Qt 调用本地浏览器打开URL

单击一些Qt控件以查找本地浏览器传递的URL以打开前端。...

Jenkins安装

1、 Jenkins简介1.开源自动化持续集成和部署平台CI、持续集成CD和持续部署2.Jenkins Free风格任务管道Maven项目多配置项目多分支管道任务支持的任务类型,不会执行任何更新;触发器(由Gitlab...

JQuery 导入导出 Excel

正在做一个小项目,从数据库中查询数据放在HTMLTable中.现在想要从这个table中导出数据来.另外用户需要选择导出的列.使用jQuery的导出插件可以完成这个需求.jQueryPlugintoExportHTMLTables例子:导入插件:[javascript]viewplaincopy˂/scr...

SpringBoot工程通过Maven引入自定义Jar包

A工程为:common工程打成jar包:common-0.0.1-SNAPSHOT.jar注意:A工程打包时要使用maven的插件进行打包,不然会打成SpringBoot的Jar包,无法使用。--字符集编码--˃打包时跳过测试配置1.8˂!...

如何下载Chrome离线版EXE安装文件和MSI版安装文件

对于Chrome的稳定版本(官方版本),您只需添加“?”在Chrome的“最终用户许可协议”页面上的链接之后?Standalone=1对于Beta版和开发版Chrome,只需记住以下地址:http://dl.google.com/chrome/install/{versionnumber}/crome_安装程序中的版本号。exe表示要下载的Chrome版本号...