安卓逆向实战:通过修改smali文件,破解签名校验

####

shuqi.apk

mumu模拟器

###

正常的shuqi.apk,是在模拟器可以正常运行的,

###

首先第一步使用apktool.sh d shuqi.apk

反编译出来这个apk,

###

然后再次打包这个apk,

使用命令,apktool.sh b shuqi

会在产生一个dist文件夹,里面有一个shuqi.apk

####

进入这个dist文件夹,cd 进入,

开始生成签名,

使用命令:keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000

输入密码123456

签名就生成了

###

使用生成的签名文件,对apk进行签名,

使用命令:jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias

会生成一个签名的apk

####

在模拟器再次安装这个apk

发现安装失败了,

分析

第一步,因为你启动的时候就退出了,所以应该是在启动的某一个阶段, 做了签名的校验,所以你要找到是在启动的哪一个阶段做的校验,

因为app启动是会去读取,Androidmanifest.xml的,一个apk只有一个这个文件,里面有一个,application,这个加载完,app的生命周期就启动了,

所以应该是还没有加载完这个application,就退出了,

第二步,所以我们去找application,找到Android.name的地方,这个就是app启动的入口,

大概率是会在这个启动的入口文件里,做一些事情,然后校验了签名的,我们要做的就是找到这个校验 签名的地方,

这个地方的文件是不会混淆的,因为混淆了app就找不到了,

 

###

这个就是对签名进行了校验,

开发签名了之后是记录到代码里面的, 每次app启动,会读取这个签名,如果不对就会有问题,

我们下一步要找到这个签名的地方在哪里,

###

使用jadx打开shuqi.apk

是启动的时候就退出了,可以猜测是启动的时候做了校验,

找到启动application页面,

安卓逆向实战:通过修改smali文件,破解签名校验

 

找到书旗的application,

安卓逆向实战:通过修改smali文件,破解签名校验

 

可以通过右键的方式,找到这个函数的具体位置,

我们猜测是做了校验,就要重点关注if,check,verify,这样的词,

安卓逆向实战:通过修改smali文件,破解签名校验

 

就是这个地方做了校验了,我们要做的就是把这一句注释掉,然后重新打包,

###

我们找到对应的路径,修改smali文件,

安卓逆向实战:通过修改smali文件,破解签名校验

 

把对应的四行删除,然后再去打包,

###

重新签名,打包,

注意把之前生成的build和dist删除掉,

首先重新打包

使用命令,apktool.sh b shuqi

会在产生一个dist文件夹,里面有一个shuqi.apk

####

进入这个dist文件夹,cd 进入,

开始生成签名,

使用命令: 

输入密码123456

签名就生成了

###

使用生成的签名文件,对apk进行签名,

使用命令:jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -signedjar shuqi_sign.apk shuqi.apk my_alias

会生成一个签名的apk

###

再次安装这个签名之后的apk,

哈哈,就可以正常安装了,绕过了他的签名校验!!!!

####

为什么能够绕过这个签名,

本质还是对安卓系统,对app加载流程有一个深刻的认识啊!

#####

上一篇:Android 6.0 系统apk导出后,没有 java 代码 ,dex 文件(odex 转 dex)


下一篇:android-寻找用于smali文件的解析器