• 安卓逆向实战:通过修改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页面,

    找到书旗的application,

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

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

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

    ###

    我们找到对应的路径,修改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加载流程有一个深刻的认识啊!

    #####

  • 相关阅读:
    Jenkins 构建自动化 .NET Core 发布镜像
    浅入Kubernetes(13):dashboard、api、访问配置
    浅入Kubernetes(12):Deployment 的升级、回滚
    浅入Kubernetes(11):了解 Service 和 Endpoint
    浅入Kubernetes(8):外网访问集群
    浅入Kubernetes(10):控制节点的部署,选择器、亲和性、污点
    浅入Kubernetes(9):了解组件
    浅入Kubernetes(7):应用部署实例,Deployment、Service、ReplicaSet
    浅入kubernetes(5):尝试kubeadm
    《MySQL技术内幕-InnoDB存储引擎》整理6-事务
  • 原文地址:https://www.cnblogs.com/andy0816/p/15175400.html
Copyright © 2020-2023  润新知