安卓逆向(三)——修改smali⽂件绕过签名验证
反编译apk并重新打包安装
仅⽤于研究和学习使⽤,禁⽌将相关技术应⽤到不正当途径,如侵犯隐私或权益,请联系我⽴即删除
⽂章⽬录
⼀、前⾔
上⼀节我们介绍了逆向常⽤的⼀些⼯具,这⼀节我们进⾏⼀个简单的实战, 我们将对⼀个常见的apk进⾏反编译、通过修改smali⽂件绕过签名验证,重新打包、重新进⾏签名。
⼆、准备⼯作
真机⼀台 或者 安卓模拟器(夜神模拟器) 安卓版本尽量控制在6.0以内
选择书旗是因为书旗有签名验证
三、反编译apk
1、验证apk
反编译前我们先验证⼀下apk是否可⽤,先安装在⼿机上测试⼀下
adb install shuqi.apk
结果可以看到安装成功了,为了后续验证完我们就卸载掉了。
2、反编译apk
apktool d -f shuqi.apk -only-main-classes  # 正常apktool d ***.apk就可以但是书旗的会提⽰,⾮法Dex,这是因为apk⾥有加密过后的dex⽂件,⽐如有些apk 的assets⽬录下有加密后的Dex⽂件,添加–only-main-classes参数即可
如图就反编译成功了,⽂件夹下会多出个shuqi的⽬录
按照正常的程序我们现在就可以修改反编译后的代码,然后打包、重新签名,再次进⾏安装
但是书旗有签名验证,签名验证就是为了防⽌进⾏⼆次打包,会将打包后前签名和代码中的进⾏⽐对,如果签名不对将启动失败
如果您选择的app没有签名验证就可以直接进⾏第五步和第六步
四、绕过签名验证
1、到验证签名位置
怎么到验证签名的位置呢? 我们需要分析l⽂件, 到启动的位置, 由于我们打包后在启动位置就退出了,所以应该就是启动的时候验证的。
我们通过jadx打开shuqi.apk
可以看到很多乱七⼋糟的东西是我们看不懂的,那我们如何到启动的位置呢, 我们可以通过jadx搜索功能(上图中红圈位置), 我们搜索Application, 因为混淆不会把这个⼊⼝混淆, 如果⼊⼝混淆那么程序也不到启动位置。
根据名称猜测我们可以猜测到com.shuqi.app.ShuqiApplication就是⼊⼝我们打开看看(双击打开)
先⼤概看下, 书旗还算⽐较简单, 我们可以看到checksigAsync这个函数, 根据名称缩写我们可以猜到check signature async全称,检查签名 我们邮件查定位到这个函数看下
可以看到画红圈的地⽅就是验证的地⽅,那么我们如何绕过去呢?两种⽅法,⼀种是修改java代码重新编译,但是由于我们和⼈家开发的环境可能差很多导致最后运⾏失败,不建议使⽤除⾮你知道开发环境版本啥的。 另⼀种是修改smali⽂件,我们今天就采⽤这种⽅法
2、修改smali⽂件,绕过验签
通过jadx搜索的结果我们可以知道⽂件的⽬录com.shuqi.app.ShuqiApplication.smali
我们进⼊到我们之前反编译的⽂件shuqi/smali/com/shuqi/app/
打开ShuqiApplication.smali⽂件(⽤Sublime Text可以打开)
打开后可以看到是这样的, 我们如果到对应的函数呢, 可以看到⾏中有.line ** 这个就是在⽂件中实际的⽂职
我们可以看下checksigAsync这个函数的位置是 166⾏ 我们在smali⽂件中到166⾏
通过搜索我们到了166⾏的位置, 将这段删除就ok了,启动后就不会执⾏checksigAsync这个函数了
五、重新打包并签名
1、重新打包
apktool b shuqi  # 对shuqi⽬录进⾏打包
打包成功后会在shuqi⽬录下⽣成两个⽬录build和dist, 重新⽣成的apk在dist⽬录下, 但是当前还不能⽤需要签名后才可安装使⽤
2、⽣成证书
keytool jarsigner ⼯具是JAVA JDK⾃带的安卓软件签名工具
keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
3、⽤证书给apk签名
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias
这⾥输⼊刚才设置的密码, 可以看到我们签名成功了
六、安装
adb install shuqi_sign.apk
安装成功
本来想看下耗时的,结果两次截屏的⽂件名称改成⼀样的了, ⽂件覆盖了…

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。