首页 > 其他 > 详细

基于DuplicateHandle的反调试并查看SharpOD如何反反调试

时间:2021-02-07 23:13:09      阅读:68      评论:0      收藏:0      [点我收藏+]

基于DuplicateHandle的反调试并查看SharpOD如何反反调试

方法来源

本方法来源于NCK视频
关于里面的YzDbg可以切换X86和X64模式觉得很有意思

反调试代码如下

MessageBox(NULL, "1", "1", NULL);

HANDLE hTarget, hNewTarget;
//将当前进程的伪句柄柄转换为真实句柄赋值给自己,句柄的真实值保存在hTarget这个变量中
DuplicateHandle((HANDLE)-1, (HANDLE)-1, (HANDLE)-1, &hTarget, 0, 0, DUPLICATE_SAME_ACCESS);
// 为句柄hTarget设HANDLE_FLAG_PROTECT_FROK_CLOSE属性,设值是HANDLE_FLAG_PROTECT_FROM_CLOSE / 这一句执行之后, 句柄hTarget将禁止关闭
SetHandleInformation(hTarget, HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE);
//再一次将句柄hTarget复制给当前进程,复制后的结果保存在hNewTarget中
//其实这一句复制并没有意义,意义在于最后一个参数设置的DUPLICATE_CLOSE_SOURCE
//意思是这一句执行之后·就关闭句柄hTarget,我们之前调用了SetHandleInformation禁止关闭,那么这一句执行时候一定会报错
//什么情况下才会报错呢,当被调试器调试的时候才会报错
DuplicateHandle((HANDLE)-1, (HANDLE)hTarget, (HANDLE)-1, &hNewTarget, 0, 0, DUPLICATE_CLOSE_SOURCE);

system("pause");

操作测试

  1. 直接双击运行没有问题
  2. 使用VS调试报错如下
    技术分享图片
  3. 使用X64dbg调试程序,首先关闭SharpOD的选项
    技术分享图片
    运行弹出信息框
    技术分享图片
    之后点击信息框报错如下
    技术分享图片
    打开SharpOD的选项如下
    技术分享图片
    之后程序正常运行没有报错
    技术分享图片

查看Hook位置过程

  1. 首先使用X64dbg运行程序,弹出信息框以后脱离附加
  2. 使用YzDbg进行附加
    通过kernel32模块找到DuplicateHandle下断
    技术分享图片
    之后运行程序,点击信息框,断下如下图
    技术分享图片
    之后单步步入该函数
    技术分享图片
    之后一直单步,过了jmp far以后注意切换X64
    技术分享图片
    发现Wow64SystemServiceEx前面多了一些nop
    技术分享图片
    进入Wow64SystemServiceEx函数
    技术分享图片
    遇到的第一个call进入
    技术分享图片
    继续进入ntdll的NtDuplicateObject函数
    技术分享图片
    发现此处被HOOK了
    技术分享图片

结论

直接查看64位的ntdll
技术分享图片
相当于64位ntdll模块的NtDuplicateObject导出函数被HOOK了
技术分享图片

拓展

https://www.cnblogs.com/this-543273659/archive/2013/03/04/2943380.html

基于DuplicateHandle的反调试并查看SharpOD如何反反调试

原文:https://www.cnblogs.com/fengtao918/p/14386680.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!