我正在寻找一种逆向工程工具或一种将现有的android本机代码反编译为人类可以理解的格式而不是汇编语言的方法。任何人都可以建议我,因为我需要取消阻止我的优先任务之一。

预先感谢。

评论

谢谢Mialwl ..尽管它基于ARM,但我们也可以通过hex-rays获得Android的操作码。

这是没有意义的。 Hex-rays是反编译器,它将为您提供类似C的代码(如果可行)。

您是指编译到APK中的.so文件吗?

#1 楼

ida pro + hexrays for arm。

IDAPro是适用于许多处理器和文件类型的最佳反汇编工具。
HexRays ARM-IDAPro的插件(无法单独工作),试图对汇编器进行反编译到类似C的源代码

都不都是免费的

https://www.hex-rays.com/index.shtml

评论


请通过链接和说明改善您的答案。

–天使
2013年12月16日上午8:05

#2 楼

获取Android NDK并解压缩。如下使用objdump

android-ndk-r9d\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\arm-linux-androideabi\bin\objdump.exe -d libinquestion_jni.so > libinquestion_jni.txt 


尝试不同的反汇编程序时,我发现它们无法解码每个字节序列,甚至更糟的是,它们可能会错误地解码。让您想知道它是如何工作的。不同的ARM具有不同的指令集,并为其使用重叠的字节编码。来自Android NDK的objdump是Android产品中使用的CPU的完美匹配,并且是免费的。

评论


是否可以将输出重新编译为ready .so文件?

– Arsen Zahray
2014年11月13日15:03

相对偏移量无法与整数区分开,因此这样做毫无意义。您将要生成相同的文件,或者将无法生成文件,因为反汇编程序无法使更改已编译的代码变得更加容易。我还没有完全估计转储,但是从我看来,它不应该按原样编译。未注释人类可读的注释,例如“ Dissection of .plt:”,因为它们应该在实际的汇编程序源中。

–OCTAGRAM
2014年11月14日6:15



#3 楼

最简单的方法是先将APK传输到jar文件中,然后使用您喜欢的java反编译器(例如jd-gui)对代码进行反编译。您的Android应用程序。甚至还有一份用户指南,准确解释了您需要做什么。

评论


但是我正在寻找的应用程序是本机进程,而不是APK。本机进程是用C ++开发的

–msk
2013年12月19日下午2:30

dex2jar是否会反编译本机代码?

– IgorGanapolsky
16年11月1日在14:57

dex2jar不会反编译本机代码。它仅适用于托管Java代码。

–郝阮
17年7月7日在13:38