首页
社区
课程
招聘
[原创]基于SEH的静态反调试(实例分析)
发表于: 2021-5-2 23:22 9406

[原创]基于SEH的静态反调试(实例分析)

2021-5-2 23:22
9406

程序在附件中,后续会更新基于SEH的动态反调和动静结合的反调
学知识ing

该实例是利用异常机制检查PEB的BeingDebugged(+0x2)从而实现反调试

先大致运行和调试一下

就是弹出一个窗口
图片描述

拖入x32dbg中进行调试

程序除了拖入之后在入口的断点处停下,再次F9的时候,会在如下地方停下,然后我们shift+F9,将程序发生的异常派发给程序自身处理
图片描述

之后就会弹出窗口
图片描述

可以发现这和我们之前正常运行时产生的代码不同(其实这是正常程序自己发生异常后,先调用了自生的SEH异常处理器处理的结果,在处理该异常的那个异常处理器中含有反调试代码,会造成程序有不同的结果)

使用PEview查看代码的入口点(是程序关键代码,不是EP)

图片描述

得到为0x401000(对于exe来说一般这个默认的基地址是对的)

然后我们将程序拖入,从代码入口处开始分析(OD颜色好看些,这里就用OD吧)

图片描述
首先这三行,是在安装SEH新的SEH异常处理器

先压入这一个SEH异常处理器的地址,然后再压入原先程序SEH链的第一个SEH处理器的地址,最后将esp栈顶地址设置为新的SEH链的首地址

再往下

这两行向地址0(非法地址)处写入1,触发了内存访问异常(0xC0000005)

再往下

这里是调用那个调试时弹出的窗口的代码

跳转到0x0040104D

这里是程序正常运行的时候调用的MessageBoxA弹出的窗口代码

前两行就是删除SEH链的第一个SEH异常处理器

弹出第一个异常处理器(_EXCEPTION_REGISTERATION_RECORD)结构体的第一个成员,即指向下一个SEH异常处理器的指针,然后add esp,0x4,删除了异常处理函数的地址

最后retn退出程序

这里就是安装的那个SEH异常处理器的异常处理函数

mov esi,dword ptr ss:[esp+0xC] 将异常处理函数第三个参数:指向CONTEXT结构体的指针mov给esi

mov eax,dword ptr fs:[0x30] 将PEB地址给eax

cmp byte ptr ds:[eax+0x2],0x1 将PEB的偏移为0x2的BeingDebugged成员和1进行比较

(如果是1代表在调试,如果是0代表没调试)

下面就分别对应调试了和没调试的两种情况

[esi+0xB8]这个就是CONTEXT结构体偏移0xB8的成员,代表的EIP

执行完这个异常之后,会返回程序的这个地址处继续执行

汇编至此分析完毕(其实就是一个安装SEH中的检测PEB.BeingDebugged的反调试)

将程序拖入,调试器会暂停在EP处,这里调试器暂停在EP处就是利用了int3(0xCC)

图片描述

然后再次F9,直达那个内存访问异常处(程序处于调试状态,会将异常先派发给调试器处理,调试器会先暂停在异常地址处)

图片描述

x32dbg和od都可以查看程序的SEH链

图片描述

这里找到第一个SEH异常处理器(我们在代码入口处安装的那个),地址为0x40105A

我们分析汇编代码之后,在这个cmp的地方下个断点
图片描述

让程序执行完 0040105E | 64:A1 30000000 | mov eax,dword ptr fs:[30]

之后我们将异常派发给程序之后,在断点处停下后,查看eax的值便可以得到PEB的地址

我们按shift+f9将异常派发给程序,然后就会停在第一个SEH异常处理函数我们下的断点处

查看eax的值

图片描述

0x240000

内存窗口中跳转到PEB然后修改BeingDebugged(+0x2)的值

图片描述
改为0即可

然后我们F9运行程序

就可以发现已经恢复到正常运行时弹出的窗口

图片描述

 
 
 
 
 
 
 
 
 
 
00401000   68 5A104000   push static_s.0040105A    
00401005   64:FF35 00000>push dword ptr fs:[0]
0040100C   64:8925 00000>mov dword ptr fs:[0],esp
00401000   68 5A104000   push static_s.0040105A    
00401005   64:FF35 00000>push dword ptr fs:[0]
0040100C   64:8925 00000>mov dword ptr fs:[0],esp
栈如下:
                (esp)原先seh首地址
                     0x0040105A
栈如下:
                (esp)原先seh首地址
                     0x0040105A

[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-5-2 23:35 被SYJ-Re编辑 ,原因:
上传的附件:
收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 5930
活跃值: (3640)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
附件过期了,大佬能给一个下载链接吗?
2023-3-30 15:09
0
雪    币: 3672
活跃值: (9815)
能力值: ( LV9,RANK:319 )
在线值:
发帖
回帖
粉丝
3
XiaozaYa 附件过期了,大佬能给一个下载链接吗?
 f1eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8%4N6@1M7X3q4F1M7$3k6W2M7W2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5&6y4e0R3^5k6X3g2X3z5e0k6S2k6X3x3@1y4g2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4c8e0N6Q4z5o6u0Q4b7U0W2Q4c8e0g2Q4z5o6N6Q4b7V1u0Q4c8e0W2Q4z5e0y4Q4b7V1g2Q4c8e0k6Q4z5p5g2Q4b7e0g2Q4c8e0k6Q4z5f1k6Q4b7e0g2Q4c8e0N6Q4z5f1y4Q4z5p5u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4K6g2n7i4K6t1$3L8X3u0K6M7q4)9K6b7Y4y4@1j5i4c8A6j5#2)9#2k6Y4y4W2K9q4)9#2k6X3q4F1N6r3W2Q4y4h3k6V1k6h3u0#2k6#2)9J5k6h3g2^5k6g2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4y4f1c8Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3^5i4K6V1$3i4@1f1^5i4@1q4q4i4@1u0r3i4@1f1&6i4K6V1%4i4@1q4q4i4@1f1#2i4@1p5#2i4@1t1$3i4@1f1%4i4K6R3&6i4K6W2n7i4@1f1#2i4@1u0r3i4@1q4n7i4@1f1@1i4@1u0o6i4@1p5H3i4K6t1$3L8X3u0K6M7q4)9K6b7X3y4G2N6%4c8J5j5h3&6K6k6X3g2J5i4K6u0W2j5$3!0E0i4K6t1$3L8X3u0K6M7q4)9K6b7W2!0q4z5q4!0n7c8g2)9&6x3#2!0q4y4g2)9^5y4g2!0m8y4g2!0q4y4q4!0n7b7#2!0m8x3q4!0q4z5q4!0n7c8g2)9&6x3#2!0q4y4g2)9^5c8W2!0m8x3#2!0q4y4q4!0n7b7W2!0m8y4q4)9J5y4X3&6T1M7%4m8Q4x3@1u0T1k6s2m8E0k6i4A6Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1f1$3i4K6W2r3i4@1p5#2i4@1f1%4i4K6W2o6i4K6S2n7i4@1g2r3i4@1u0o6i4K6W2n7
2023-4-4 11:22
0
游客
登录 | 注册 方可回帖
返回