apk脱壳+回编译+重新签名

  1. 脱壳
  2. 通过baksmali将dex文件转换成smail文件
  3. 反编译
  4. 替换文件
  5. 回编译
  6. apksigner签名
  7. 安装
  8. 遇到的错误

脱壳

得到classes.dex文件

通过baksmali将dex文件转换成smail文件

运行命令后,smail文件在 out 目录下

java -jar baksmail.jar d input.dex

反编译

xx.apk 为apk的名称

java -jar apktool.jar d xx.apk

替换文件

将转成的smail文件的根目录改名为smail,然后替换反编译后里的smail

回编译

xx 为文件夹名称

java -jar apktool.jar b xx

apksigner签名

java -jar apksigner.jar sign  --ks C:\workspace\android\Hookie\chgocn.jks  --ks-key-alias ch  --ks-pass pass:ca  --key-pass pass:ca  --out apk_dest.apk  base/dist/base.apk

安装

adb install -r apk_dest.apk

遇到的错误

  • java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/internal/Intrinsics

原 apk 使用 kotlin 开发,360加壳,脱壳之后回编译时点击 app 闪退。

原因:脱壳拿到的dex文件中缺失 kotlin 依赖,需要自编译app,然后取出kotlin smail文件,并加进去

  • 找不到 com.stub.StubApp

删除加固so文件以及修改application入口之后,还需要修改 smail 代码,将 StubApp的代码全部删除

-


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 chgocn@gmail.com
笔记