欢迎光临
专注android技术,聚焦行业精粹,我们一直在努力

Android apk 重打包——修改smali代码

1、Smali 简介

介绍:简单来说就是我们用java写的代码编译成class打包成dex文件后使用baksmali程序逆向回来的一种语法。

使用场景:对于一个release包的问题排查,我们既没有日志,也无法调试,又没有崩溃。出了问题非常难分析,有时会需要解开包,在里面加上日志,或者让程序在某个方法崩溃。但解开后我们得到的是smali代码,我们需要在里面添加打日志,制造崩溃的smali代码。

工具

  • 解包合包我们需要用到apktool
  • 合包后的apk是无法安装的,需要签名后才能安装,所以需要用到jarsigner
  • 直接解开apk看res和java内容,用到jadx

修改流程:

  1. 解包:apktool d xxx.apk。如果仅改smali可以不反编译res,加上-r就可以了
  2. 修改smali, 路径在 smali 目录下面
  3. 合包:apktool b xxx/
  4. 签名:jarsigner -verbose -keystore [keystore].jks -signedjar [签名后输出apk路径].apk [需要签名的apk路径].apk [keystore alias]

 

 

2、常用smali代码合集

2.1、模拟一个空指针

1) java代码:

2) 对应smali代码:

3) 确认在smali对应的位置:

例如我们需要在exit()方法的360和361行之间造一个空指针

4) 在smali文件修改:

在smali 文件夹下找到对应的文件,可以找到.line360和.line361,在这两个之间就是我们想要加空指针的地方

5) 修改后合包再用jadx工具打开确认修改结果:

ok,空指针制造完毕。用同样的方法我们也可以在指定的位置增加日志打印,日志打印的smali代码请参考2.2节

 

2.2、打印日志

2.2.1、日志打印

java 代码

 

对应的smali代码

2.2.2、简单日志打印

java代码

smali代码

 

3、常见语法解释

3.1、goto :goto_0

跳转到 :goto_0标签处,上面的代码为跳到void方法的return语句处。

 

赞(0) 打赏
未经允许不得转载:花花鞋 » Android apk 重打包——修改smali代码
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

国内精品Android技术社区

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏