文章

Android反编译

Android反编译

ClassyShark

背景

1、了解该项目的基本框架、使用到哪些开源项目
2、对于一些大厂的项目,我们还比较关心的是用到了哪些新的框架和技术,对于新技术的流行程度和使用普遍程度有个比较好的把握,指导是否需要进行深度的使用学习。比如最近的比较流行的 rxjava热更新 技术等等。

作用

ClassyShark 是一款可以查看 Android 可执行文件的浏览工具,支持.dex, .aar, .so, .apk, .jar, .class, .xml 等文件格式,分析里面的内容包括 classes.dex 文件,包、方法数量、类、字符串、使用的 NativeLibrary 等。
官网:http://www.classyshark.com
下载:https://github.com/google/android-classyshark/releases

使用

  1. 打开 apk 文件 java -jar ClassyShark.jar -open <YOUR_APK.apk>
  2. 将生成的所有数据导出到文本文件里 java -jar ClassyShark.jar -dump <BINARY_FILE>
  3. 将指定类生成的文件导出到文本文件里 java -jar ClassyShark.jar -dump <BINARY_FILE> <FULLY_QUALIFIED_CLASS_NAME>
  4. 打开 ClassyShark,在 GUI 界面展示某特定的类
  5. java -jar ClassyShark.jar -open <BINARY_FILE> <FULLY_QUALIFIED_CLASS_NAME>
  6. 检测 APKjava -jar ClassyShark.jar -inspect <YOUR_APK.apk>
  7. 导出所有的字符串 java -jar ClassyShark.jar -stringdump <YOUR_APK.apk>

java -jar ClassyShark.jar -open meituan.apk

sdctv

  • 查看有多少个classes.dex,美团有 3 个
  • 查看编译版本,美团编译版本非常新, 紧跟时代, 23 版本 (Android 6.0),并且 TargetSdkVersion 也是 23 版本,紧跟技术方向,最低版本是 16(Android 4.1), 4.1 以下的手机无法运行
  • 用到的so库,有美团自己的,也有好多是第三方的库
  • 查看有多少个方法,可以看到 9 万多个方法,怪不得会有 3 个 classes.dex 文件
  • 查看用到了哪些第三方库,项目中应用了大量的第三方库,并且一般都是主流的比较稳定的开源库,我们来看下都用到了哪些库:
  • ZXing 二维码识别库;
  • amap: 高德地图;
  • PullToRefresh 使用最广的下拉刷新组件;
  • jackson, json 解析库;
  • NineOldAndroids Jake 大神的 android 兼容库
  • fresco,facebook 出品的图片处理库,图片加载节省很多内存,避免 OOM。
  • RxJavajava 响应式编程库,再加上 SquareRetrofit 库的支持,可以说未来就是 rxjava 的天下,目前市面上已经有很多基于 rxjava 的项目;我们团队也将基于 rxjava 来开发项目;
    圈内最牛逼的开源公司 Square,Jake 大神所在的公司,可以毫不夸张的说,Square 的开源项目使得 Android 开发提速了好几年
  • okhttp 网络请求库,已被官方采用;
  • retrofit 非常牛逼的网络请求库,配合 rxjava 和 lambda 使用,代码量减少 90%;
  • otto 事件总线;
  • picasso 图片加载库;
  • dagger 依赖注入框架;
  • ExpandableTextView 可折叠的 TextView
  • iflytek, 科大讯飞的语音集成;
  • ViewPagerIndicator 还是 Jake 大神的项目,viewpager 的滚动控件;
  • actionbarsherlock 依然是 Jake 大神的项目,Actionbar 的适配库,不过已经过时了;
  • 华为推送
  • SystemBarTint 状态栏沉浸效果库
  • 百度地图
  • 新浪微博
  • 腾讯的 QQ 和微信
  • 大众点评,已经合并一家,东西也得用;
  • umpay, 联动优势支付;
  • 支付宝;
  • andfix 阿里出品的 android 热更新框架;
  • flurry 统计库;
  • 小米推送
  • http-request 网络请求库;
  • EventBus 事件总线库;
  • PhotoView 放大缩小的图片处理库;
  • roboguice 依赖注入框架,类似 Dagger
  • zip4j 处理 zip 压缩的库;
    link 异步 task 关联库,很像 rxjava

总结

通过分析 App 的项目结构和引用库的信息,我们大致掌握了该项目的架构,一些开发中的经验和不足,拓宽下开发视野,发现一些好用的开源库,增强我们的武器,这些都是我们在开发中可以借鉴的东西。

jadx

1
jadx -d out calc.apk

Android 逆向助手

本文由作者按照 CC BY 4.0 进行授权