【原创软件-PE分析小工具开发流水账(一)】此文章归类为:原创软件。
最近想开发一个可以查看PE文件各字段值的小工具,虽然GitHub上肯定能找到很多这样的很厉害的工具,很多现代工具也集成了这样的功能,但我其实只是想作为学习项目来开发一个这样的小工具。
1.项目目标
内核:C++
界面:使用平台API
基本功能:解析一个PE文件的各个字段,并在文件被混淆、加壳等异常情况时成功报错。
扩展功能:处理特定壳处理过的PE文件,不是那种很复杂的,就比如UPX这种压缩壳啊,或者其他的一些简单壳。
2.当前设计思路
这是我初步设计的一个工作图:

3.一些问题
刚开始设计时只设计了三个阶段,但是编写时发现一个问题:它非常不好维护,而且在分析中将集成各种情况。我想把他们分开,但发现PE文件的分析本来就是依赖各种字段,有严重的上文依赖性。于是就设计了现在的这个框架,将原本的分析工作分成了三个阶段,在第一个阶段中完成全文件的初步解析,并储存上文依赖字段,第二个阶段完成扩展壳特征分析,第三个阶段为添加壳的字段解析功能。
存储上我建了一个数据类来专门存储保存的结果,这个结果除了存了PE文件的结构体和对应的各种字段,也存储了阶段一找到的异常信息,然后也方便后期输出内容。
目前我正在完成阶段一的初步诊断和存储功能,也遇到一些问题,就是怎么减少字段的依赖问题,比如节区数量,万一那个字段被修改,我怎么添加其他的方法来多重验证。。。
我还纠结了很多设计问题,个人在设计上偏向于追求性能和省空间,虽然这点东西在现代的设备上没有什么影响,但是导致我的很多代码看上去很笨,而且也牺牲了一些速度上的东西,比如我是将文件拆解一段一段读取的,使用了一个复用缓冲区,复用缓冲区体积小,但是多次在内存和磁盘直接读写。
好多问题……如果有一天我真能做完,我就最终把它开源。
更多【原创软件-PE分析小工具开发流水账(一)】相关视频教程:www.yxfzedu.com