我正在开发一个 Android 应用程序,出于安全原因必须对其进行混淆。我的 C++ 代码中使用了 R8 混淆的一些类和字段,因此混淆步骤当然会破坏这部分代码。
我的问题是,由于我不想只保持这些类和字段不混淆,我如何编写基于 R8 输出的
mapping.txt
自动修改 C++ 代码的脚本?
更具体地说,我在尝试解决此问题时面临的问题如下:
mapping.txt
文件,所以我如何重新排序任务或解决这个问题如有任何帮助,我们将不胜感激。
这是一个想法的火花,由你来看看它是否可行:
mapping.txt
并删除除 JNI 代码所需部分之外的所有内容。-applymapping
选项将该文件传递到 R8。这将使 JNI 符号保持混乱但稳定。其他符号仍会被随机混淆。m
表的源:inline constexpr const char * mapping(const char* in) {
std::pair<const char *, const char *> m[] = {
{"important/class","a"},
{"important/other/class", "a.b"},
};
for (const auto& [normal, obfuscated]: m) {
if (!strcmp(normal, in)) return obfuscated;
}
return "ERROR";
}
mapping("foo")
。在简短的实验中,编译器完全内联并消除了
mapping
函数,只留下混淆的类型。