Android逆向工程之dx工具jar2dex失败,使用d8
遇到问题
在使用apktool做apk逆向工程时,我们一般都需要将apk反编译为smail,然后将要加入其中的SDK也编译成smail,然后将二者合并起来之后打包成一个新的apk,其中将SDK的jar编译为smail需要两步
使用dx工具将jar转为dex,dx的工具在AndroidSDK中可以找到,dx.jar。
dx --dex --output=out sdk.jar sdk2.jar...
out要输出的smail目录
sdk.jar sdk2.jar… sdk的jar文件,可以是多个
将dex文件转为smail,使用baksmail,下载地址:https://bitbucket.org/JesusFreke/smali/downloads/
而我在使用dx编译jar文件的时候出现了如下错误:
问题分析
提示invalid opcode ba 请求–min–sdk–version=26,当前为13
尝试第一次
那就将版本升到26,找到方法,在命令中加入–min–sdk–version=26参数,编译成功
然后使用baksmail将dex转成smail文件,报错信息如下:
java -jar baksmail.jar -o out classes.dex
盲猜是因为上面使用26的api编译的dex太高级了,解析不了
尝试第二次
那就升级baksmail工具,下载网址:https://bitbucket.org/JesusFreke/smali/downloads/
下载最新的2.5.2版本再编译,嚯嚯嚯,语法不对
尝试第三次
那就使用新语法再编译,编译通过,回编译apk,找不到文件
java -jar baksmail.jar d classes.dex -o out
进入反编译文件中找,有啊,这不在这吗,怎么就找不到了
冷静分析,有行号提示,进去看看
emm,看不懂,盲猜。。。猜不到
经过将SDK使用AS引用编译出来的demo反编译成smail和我直接反编译SDK的smail文件对比
哦~,那我知道了,就是lambda表达式没被编译成功呗,是哪一步出了问题
jar转dex?使用的是dx --min–sdk–version=26,那就将版本号提一提,降一降,emmm,都没用
dex转smail?可是baksmail我已经提到最新了呀,而且这东西就算真有问题我也看不懂,改不动
那就改dx吧,听说有个可替代工具叫d8,专门针对java8做的优化,可以一试
尝试第四次
使用d8新工具,命令也不一样了,找了半天的使用方式:
d8 --lib android.jar --output out sdk.jar sdk2.jar...
android.jar也是AndroidSDK中找的,android8.0以上最好
out要输出的smail目录
sdk.jar sdk2.jar… sdk的jar文件,可以是多个
jar转dex成功,dex转smail成功,查看smail文件,发现lambda文件出来了,回编译,成功
至此,打包就告一段落了,可太难了,用了我三天时间
不过不要以为解决了,运行起来直接报找不到R文件,可我回编译的时候重新生成过R文件啊,就在apk包名下。哦~是SDK包名下的R文件找不到,那就参考我的另一篇文章吧 Android逆向工程之aar包转jar包找不到R文件的问题
总结
当我们使用dx工具去编译jar时,可能会出现本文描述的问题,具体就是api 26之前是不支持Lambda的,而dx工具默认使用的是13,然而提了版本之后打出来的dex,baksmail又识别不了,也许不是识别不了,是我技术不到家,没找对方法
AndroidSDK下除了dx工具之外,还提供了一个d8工具,应该是专门针对java8以上的语法做的工具,所以如果jar的使用了java8之上的语法,那使用d8编译准没错
逆向工程路漫漫啊,估摸着我也只知道个皮毛!!!
Android逆向工程之dx工具jar2dex失败,使用d8相关推荐
- android逆向工程之apktool工具集
Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片.XML配置.语言资源等文件,也可以添加新的功能到APK文件中. apk反编译软件有个组合套餐 ...
- xposed安装,与android逆向工程之xposed的hook
Xposed installer安卓安装和使用 文章目录 Xposed installer安卓安装和使用 (一)Xposed installer安卓安装 0.百度网盘-我所用的apk(3.1.5)和z ...
- iOS逆向工程之Theos
iOS逆向工程之Theos 如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生.那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,T ...
- Android逆向反编译之工具介绍
傻瓜式操作图形化工具 Smali2JavaUI smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的 ...
- iOS逆向工程之App脱壳
本篇博客以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个"砸壳&quo ...
- 3. Android逆向-基于Frida的工具Objection
文章目录 Objection安装使用 安装 使用 Ubuntu 连接测试 Windows 问题 Objection安装使用 在开始熟悉Frida时,接触的示例是需要frida-server在一个roo ...
- Android 大杂烩工程之ListView的开发2以及数据仓库开发模式
今天是放完假后工作的第一天,为了证明我不是一段幽灵代码,我给各位看客老爷们说句:祝大家节日过得愉快(过得不愉快那也是人之常情). 我们继续来讲一讲ListView的开发,上次讲到了ListView的适 ...
- Android逆向基础----Android Dalvik虚拟机
Android Dalvik虚拟机的特点: l 体积小,占用内存空间小. l 专有DEX可执行文件. l 常量池采用32位索引值,寻址类方法名,字段名,常量更快. l 基于寄存器架构,并拥有一 ...
- iOS安全逆向之旅---安全逆向环境搭建和工具使用介绍
一.前言 这是2020年第一篇文章,我们从今年开始主要介绍iOS安全逆向相关知识,介于之前已经了解了Android逆向相关的知识,所以这里会相对比较容易入门,本文就来介绍一下iOS逆向需要准备的工具和 ...
最新文章
- 人工智能学习框架TensorFlow渐近分析
- Vijos 1334 ---- NASA的食物计划(01背包强化)
- 为什么大多数程序员都抽烟_为什么大多数重新设计都会失败
- 前5月全国快递业务量累计完成396.5亿件 同比增50.1%
- 测试开发之编写测试用例
- 《数据科学家修炼之道》笔记
- 命名问题导致的一个bug
- ADC参数中的SNR、SNDR与SFDR的区别是什么
- 六轴传感器+卡尔曼滤波+一阶低通滤波
- 超详细的微信公众号创建与管理教程
- opencv 证件照背景替换-KMeans
- 【转】Windows Error code (Windows错误码说明)
- 在线流程图和思维导图开发技术详解(一)
- [WebGL入门]三十一,Quaternions(四元数)
- How to Register/Update Ad Muncher using TOR
- mysql链接设置编码_mysql数据库链接编码设置
- 计算机函数countifs使用,countifs函数的使用方法
- java调用海康威视sdk获取车牌号demo
- CAD2021精简版安装教程附下载地址
- 低成本免服务器微信小程序源码多功能集合搭建