-
-
[原创]IDA静态逆向分析模型原理透析
-
发表于:
2021-3-20 19:39
10535
-
对原理的分析和学习,可以加深我们对技术的认知,同时,我相信技术的本质都有共同性。当我们掌握了它,是可以达成事半功倍的效果。
逆向分析的目标是理解一个系统中软件以便更容易地进行增强功能、更正、增加文档、再设计或者用其他的程序设计语言再编码。
下面是我通过搜集的资料,给大家分享一个关于IDA进行静态逆向分析的规则框架。
如上图所示,该模型框架分为预处理模块、函数识别模块、类识别模块、异常处理识别模块、综合分析模块。其中,预处理模块,是对二进制可执行代码进行反汇编和初步分析,去除软件保护机制,初步识别PE文件格式、资源及导入导出表、程序入口等信息。函数识别模块用于识别系统库函数和用户函数,包括对变量、表达式、语句、函数传参调用和函数执行流程的分析。类识别模块用于识别存在于二进制文件中的类布局、对象结构、RTTI信息、this指针的使用,从而分析出成员变量和成员函数,推导出原始的类结构。异常处理模块用于识别二进制可执行代码中存在的异常处理信息,包括SEH和C++异常。综合分析模块对于上述的三个模块的处理进行综合分析,推导出二进制可执行代码对应的源代码、软件架构、算法、设计模式和文档。
或许上面的内容,看不懂,然后这里有另一张详细模型。(这张图,可以详细解释IDA静态逆向分析模型)
这里我对上图的内容进行一个简单的解说。为了便于分析可执行代码,去除程序保护,需要先用外壳探测程序获得目标程序所用保护的类型,然后针对该类型使用解包器、破解、脱壳、调试、内存转储等,将实际执行的代码剥离出来。对于打包器或者加壳工具对源程序和导入表造成的破坏有,还需要我们使用相应的工具来恢复。
分析前处理,还可以识别程序编写的语言,这有助于程序内用到的编程语言相关的库函数的签名识别。
一般手工分析程序编写语言可以通过剖析入口点特征,能快读定位编程语言,甚至编写库。另外还有一种可能,就是入口点只是一层语言外壳。所以更通用的方式是使用IDA等专业工具的库函数签名机制。
[注意]APP应用上架合规检测服务,协助应用顺利上架!