免责声明

本次技能共享仅用于逆向技能的沟通与学习,请勿用于其他不合法用途;技能是把双刃剑,请善用它。

逆向是什么、可以做什么、怎么做

  • 简单讲,便是将他人打包好的 apk 进行反编译,得到源码并剖析代码逻辑,终究达成自己的目的。

  • 可以做的事:

    • 修正 smali 文件,使程序达到自己想要的效果,重新编译签名装置,如去广告、自动化操作、电商薅羊毛、单机游戏修正数值、破解付费内容、汉化、抓包等
    • 阅读源码,学习他人写好的技能实践
    • 破解:小组件盒子:www.coolapk.com/apk/io.ifte…
  • 怎么做:

    • 这是门庞杂的技能活,需求常识的广度、经历、深度
    • 需求具体问题,具体剖析,有针对性的学习与探索
    • 了解打包原理、ARM、Smali汇编语言
    • 加固、脱壳
    • Xposed、Substrate、Fridad等框架
    • 加解密
    • 运用好东西## 今日共享触及东西
  • apktool:反编译东西

    • 反编译:apktool d <apkPath> o <outputPath>
    • 重新打包:apktool b <fileDirPath> -o <apkPath>
    • 装置:brew install apktool
  • jadx:支持命令行和图形界面,支持apk、dex、jar、aar等格局的文件检查

    • github.com/skylot/jadx
  • apksigner:签名东西

    • developer.android.com/studio/comm…
  • Charles:抓包东西

    • www.charlesproxy.com/
    • Android 7 以上抓包 HTTPS ,需求手机 Root 后将证书装置到系统中
    • Android 7 以下 HTTPS 直接抓

正题

Android 逆向从入门到入“狱”

  • 正向编译

    • java -> class -> dex -> apk
  • 反向编译

    • apk -> dex -> smali -> java
  • Smali 是 Android 的 Dalvik 虚拟机所运用的一种 dex 格局的中心语言

  • 官方文档source.android.com/devices/tec…

  • code.flyleft.cn/posts/ac692…

  • 正题开端,以反编译某瓣App为例:

    • jadx 检查 Java 源码,找到想修正的代码

    • 反编译得到 smali 源码:apktool d douban.apk -o doubancode --only-main-classes

    • 修正:找到 debug 界面入口并翻开

    • 将修正后的 smali 源码正向编译成 apk:apktool b doubancode -o douban_mock1.apk

    • 重签名:jarsigner -verbose -keystore keys.jks test.apk key0

    • 此刻的包不能正常拜访接口,因为豆瓣 API 做了签名校验,而我们的新 apk 是用了新的签名,看接口抓包

    • 怎么办呢?

    • 继续剖析代码,修正网络恳求中的 apikey

    • 来看看新的 apk

  • 也可以做爬虫等

启示与防备

  • 混杂
  • 加固
  • 加密
  • 运转环境监测
  • 不写敏感信息或操作到客户端
  • App 运转签名验证
  • Api 接口签名验证

One More Thing

  • 东西共享:code.flyleft.cn/posts/3e3d8…

  • 书籍共享:book.douban.com/subject/205…

  • 进阶(下次共享):

    • 静态调试
    • 动态调试
    • 脱壳
    • NDK你想
    • so文件修正