折腾:
【未解决】从不同版本的小花生apk中反编译出包含业务逻辑代码的dex和jar包源码
期间,打算对于之前用:
sh d2j-dex2jar.sh -f com.huili.readingclub8725900.dex
但是输出很多错误,(导致)最终的jar包的java代码中出现很多:
throw new VerifyError("bad dex opcode")
从而无法看到真正的代码。
此处,打算换用其他工具,看看是否能解决此问题:
-》
下载后:
![](https://www.crifan.com/files/pic/uploads/2021/03/fa7f928311da4efdabef4139d7b40889.jpg)
参考:
* 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后即可打开界面:
![](https://www.crifan.com/files/pic/uploads/2021/03/ccdda49c68c44079b1a61010813fce69.jpg)
选择之前要转换的dex文件
![](https://www.crifan.com/files/pic/uploads/2021/03/7556a83d941546d1a107a009e9f9a8ee.jpg)
然后:
结果是类似的:
![](https://www.crifan.com/files/pic/uploads/2021/03/e4cb3f7238064a9294195e9be3dbcb40.jpg)
同样的地方,也是解析出错,无法解析:
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包后导出的源码,也有同样树状目录结构:
![](https://www.crifan.com/files/pic/uploads/2021/03/713199b6f6a74a98ad75f257dfe6f4cf.jpg)
所以这点不算优点了。
不过缺点更明显:
(1)dex2jar能正确解析的,此处却无法解析:
![](https://www.crifan.com/files/pic/uploads/2021/03/1c6c3ff3792e4a51a431f18a55357a9b.jpg)
(2)由于是实时反编译dex生成jar的java源码:
![](https://www.crifan.com/files/pic/uploads/2021/03/0be3826b93964604906805e61945effc.jpg)
导致CPU占用率奇高无比:
![](https://www.crifan.com/files/pic/uploads/2021/03/5aedd89bea1e4ac4889513a1e66e73a4.jpg)
导致mac卡死,无法正常使用。
-》放弃。
【后记20190402】
后来又去试试打开v3.4.8的apk:
效果是:
![](https://www.crifan.com/files/pic/uploads/2021/03/c9d8a3d88932458aba73387d19611455.jpg)
其中有:
![](https://www.crifan.com/files/pic/uploads/2021/03/d09a0134ca8f474b9db95308d5d2fd5b.jpg)
- com.qihoo.util
- com.qihoo360.replugin
- com.stub
-》感觉是奇虎360的加密?
-》但是之前研究结果记得是腾讯乐固legu啊
不过也去直接打开其他版本,比如v3.6.9的apk试试
![](https://www.crifan.com/files/pic/uploads/2021/03/d2b613b9149447c6aabb64e4bcd2744f.jpg)
![](https://www.crifan.com/files/pic/uploads/2021/03/6354aa34c8274e03a905b1f26ee2a67f.jpg)
-》可以看出:
v3.6.9有:
- com.tencent.StubShell
- com.tencent.bugly
- legu
- crashreport
- proguard
->就可以确定是腾讯的乐固legu加密了。
再去打开旧版本v1.5试试:
![](https://www.crifan.com/files/pic/uploads/2021/03/c3196caa73a446ffb86f66f25e3e1647.jpg)
-》
此apk:
- v1.5:没有加固
- v3.4.8:加固方式 奇虎360
- v3.6.9:加固方式 腾讯乐固legu
然后再去:
【已解决】mac中用jadx命令行CLI从apk中导出java源码
再去用JadxGUI去打开另外一个dex文件
(该dex是jd-gui,CRF,Procyon等工具可以反编译的)
![](https://www.crifan.com/files/pic/uploads/2021/03/ac5871782e55406093c68b0721851f5c.jpg)
效果:
![](https://www.crifan.com/files/pic/uploads/2021/03/0bdd75d8d90e49ba8fbab35232e86948.jpg)
-》也是很好的,没有报错,可以正确显示源代码的。
-》解析的正确性,貌似和Procyon有的一拼,都没有报错,都很完美,只是代码逻辑虽然一样,但是代码写法和结构略有不同。
去导出代码:
![](https://www.crifan.com/files/pic/uploads/2021/03/c034c5f165094fcab430fca7dae7264a.jpg)
导出速度也挺快,几十秒就好了
用VSCode打开后的效果:
![](https://www.crifan.com/files/pic/uploads/2021/03/44ee6d4fa6f6474d9ba191cdeef62741.jpg)
【后记20190403】
【部分解决】尝试把jadx和jadx-gui放到Mac中应用程序中便于点击启动Jadx
【后记20190429】
【未解决】用jadx命令行从dex文件转换出java源代码