折腾:
【未解决】从不同版本的小花生apk中反编译出包含业务逻辑代码的dex和jar包源码
期间,打算对于之前用:
sh d2j-dex2jar.sh -f com.huili.readingclub8725900.dex
但是输出很多错误,(导致)最终的jar包的java代码中出现很多:
throw new VerifyError("bad dex opcode")
从而无法看到真正的代码。
此处,打算换用其他工具,看看是否能解决此问题:
-》
下载后:
参考:
* jadx – command line version
* jadx-gui – graphical version
切换到bin目录下去运行:
➜ bin ll total 48 -rwxr-xr-x@ 1 crifan staff 5.5K 2 12 09:26 jadx -rwxr-xr-x@ 1 crifan staff 6.0K 2 12 09:26 jadx-gui -rwxr-xr-x@ 1 crifan staff 3.1K 2 12 09:26 jadx-gui.bat -rwxr-xr-x@ 1 crifan staff 2.5K 2 12 09:26 jadx.bat ➜ bin ./jadx-gui
双击 jadx-gui后即可打开界面:
选择之前要转换的dex文件
然后:
结果是类似的:
同样的地方,也是解析出错,无法解析:
public ViewHolder(com.huili.readingclub.adapter.BookListAdapter r1, android.view.View r2) { /* // Can't load method instructions: Load method exception: bogus opcode: 00f7 in method: com.huili.readingclub.adapter.BookListAdapter.ViewHolder.<init>(com.huili.readingclub.adapter.BookListAdapter, android.view.View):void, dex: */ throw new UnsupportedOperationException("Method not decompiled: com.huili.readingclub.adapter.BookListAdapter$ViewHolder.<init>(com.huili.readingclub.adapter.BookListAdapter, android.view.View):void"); }
不过树状的显示效果,很明显是很方便查看,是很好用的。
->后来发现,jd-gui打开jar包后导出的源码,也有同样树状目录结构:
所以这点不算优点了。
不过缺点更明显:
(1)dex2jar能正确解析的,此处却无法解析:
(2)由于是实时反编译dex生成jar的java源码:
导致CPU占用率奇高无比:
导致mac卡死,无法正常使用。
-》放弃。
【后记20190402】
后来又去试试打开v3.4.8的apk:
效果是:
其中有:
- com.qihoo.util
- com.qihoo360.replugin
- com.stub
-》感觉是奇虎360的加密?
-》但是之前研究结果记得是腾讯乐固legu啊
不过也去直接打开其他版本,比如v3.6.9的apk试试
-》可以看出:
v3.6.9有:
- com.tencent.StubShell
- com.tencent.bugly
- legu
- crashreport
- proguard
->就可以确定是腾讯的乐固legu加密了。
再去打开旧版本v1.5试试:
-》
此apk:
- v1.5:没有加固
- v3.4.8:加固方式 奇虎360
- v3.6.9:加固方式 腾讯乐固legu
然后再去:
【已解决】mac中用jadx命令行CLI从apk中导出java源码
再去用JadxGUI去打开另外一个dex文件
(该dex是jd-gui,CRF,Procyon等工具可以反编译的)
效果:
-》也是很好的,没有报错,可以正确显示源代码的。
-》解析的正确性,貌似和Procyon有的一拼,都没有报错,都很完美,只是代码逻辑虽然一样,但是代码写法和结构略有不同。
去导出代码:
导出速度也挺快,几十秒就好了
用VSCode打开后的效果:
【后记20190403】
【部分解决】尝试把jadx和jadx-gui放到Mac中应用程序中便于点击启动Jadx
【后记20190429】
【未解决】用jadx命令行从dex文件转换出java源代码