英文原版:4a6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4@1M7X3q4*7P5X3g2J5k6g2)9J5k6h3y4G2L8g2)9J5c8Y4m8S2M7r3g2J5M7#2)9J5c8V1c8W2P5p5g2V1N6h3y4S2N6r3W2G2L8W2)9J5k6q4m8J5j5h3y4@1K9h3y4A6L8X3N6e0j5h3k6W2c8r3g2^5i4K6u0W2M7r3c8X3
该文章发表于Black Hat 2012,虽然内容不够新鲜,也许好多方法目前已经失效,但是仍然会给我们反逆向方面很多的启示!
Android反逆向分析的目标:
Baksmali - 使用最广泛的DEX反编译工具 (apktool/antilvl等使用)(3b3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8$3c8W2i4K6u0W2k6$3!0G2k6$3I4W2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8Y4y4E0j5h3I4A6i4K6u0r3i4@1g2r3i4@1u0o6i4K6R3&6
dex2jar - 可以把DEX反编译成jar的工具,然后通过JD-GUI查看。(008K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4G2k6r3g2Q4x3X3g2Y4L8$3!0Y4L8r3g2Q4x3X3g2U0L8$3#2Q4x3V1k6H3i4K6u0r3k6r3g2^5x3X3A6S2M7W2)9J5c8W2!0q4c8W2!0n7b7#2)9^5z5b7`.`.
IDA Pro - (这个就不在介绍了吧!)(bdbK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3K9h3&6V1k6i4S2Q4x3X3g2K6K9s2c8E0L8q4!0q4c8W2!0n7b7#2)9^5z5b7`.`.
androguard - 也是比较流行的。(c7cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8$3c8W2i4K6u0W2k6$3!0G2k6$3I4W2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8X3q4F1k6s2u0G2k6%4g2S2M7X3c8Q4x3V1k6Q4c8f1k6Q4b7V1y4Q4z5o6V1`.
1、构建DEX link section触发baksmali工具崩溃(DEX文件结构请查看9a7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3j5h3&6V1M7X3!0A6k6s2y4W2j5%4g2J5K9i4c8&6i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5^5y4U0j5@1y4K6M7^5i4@1g2r3i4@1u0o6i4K6R3&6
由于baksmali工具不支持DEX文件的link section,所以我们可以构建DEX link section触发baksmali工具奔溃。如下图:
[java] view plaincopy
1201 // Load 0 into v1
3801 0300 // A conditional jump which should always succeed, jumps over
// next bytes
FFFF // Bad opcodes
安装插入无效字节码的apk文件。如下图:
[cpp] view plaincopy
1201 // Load 0 into v1
3801 0300 // A conditional jump which should always succeed, jumps over
// next bytes
1a00 FF00 // Load const-string at index 255 (doesn’t exist)
这次我们仍然绕过Dalvik运行时字节码指令验证,但是我们替换“无效字节码指令”为合法字节码指令