遇到问题

在使用apktool做apk逆向工程时,我们一般都需要将apk反编译为smail,然后将要加入其中的SDK也编译成smail,然后将二者合并起来之后打包成一个新的apk,其中将SDK的jar编译为smail需要两步

  1. 使用dx工具将jar转为dex,dx的工具在AndroidSDK中可以找到,dx.jar。

    dx --dex --output=out sdk.jar sdk2.jar...

    ​ out要输出的smail目录

    ​ sdk.jar sdk2.jar… sdk的jar文件,可以是多个

  2. 将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相关推荐

  1. android逆向工程之apktool工具集

    Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片.XML配置.语言资源等文件,也可以添加新的功能到APK文件中. apk反编译软件有个组合套餐 ...

  2. xposed安装,与android逆向工程之xposed的hook

    Xposed installer安卓安装和使用 文章目录 Xposed installer安卓安装和使用 (一)Xposed installer安卓安装 0.百度网盘-我所用的apk(3.1.5)和z ...

  3. iOS逆向工程之Theos

    iOS逆向工程之Theos 如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生.那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,T ...

  4. Android逆向反编译之工具介绍

    傻瓜式操作图形化工具 Smali2JavaUI smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的 ...

  5. iOS逆向工程之App脱壳

    本篇博客以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个"砸壳&quo ...

  6. 3. Android逆向-基于Frida的工具Objection

    文章目录 Objection安装使用 安装 使用 Ubuntu 连接测试 Windows 问题 Objection安装使用 在开始熟悉Frida时,接触的示例是需要frida-server在一个roo ...

  7. Android 大杂烩工程之ListView的开发2以及数据仓库开发模式

    今天是放完假后工作的第一天,为了证明我不是一段幽灵代码,我给各位看客老爷们说句:祝大家节日过得愉快(过得不愉快那也是人之常情). 我们继续来讲一讲ListView的开发,上次讲到了ListView的适 ...

  8. Android逆向基础----Android Dalvik虚拟机

    Android Dalvik虚拟机的特点: l  体积小,占用内存空间小. l  专有DEX可执行文件. l  常量池采用32位索引值,寻址类方法名,字段名,常量更快. l  基于寄存器架构,并拥有一 ...

  9. iOS安全逆向之旅---安全逆向环境搭建和工具使用介绍

    一.前言 这是2020年第一篇文章,我们从今年开始主要介绍iOS安全逆向相关知识,介于之前已经了解了Android逆向相关的知识,所以这里会相对比较容易入门,本文就来介绍一下iOS逆向需要准备的工具和 ...

最新文章

  1. 人工智能学习框架TensorFlow渐近分析
  2. Vijos 1334 ---- NASA的食物计划(01背包强化)
  3. 为什么大多数程序员都抽烟_为什么大多数重新设计都会失败
  4. 前5月全国快递业务量累计完成396.5亿件 同比增50.1%
  5. 测试开发之编写测试用例
  6. 《数据科学家修炼之道》笔记
  7. 命名问题导致的一个bug
  8. ADC参数中的SNR、SNDR与SFDR的区别是什么
  9. 六轴传感器+卡尔曼滤波+一阶低通滤波
  10. 超详细的微信公众号创建与管理教程
  11. opencv 证件照背景替换-KMeans
  12. 【转】Windows Error code (Windows错误码说明)
  13. 在线流程图和思维导图开发技术详解(一)
  14. [WebGL入门]三十一,Quaternions(四元数)
  15. How to Register/Update Ad Muncher using TOR
  16. mysql链接设置编码_mysql数据库链接编码设置
  17. 计算机函数countifs使用,countifs函数的使用方法
  18. java调用海康威视sdk获取车牌号demo
  19. CAD2021精简版安装教程附下载地址
  20. 低成本免服务器微信小程序源码多功能集合搭建

热门文章

  1. android显示图片的两种方法
  2. 如何实现通达信接口开发?
  3. 数据仓库概念扫盲,kimball和Inmon两大派系在争什么?
  4. 数据库事务及MySQL实战
  5. java计算机毕业设计家政服务系统源码+mysql数据库+系统+lw文档+部署
  6. ubuntu虚拟机黑屏解决方案
  7. 今日技巧分享:照片怎样加滤镜?
  8. DEDECMS中,友情链接
  9. 在同一网段划分不同VLAN
  10. Ubuntu安装Java环境