-
-
[原创]让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编辑
,原因:
赞赏记录
参与人
雪币
留言
时间
AEVE
感谢你分享这么好的资源!
40分钟前
马来
为你点赞!
6小时前
Foodie
你的帖子非常有用,感谢分享!
6小时前
新气象
感谢你的贡献,论坛因你而更加精彩!
22小时前
赞赏
他的文章
谁下载
赞赏
雪币:
留言: