我试图在静态分析中使用 ida pro 对 android ndk(arm)进行逆向工程。但是,似乎有很多无用的跳转到同一个地方,并且随机值设置为 R1 以进行比较和再次跳转。像下图。几乎每个函数都在做类似的事情——首先初始化(比如推送寄存器之类的东西),然后它跳转到某个地方的代码(比如图片的右上角),将随机值加载到 R1 寄存器并将其与 R0 进行比较并执行跳转,但它总是会再次跳回到上角
这是另一种情况,似乎 loc_FFBA 和它的后续分支充当了一个大开关,但没有意义的是几乎每个分支最终都会再次跳回 loc_FFBA。可以有一个流程 red->green->blue->red, 但它甚至没有意义...你可以看到蓝色的跳转甚至没有用,因为如果它需要跳转到蓝色 (R0>0x6fe5e521),它肯定会跳到红色(R0>0x661cf941)......
我的问题是,这是作者故意这样做以防止逆向工程吗?如果是这样,它是如何实现的?对我来说,听起来作者在他的 C++ 代码中需要很多 if-else 和 goto 子句,但这也会减慢开发速度,因为他可能会混淆自己......而且似乎不是 .so ndk已打包,因为通过使用调试器,我发现它实际上所做的通常只是将资源文件解码为 apk 并动态加载它,但所有解密都是通过调用 JNI 函数进行 AES 解密以加载 APK 来完成的,而不是在 C++ 中进行,所以混乱的跳转似乎也与解密无关......
如果这真的是故意混淆,也许有某种编译器会生成垃圾?