在逆向工程程序时,我经常会发现如下所示的功能。这个函数特别有一组嵌套的 if/else 块(粉红色框),通常很容易理解。然而,当代码在蓝框处执行时,代码会变得混乱并且可以采用两个独立的代码路径(紫色或黄色)中的任何一个。如果开发人员为紫色或黄色代码块使用了一个函数(或未使用内联函数),则此代码将更容易逆向工程。作为一个函数,我可以对代码块进行重命名和注释,整个程序变得更容易阅读。
当我遇到这种函数时,我常用的技术是将颜色应用于代码块,如下图所示。IDA 有没有办法将任意代码块集合视为未调用的函数和/或是否有更好的方法来处理内联代码和独立代码块?