android - 如何使用 android 手机将 Jar 重新编译为 dex?
问题描述
我已经使用 Apk 编辑器提取了 Dex 文件并使用 Jadex 进行了反编译现在我想使用 android Phone 将 Jar 重新编译为 Dex 有人可以帮助我吗?
解决方案
我假设您指的是Jadx而不是 Jadex。
Jadx 有命令将反编译的项目保存为 gradle 项目。
可以将 Gradle 项目加载到 Android Studio 中。从理论上讲,您可以重新编译该应用程序并取回一个与原始应用程序一样工作的应用程序。
实际上,这在 99.9% 的情况下都不起作用,因为:
- Jadx 未能反编译某些方法。
- 生成的代码包含需要手动更正的小问题
- 非常复杂的函数可能是可反编译的,但代码略有变化,因此与原始字节码不完全一样。
一般来说,如果您想重新编译应用程序,使用 Jadx 反编译应用程序是完全错误的方法。在我看来,反编译和重新编译应用程序最可靠的方法是使用apktool。在反编译的 smali 源代码中,您可以修改要更改的方法。为了更好地理解代码,您也可以在 Jadx 中反编译相关的类/方法。
为了简化 smali 代码段的构建,您可以使用 Android Studio:使用通过 Jadx 反编译的代码部分,将其复制到 Android Studio 项目中,对其进行编译并使用 Jadx 打开编译好的 APK 文件。选择包含代码的类,打开它的 samli 选项卡并从中复制 smali 代码。这通常比直接在 Smali 中编程更容易。另请参阅此问题:将 .Java 文件转换为 .Smali 文件
推荐阅读
- reactjs - 主要组件未在反应路由中呈现
- javascript - (keyup) 尝试拼接 event.target.value 时不起作用
- flutter - 当网络连接恢复时,使用 Bloc /Cubit 颤振不会发生自动刷新?
- python - 将多行字符串连接/连接为整个数据帧的一行
- computer-vision - 给定在线数据集的多项式三角剖分?
- python - Django试图为几个不同的列表视图重用相同的网页
- c# - 如何修复此类错误“从对象类型 anystore.bLL.loginBLL 到已知托管提供程序本机类型不存在映射”。好吧,我检查了很多次
- ios - 反应原生连接到 ios 上的经典蓝牙设备
- javascript - 带有 CSS 和 jQuery 的简单灯箱
- python - Python,将 Json-Data 放入变量中