一、前言

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

二、样本分析

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

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

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

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

Thread.setDefaultUncaughtExceptionHandler(this);

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

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

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

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

这个才是正确的,所以我们猜想这个可能和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函数中:

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

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

最后还想在说明两点:

第一、有的同学说,这个工具对于加壳的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方法中添加即可。

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

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

五、总结

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

更多内容:点击这里

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

编码美丽技术圈
微信扫一扫进入我的"技术圈"世界

扫一扫加小编微信
添加时请注明:“编码美丽”非常感谢!

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.1.1 - APK签名校验分析和修改源码绕过签名校验

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

随机推荐

  1. center os7.2 apache+php+mysql环境配置并设置https访问

    本人阿里云购买的center os7.2系统,小程序只支持https,因此需要配置https 安装apache yum -y install httpd systemctl start httpd a ...

  2. 【读书笔记】《深入浅出nodejs》第二章 模块机制

    1.什么是模块? 指在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分. ----<百度百科> 2.JavaScr ...

  3. 重新想,重新看——CSS3变形,过渡与动画②

    本篇文章主要用来归纳总结CSS3变形属性. CSS3变形属性大致可以分为以下三个部分: 变形控制属性 2D变形函数 3D变形函数 下面将对其一一进行分析: 1.变形控制属性 所谓的变形控制属性主要指“ ...

  4. 程序员清理xcode垃圾命令

    xcrun simctl list devices xcrun simctl delete unavailable

  5. 【Semantic segmentation】Fully Convolutional Networks for Semantic Segmentation 论文解析

    目录 0. 论文链接 1. 概述 2. Adapting classifiers for dense prediction 3. upsampling 3.1 Shift-and-stitch 3.2 ...

  6. 从0开始 数据结构 AC自动机 模板(from kkke)

    AC自动机模板 2.4.1 头文件&宏&全局变量 #include <queue> #define MAXN 666666 #define MAXK 26//字符数量 st ...

  7. hdu5616 暴力枚举

    2017-08-25 20:08:54 writer:pprp 题目简述: • HDU 5616• n个砝码,可以放在天平左右两侧或不放• m次询问,每次询问是否可以测出给定重量• 1 ≤ n ≤ 2 ...

  8. java将配置信息写在数据库(利用反射)

    Demo出处: 1. package com.fpx.pcs.prealert.process.xml.service.impl; public class CainiaoPushMessageSer ...

  9. shell基本认识

    shell基本认识 bash # echo $BASH /bin/bash 第一个shell脚本first_shell.sh #!/bin/bash echo "Hello world!&q ...

  10. 微信小程序------联动选择器

    picker 从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器. 先来看看效果图: 1:普通选择器 m ...