Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

时间:2022-09-06 00:09:23

一、前言

之前已经写了一个爆破签名校验的工具kstools,很多同学也在使用,但是也反馈了不少问题,之前一篇文章也介绍了,关于爆破之后第三方登录问题修复,这篇我们在综合说明一下一些后遗症问题,关于kstools工具说明以及工具的原理,可以看这篇文章说明:Android中自动爆破签名工具kstools说明

二、样本分析

下面开始进入正题吧,关于有些同学反馈,使用该kstools爆破某app之后,出现无限制重启问题,关于这个问题,我没见过,很好奇就是尝试了这个样本案例:

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

看到了,的确是这样的,无限制重启。我们使用Jadx打开使用kstools处理过的样本看看hook是否成功:

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

这里可以看到,我们hook是成功的,所以应该不是hook的问题导致的,所以这里就需要借助开发经验了:记住如果在破解过程中发现应用重启或者闪退的时候,要第一时间想起来是否程序内部做了异常捕获,然后自己做了一些操作导致这样的结果。

本文案例就是这个原因导致的,所以我们得先把应用自己捕获全局异常功能给关闭,这样会出现系统崩溃异常信息,这样定位问题就简单了,对于Android中全局捕获异常有一个特征就是这行代码:

Thread.setDefaultUncaughtExceptionHandler(this);

所以我们在Jadx中全局所有字符串即可:

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

这里看到了,他的确有这些代码,然后我们直接在反编译之后的smali代码中找到这些地方,注释这行代码即可,然后在回编译安装运行,果然崩溃了,看崩溃日志信息:

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

是这个app内部用到了ormlite框架来操作数据库的,具体信息就是Class类型不能转化成String类型,我们通过这个堆栈信息跟踪最后找到了出错的地方:

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

这是个注解,看到这里doClass是Class类型,但是默认值却是String类型,所以报错了,但是这个为什么会这样呢?我们用原始样本看看:

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

这个才是正确的,所以我们猜想这个可能和kstools工具操作有关,因为kstools工具的操作步骤是:

解压apk=>获取dex=>转化成jar(插入hook代码)=>转化成dex=>塞入apk=>签名apk

而这个过程中,特别是在dex转化成jar,然后在转化成dex,应该是这个过程导致这个问题。所以这里为了解决这个问题,我们还得按照这个工具的原始手动操作一下,不了解的同学可以看这篇文章:Android中爆破签名校验新姿势,这样操作时候,会发现这个注解不会有问题了,而且签名也爆破成功了,运行正常了。

三、问题说明总结

到这里,本文内容就介绍完了,其实就是想说明一个问题也是破解过程中的一个经验值:在应用二次签名跑的时候发现闪退或者重启,也没有什么错误信息的时候,要想到可能是应用本身做了捕获全局异常的功能导致,所以只需要把这块功能注释即可看到详细的错误信息,然后在定位解决问题即可。

当然通过这个样本我们也发现了kstools这个工具的弊端,这个也有同学说了就是操作过于复杂,其实没必要将dex转化成jar然后在转成dex的,耗时而且最大的问题在于可能在转化过程中出错,操作多的同学会发现有时候在dex转化成jar或者是jar转化成dex会出现一些错误信息。导致后面无法进行了。这个是工具的最大弊端。所以继续优化这个工具,已经更新到github上了,直接将dex转化成smali,然后进行操作即可,这样的好处是原始的在Android基础上进行操作了,不会带来一些爆破后遗症了,比如本文案例用这种方式肯定就不会有问题了。

四、疑问解答

在很多同学使用这个工具或者用这种思想去爆破,提出这个问题就是如果将签名验证放到程序最开始入口,然后放到native层,这样就会爆破失败了,这里我再说明一下,就是这个爆破的思想是hook程序的pms服务,然后拦截获取签名信息的方法,而加入hook的代码已经是最开始的入口了,一般是attachBaseContext方法了,那么及时你在native层最开始入口,比如是JNI_ONLoad函数中也是无效的。有的同学又说了?那可以把加载so放到程序的入口Application的静态代码块中,这样时机是最早的了,其实想一想这样的确是最早,但是能在这里校验签名吗?要知道校验签名可能得用应用的context变量获取信息,你在静态代码块中是无法拿到这个变量的,及时你在native层也是一样,所以在静态代码块中提前load本地代码是不行的。比如这个样本案例,校验就在JNI_OnLoad函数中:

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

这里就是先获取全局的context变量,然后再去进行签名校验功能,这里有一个AppRuntime日志tag,我们可以打印我们爆破成功的日志:

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

看到这信息,说明已经骗过签名校验功能了,而这样做是不是非常的方便了,没必要再去分析代码找到签名校验的地方了,所以这个工具还是很有用的,准确的说是这个爆破思想非常有用。

最后还想在说明两点:

第一、有的同学说,这个工具对于加壳的app没用,就意义不大了,首先说明并非所有的应用都会加固,特别是大型应用,因为加固有分享,他们未必采用加固,其次是,现在有很多应用不仅加固了,还做了签名校验,所以如果你脱壳成功还可以借助这个工具进行操作了。

第二、通过最近同学给我反馈的使用意见和问题,这里就总结一下使用流程:

1、首先你的样本案例如果是加固的,那么请你先脱壳,脱壳之后在使用kstools工具,具体用法有说明。

2、如果对于一些非加固的应用在使用的过程中可能会出现爆破失败,比如kstools工具使用报错,签名校验爆破失效,程序闪退重启等问题,那么可能和kstools工具有关,所以这时候可能要手动的去添加hook代码了,这个我在前面的文章中也提到了操作流程了。最后如果还是不行,那么可以把样本发给我,我帮忙查看。

关于手动添加hook代码步骤这里在说一下大致流程:

首先去github/fourbrother/HookPmsSignature下载最新的hook代码,自己编译得到一个apk之后,反编译得到对应的smali代码,然后将其拷贝到需要破解的apk反编译源码目录下,然后在爆破app入口类添加hook代码调用,可以参见HookPmsSignature中的MyApplication/MyActivity类中的调用方式。注意hookPMS方法中的签名和包名需要改成你想要破解app的对应信息,关于应用入口可以在XML清单文件中查看,如果有Application类,直接在代码类中的方法attachBaseContext或者onCreate方法添加,如果没有就找到入口的Activity类,在其onCreate方法中添加即可。

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

kstools下载地址:https://github.com/fourbrother/kstools

HookPMS代码下载地址:https://github.com/fourbrother/HookPmsSignature

五、总结

关于签名爆破就讲这么多了,而这个工具也希望大家多多使用提意见,特别是在处理失败的时候记得将失败样本发给我,本文也提到了一个破解的经验就是出现闪退或者重启问题记得想起全局捕获异常功能代码。把这部分代码注释就可以看到错误信息,然后在详细跟踪解决问题即可,看完文章,记得多多点赞分享哈!

更多内容:点击这里

关注微信公众号,最新技术干货实时推送

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)
编码美丽技术圈
微信扫一扫进入我的"技术圈"世界
Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

扫一扫加小编微信
添加时请注明:“编码美丽”非常感谢!
Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)

Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)的更多相关文章

  1. [转]关于sdk更新Android SDK Tools 25.3.1版本后使用sdk manager闪退

    昨天这两个manager还工作正常,今天更新了一下,发现不可用了,运行avd manager和sdk manager没反应,搜了好多文章,然后看到了下这篇文章<关于sdk更新Android SD ...

  2. 我的Android进阶之旅------>Android中查看应用签名信息

    一.查看自己的证书签名信息 如上一篇文章<我的Android进阶之旅------>Android中制作和查看自定义的Debug版本Android签名证书>地址:http://blog ...

  3. Android app去掉https签名校验

    本文同步至http://javaexception.com/archives/30 问题: 之前的一个开源项目碰到了一个问题,Fix CertPathValidatorException: Trust ...

  4. android app调试没问题,但打包签名的apk,运行时出现闪退怎么办?

    在用Eclipse编写Android app时,有时调试时没有问题,但一经打包签名,运行就出现闪退,还报错说找不到某某类.一开始以为是混淆导致的,后来我没有混淆竟然也还是这个问题.无奈只得网上寻找解决 ...

  5. Android Studio 之 打包生成的 apk 安装包装到手机上闪退

    今天,在 Android Studio 中的模拟器中测试 app 程序正常,然后打包 apk 安装包程序,发给领导后,领导反馈安装后打开闪退,抓紧安装到自己手机上,发现果然存在闪退.查阅资料后,解决方 ...

  6. 浅谈android反调试之 签名校验

    反调试原理 很多时候,我们都需要进行修改修改应用程序的指令,然后重打包运行,重新打包就需要充签名. 利用签名的变化我们用于反调试.反调试实现代码如下: 为了更加隐藏,比较函数可能在SO层进行实现,如下 ...

  7. Android 开发之异常处理篇(一):SDK Manager 闪退的解决方法

    这个问题困扰了我很久,之前没解决,就放一放.后来我又专门拿了一个下午来找解决方法,终于搞定! 我的解决方法是修改 android.bat,直接指定java.exe所在位置,不用去调用find_java ...

  8. android黑科技系列——Android中新型安全防护策略

    一.前言 最近有一个同学,发给我一个设备流量访问检测工具,但是奇怪的是,他从GP上下载下来之后安装就没有数据了,而在GP上直接安装就可以.二次打包也会有问题.所以这里就可以判断这个app应该是有签名校 ...

  9. Android5&period;1&period;1 - APK签名校验分析和修改源码绕过签名校验

    Android5.1.1 - APK签名校验分析和修改源码绕过签名校验 作者:寻禹@阿里聚安全 APK签名校验分析 找到PackageParser类,该类在文件“frameworks/base/cor ...

随机推荐

  1. LogConfigruration

    import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import ...

  2. tuple内部方法

    代码: #tuple内部方法 ac=('a','r','6','d','a','b','b','e') print(dir(ac)) print(ac.count('a')) print(ac.ind ...

  3. SCRUM团队的三个角色

    Scrum团队中包括三个角色,他们分别是产品负责人.开发团队和 Scrum Master. Scrum 团队是自组织.跨职能的完整团队.自组织团队决定如何最好地完成他们的工作,而不是由团队外的其他人来 ...

  4. 200&period; Number of Islands

    题目: Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is s ...

  5. yii2 用gii生成后台模块 view path描述

    view path 格式: @backend/views/refund , 注意@和/

  6. The iOS Design Cheat Sheet 界面设计速参

    http://ivomynttinen.com/blog/the-ios-7-design-cheat-sheet/ With the release of iOS 7, app designers ...

  7. c语言中scanf()、printf()函数

    函数调用scanf(“%d”,  &weight) 包含两个参数:“%d” 和&weight.C用逗号来隔开函数调用中的多个参数: 但是printf()和scanf()函数比较特殊,其 ...

  8. Just for Today

    Just for today I will try to live through this day only and not tackle my whole life problem at once ...

  9. DOTween 相关API效果

    1,首先看一遍完整Tween路径 2,操作 DoPlay->DoRestart,DoRestart是从调用时刻重新开始开始执行Tween 3,操作 DoPlay->DoReWind,DoR ...

  10. String、StringBuilder、StringBuffer的区别

    这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > ...