jar转java后报错_2.1 dex转java

本文介绍了如何使用jadx工具从dex和jar文件中导出Java源码。通过命令行或图形界面,详细步骤包括使用jadx-gui查看代码并导出,以及处理转换过程中遇到的错误。此外,还对比了JD-GUI的使用效果,并强调了jadx无法直接从jar导出Java源码的情况。
摘要由CSDN通过智能技术生成

2.1 dex转java

jadx可以直接从dex导出java源码

下载jadx

从这里下载最新版的jadx解压后得到:jadx:命令行工具

jadx-gui:带图形界面的双击即可运行

此处想要用jadx去从jar中导出代码,有两种方式:

用jadx的命令行直接导出代码

用jadx-gui查看代码,也可以再导出代码

下面详细介绍

jadx直接导出代码

切换到要导出代码的目录,已有dex文件要导出,则可以直接运行:

语法:

bin/jadx dex_file.dex -d output_folder

举例:

jadx-0.9.0/bin/jadx dex_file.dex -d .

../../../../../../reverse_engineering/jadx/jadx-1.0.0/bin/jadx ../../apk_to_dex/com.ishowedu.child.peiyin/com.ishowedu.child.peiyin8392664.dex -d com.ishowedu.child.peiyin8392664_java

../../../../../reverse_engineering/jadx/jadx-1.0.0/bin/jadx ../dex_to_jar/com.ishowedu.child.peiyin9201516-dex2jar.jar -d .

即可转换出源代码到当前目录下,输出有:

resources

sources有你要的源码

转换速度还是不错的。

举例

from_v3.4.8_dex /Users/crifan/dev/dev_tool/android/reverse_engineering/jadx/jadx-0.9.0/bin/jadx ../../../../../xiaohuasheng/app_hook_dump_dex/FDex2/v3.4.8/com.huili.readingclub8825612.dex -d .

...

中间很多错误

...

WARN - Found 75 references to unknown classes

ERROR - 6 errors occurred in following nodes:

ERROR - Method: android.support.v4.provider.FontsContractCompat.getFontFromProvider(android.content.Context, android.support.v4.provider.FontRequest, java.lang.String, android.os.CancellationSignal):android.support.v4.provider.FontsContractCompat$FontInfo[]

ERROR - Method: cn.addapp.pickers.util.LogUtils.getTraceElement():java.lang.String

ERROR - Method: cn.jiguang.a.a.b.c.a(android.os.Message):void

ERROR - Method: cn.jiguang.d.b.f.a(int):boolean

ERROR - Method: cn.jiguang.d.d.m.a(android.content.Context, boolean):java.util.List

ERROR - Method: cn.jiguang.g.e.a(java.lang.String, java.util.Map):cn.jiguang.g.e

WARN - 2299 warnings in 454 nodes

ERROR - finished with errors

转换后:

➜ from_v3.4.8_dex ll

total 0

drwxr-xr-x 3 crifan staff 96B 4 29 15:29 resources

drwxr-xr-x 13 crifan staff 416B 4 29 15:30 sources

转换后的代码用VSCode去打开的效果:

f1b751b1c7232ee2f0c5990ec4bd4560.png

jadx-gui查看和导出代码

双击jadx-gui即可运行:

f91699baa122c450c4b96db0add2724b.png

然后去打开对应的jar文件:com.huili.readingclub8825612-dex2jar.jar,即可看到包含了app业务逻辑的代码结构和包名:

a647ceb433749880dd36b02758ae9700.png

然后展开后可以看到详细的代码:

8efb64dc27304a8d33cb60615cf52e14.png

然后如果想要导出全部代码,则可以去:

File -> Save All

f670b3d33443f789737432d06631673e.png

然后稍等片刻:

ff997a75fc1f22fce5135a3ff267ca99.png

即可在导出的sources文件夹中找到你要的源码:

fa8b2ecaf1e0b02cff0ab0ebc36e0522.png

具体过程详见:

备注和说明

用JD-GUI打开同一个jar的效果

另外,用JD-GUI打开同一个jar的效果:

b491cb61d1612495897fa8c31077ee18.png

其中找到了我们之前需要的app相关的业务逻辑的代码:

/com/huili/readingclub/activity/classroom/SelfReadingActivity.class

1558dc654c85d54273dce457b0e7fd6e.png

其中onSuccess中就是我们希望得到的对于J字段解密的逻辑。

其他无效的jar转换出jar的效果

如前一步所述,从多个dex可以转换出多个jar

而这些无效的、没有包含app业务逻辑的jar,去用一些反编译工具打开后的效果是:

9326b4501b81f11193fe70e2519c14fe.png

其他的一些,比如腾讯乐固加密了的,最终转换出来的jar,去打开后只能看到腾讯乐固的代码:

512e8553b1cc2212696adf74cc3ecc96.png

注意事项

jadx不能从jar导出java,否则会报错

举例:

../../../../../reverse_engineering/jadx/jadx-1.0.0/bin/jadx ../dex_to_jar/com.ishowedu.child.peiyin9201516-dex2jar.jar -d .

INFO - loading ...

INFO - converting to dex: com.ishowedu.child.peiyin9201516-dex2jar.jar ...

ERROR - jadx error: Error load file: ../dex_to_jar/com.ishowedu.child.peiyin9201516-dex2jar.jar

jadx.core.utils.exceptions.JadxRuntimeException: Error load file: ../dex_to_jar/com.ishowedu.child.peiyin9201516-dex2jar.jar

at jadx.api.JadxDecompiler.loadFiles(JadxDecompiler.java:138)

at jadx.api.JadxDecompiler.load(JadxDecompiler.java:102)

at jadx.cli.JadxCLI.processAndSave(JadxCLI.java:32)

at jadx.cli.JadxCLI.main(JadxCLI.java:18)

Caused by: jadx.core.utils.exceptions.DecodeException: java class to dex conversion error:

dx exception: Translation has been interrupted

at jadx.core.utils.files.InputFile.loadFromJar(InputFile.java:191)

at jadx.core.utils.files.InputFile.searchDexFiles(InputFile.java:82)

at jadx.core.utils.files.InputFile.addFilesFrom(InputFile.java:40)

at jadx.api.JadxDecompiler.loadFiles(JadxDecompiler.java:136)

... 3 common frames omitted

Caused by: jadx.core.utils.exceptions.JadxException: dx exception: Translation has been interrupted

at jadx.core.utils.files.JavaToDex.convert(JavaToDex.java:63)

at jadx.core.utils.files.InputFile.loadFromJar(InputFile.java:182)

... 6 common frames omitted

Caused by: java.lang.RuntimeException: Translation has been interrupted

at com.android.dx.command.dexer.Main.processAllFiles(Main.java:614)

at com.android.dx.command.dexer.Main.runMultiDex(Main.java:365)

at com.android.dx.command.dexer.Main.runDx(Main.java:286)

at jadx.core.utils.files.JavaToDex.convert(JavaToDex.java:49)

... 7 common frames omitted

Caused by: java.lang.InterruptedException: Too many errors

at com.android.dx.command.dexer.Main.processAllFiles(Main.java:606)

... 10 common frames omitted

crifan.com,使用署名4.0国际(CC BY 4.0)协议发布 all right reserved,powered by Gitbook最后更新:

2020-09-05 09:45:45

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值