现在的位置: 首页 > 综合 > 正文

某同学的inline hook检测程序简单逆向分析

2013年01月19日 ⁄ 综合 ⁄ 共 1127字 ⁄ 字号 评论关闭
 

测试了下,主机上完全不行,虚拟机上运行成功过一次,然后运行了其他的ARK就BSOD的了。没有具体的分析dump文件;检测inline hook的结果不是很完善,且有一部分的错误. 简单说说我对程序的静态分析吧:

1. EXE运行后,得到NtQuerySystemInformation函数地址,传递SystemModuleInformation号获取系统模块信息,取得系统的基址和大小,并显示出来 - MoudleName,BaseAddress,ImageSize
2. 把ntoskrnl用LoadLibrary加载到内存中,方便后面的和内存对比分析
3. 调用GetProcAddress得到KeServiceDescriptorTable的地址,总数
4. 从资源释放SYS到C:/,并加载,删除
5. 对于2中的文件的每个节,调用总函数checkInlineHook进行对比检测
6. 卸载驱动,DONE
----------------------------------------------------------------------
                              对于checkInlineHook函数,如下:

1. 对于当前节,向驱动发送IOCTL_222010_AllocateMDL,申请一块32字节(8字节?没具体的看)的内存;若不成功,在返回的UserBuffer中包含INVALID信息,则退出程序;否则发送IOCTL_222008_FreeMdl将8字节的内存放到OutputBuffer中。

2. 一个小循环,调用一个巨大的反汇编引擎(InlineHookCheckEngine)进行检测。若当前非E9,还进行深度递归检测(相当繁琐,看了一半放弃了)。。。

3. 若检测出异常,调用一个总的打印函数打印出来:Proxy_asmEngine("_inline_[%0.8X]: %s", inlineAddr, &jmpAddr);

4. 根据InlineHook的地址,从NTDLL中得到此时的函数名/地址:
GetFuncName(inlineAddr, (int)&inline_functionName);
若能得到,即显示出来,否则显示为[UnknownArea]

----------------------------------------------------------------------

       因为能力有限,之前也没做过相关的检测INLINE HOOK的程序,所以对此部分也很生疏。而且反汇编引擎太强大太复杂,从此同学给的EXE来分析,也不是很好得出程序出错原因...
太菜了,弄了下,也只能到这个程度,帮不上忙了哈...

抱歉!评论已关闭.