首页
社区
课程
招聘
[原创]让Qiling框架支持结构化异常(SEH)
发表于: 1天前 577

[原创]让Qiling框架支持结构化异常(SEH)

1天前
577

最近在玩Qiling,准备调试一个很简单的32位exe文件(见附件),结果发现Qiling居然不支持结构化异常(SEH)的调试,要知道这可是很基础的功能,几乎稍微复杂一点的加密文件都会用到这个技术,所以自己动手来实现。


开始:

在附件的exe文件的0x401019处代码会试图将1写入内存地址0处,这必然会导致一个异常。

对于运行于操作系统上这会自动触发异常,但Qiling框架并不处理这种异常,所以需要我们自己手动去产生异常。


手动产生异常:

由于0x401019处代码会使Qiling产生内存访问错误,所以我们hook一下这个错误,代码如下

这段代码在exe文件的栈中生成两个对象,一个是context对象,这个对象保存当前的寄存器内容;一个是record对象,这个对象也是必不可少的。

接下来在栈中还要保存指向context对象和record对象的指针以方便0x4B2FB7A0处的代码使用,这通过两个stack_push保存。


执行完这段hook代码后,就会执行0x4B2FB7A0的代码,这是ntdll.dll文件的代码,在这段代码中会调用结构化异常处理的代码。

结构化异常的处理代码在exe文件中安装:

所以ntdll.dll处的0x4B2FB7A0会调用exe中的0x40105A处代码:

exe中的0x40105A异常处理函数会检测当前exe文件是否被调试,如果被调试则跳转到0x401023,如果没有被调试则跳转到0x401039。通过这种方法实现了exe文件的保护。下面是结构化异常处理后会调用的代码,根据exe是否被调试显示不同内容

要想让Qiling支持结构化异常还需要做一些hook工作,都是对ntdll.dll的代码做些修改:


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

最后于 1天前 被zhzhz编辑 ,原因:
上传的附件:
收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回