您的位置:首页 > 移动开发 > Android开发

android开发笔记之APK反编译(二) jadx

2017-09-27 13:55 375 查看


jadx的github地址:

jadx

使用说明

安装

依次运行以下命令:

git clone https://github.com/skylot/jadx.git cd jadx
./gradlew dist


主要是拉下来jadx的git主工程,然后跑对应的gradle task。之后会生成运行脚本,大概就是多出了build目录。

运行

cd build/jadx/
bin/jadx -d out lib/jadx-core-*.jar
#or
bin/jadx-gui lib/jadx-core-*.jar


以上命令是git给出的运行示例,主要就是反编译jadx源码的一个jar包。

以上命令可能会报一些错误,但是没有关系,不要管它,没有问题,是可以正常使用的。

我们再进入到目录build/jadx/bin:

cd bin/
./jadx-gui


就可以启动jadx了。(当然你也可以直接双击jadx-gui文件启动jadx),如下图:



我们可以选择File—Open file对应选中你想反编译的.dex, .apk, .jar or .class即可,我们继续反编译ApeAppLock.apk。

查看AndroidManifest.xml



可以看出,可以完美的反编译。

查看源码



可以看出,反编译的源码基本上是可读的。

查看多国语言的字符串



可以看出,可以完美的反编译。

查看res资源



可以看出,可以完美的反编译res目录下的资源文件和图片。

支持全局text查询

Navigation–Text Search:



支持全局class查询

Navigation–Class Search:



支持导出gradle工程

可以用as直接看反编译的工程

总结

1.操作方便快捷,一步到位

2.有较为完善的gui界面,带有较多实用功能

3.反编译代码可读性高

总体来说jadx还是反编译工具的最佳选择。

备注

我使用其反编译7.1的GMS包中的Chrome.apk,结果是完美反编译。

但是啊,7.0之后的GMS包中的开机向导应用SetupWizard.apk,我一直反编译不成功,看到这个工具,我好开心,感觉有戏。但是,希望越大,失望也是越大。测试结果表明,反编译失败。这…………。看来没有万能的东东啊。

反编译报错信息:

Exception in thread "AWT-EventQueue-0" com.android.dex.DexException: Unexpected magic: [100, 101, 120, 10, 48, 51, 55, 0]
at com.android.dex.TableOfContents.readHeader(TableOfContents.java:79)
at com.android.dex.TableOfContents.readFrom(TableOfContents.java:69)
at com.android.dex.Dex.loadFrom(Dex.java:156)
at com.android.dex.Dex.<init>(Dex.java:96)
at jadx.core.utils.files.InputFile.loadFromZip(InputFile.java:94)
at jadx.core.utils.files.InputFile.searchDexFiles(InputFile.java:56)
at jadx.core.utils.files.InputFile.addFilesFrom(InputFile.java:34)
at jadx.api.JadxDecompiler.loadFiles(JadxDecompiler.java:121)
at jadx.api.JadxDecompiler.loadFile(JadxDecompiler.java:111)
at jadx.gui.JadxWrapper.openFile(JadxWrapper.java:32)
at jadx.gui.ui.MainWindow.openFile(MainWindow.java:192)
at jadx.gui.ui.MainWindow.openFile(MainWindow.java:185)
at jadx.gui.ui.MainWindow.open(MainWindow.java:147)
at jadx.gui.JadxGUI$1.run(JadxGUI.java:29)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)


参考资料

1.jadx 反编译apk

http://blog.csdn.net/sp6645597/article/details/51319413

2.jadx

https://github.com/skylot/jadx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 反编译 jadx