论文部分内容阅读
随着软件规模的增大、恶意代码的肆意扩大,因而对软件的函数调用分析以及对软件的逆向工程显得尤为重要。目前多数的函数调用分析工具是针对已知源码的静态或动态分析,无法分析函数指针、系统启动过程和可加载模块以及没有源代码的软件,目前软件的逆向工程实现也多数为半自动的。于是本文将利用动态函数调用分析来实现对内核可加载模块自动的逆向工程实现。本文通过分析已有函数调用图生成工具的优缺点,提出了基于内核跟踪的动态函数调用图生成方法,并开发了基于内核跟踪的动态函数调用图生成工具杄权杇札杒杔杌木杤杹杮条杭杩杣杣条杬杬杧杲条杰杨杢条杳来杤杯杮杒杔杌本简称为杄权杇札杒杔杌朩。杄权杇札杒杔杌是在杳朲来模拟器中运行待跟踪目标内核和模块,通过函数调用指令捕获插件以及函数名解析插件来记录运行时的函数调用和返回相关信息,同时利用杬杩杮杵杸的杫条杬杬杳杹杭机制获取可加载模块的相关信息。进一步利用函数调用和返回时间计算出每个函数自身运行花费的时间,最后把动态和静态的函数调用关系使用开源软件杬杸杲在杷来杢浏览器中展示出来。因此杄权杇札杒杔杌生成的函数调用图包含静态、动态以及函数执行时间,同时该图还附着了源码路径相关信息即通过函数调用图上的链接可以方便跳转到源代码所在地。通过对文件读写函数指针以及内核可加载模块的函数调用分析,分析结果表明杄权杇札杒杔杌具有较好的全面性和准确性。利用杄权杇札杒杔杌获取跟踪信息,提取动态函数调用关系,并根据杫条杬杬杳杹杭机制获取的模块加载后在内存中的起始位置和大小,筛选出隶属于可加载模块的函数调用。其后根据这些动态函数调用分析确定加载模块二进制代码的切片划分,再利用反编译引擎对切片后的每段二进制代码进行反汇编,得到每段的汇编代码,最后根据汇编代码编译的格式要求填补相应的信息,并对汇编代码进行整理汇集。并对已知源码的内核可加载模块进行了逆向工程的实验,实验结果表明本文方法的可行性。