签名校验破解过程

签名校验破解过程

一、前提说明

我们知道Android中的每个应用都是有一个唯一的签名,如果一个应用没有被签名是不允许安装到设备中的,一般我们在运行debug程序的时候也是有默认的签名文件的,只是IDE帮我们做了签名工作,一般在应用发版的时候会用唯一的签名文件进行签名,那么我们在以往的破解中可以看到,我们有时候需要在反编译应用之后,然后从新签名在打包运行,这个又给了很多二次打包团队谋取利益的一种手段,就是反编译市场中的包,然后添加一些广告代码,最后使用自家的签名在此从新打包发布到市场中,因为签名在反编译之后是获取不到的,所以只能用自己的签名文件去签名,但是在已经安装了应用设备再去安装一个签名不一致的应用也是安装失败的,这样也有一个问题就是有些用户安装了这些二次打包的应用之后,无法再安装正规的应用了,只有卸载重装。那么这时候我们可以利用应用的签名是唯一的特性做一层防护。
签名校验破解过程_第1张图片
APP签名校验,主要作用是保护APP本身的安全利益,防止被违法分子进行内部代码和文件修改,然后插入广告等获利行为,进行违法操作。签名不通过的话有两种现象,第一种:签名校验不通过直接退出程序,也就是你会发现回编译二次打包运行失败的现象,第二种:签名校验不通过不触发程序指定逻辑,导致没有错误信息,也进不了应用的现象。
签名校验破解过程_第2张图片
Java层校验
我们为了防止应用被二次打包,或者是需要破解我们的apk的操作,在入口处添加签名验证,如果发现应用的签名不正确就立即退出程序,我们可以在应用启动的时候获取应用的签名值,然后和正规的签名值作比对,如果不符合就直接退出程序即可.
签名校验破解过程_第3张图片签名校验破解过程_第4张图片
NDK校验
NDK的签名校验,就是把关键的信息放入so文件中,然后在so文件中获取到相应的APP签名信息,然后在so文件中进行比较。
签名校验破解过程_第5张图片
签名校验破解过程_第6张图片签名校验破解过程_第7张图片
服务器验证
会把相应获取到的签名信息,直接上传到服务器,然后在服务器端进行一个签名的校验,或者请求服务器,服务器返回一个数据,与本地获取到的签名信息进行比较。

二、分析破解过程

今天我们分析一款曾经比较火的手游,贪吃虫大战V3.3版本。首先我们运行正常的app的现象是下面这样的,没有任何异样。
签名校验破解过程_第8张图片
然后我们再进行一次重新编译,问题就出来了,界面一直加载到99%,然后就是进不了下个界面,这个就是我们上面说的第二个现象,所以说明该运用是有进行签名校验的。
签名校验破解过程_第9张图片
首先我先全局搜索signature这个关键字,发现有一堆的地存在到signature,所以猜测可能有很多地方进行签名校验,所以我先看看是不是会先请求服务端,用burpsuite工具进行抓取请求包。
签名校验破解过程_第10张图片
一打开app之后,就有很多请求,其中有个特殊的请求,就是get_user_info这个请求。我们就全局搜索get_user_info这个关键字,这两个是定义的代码,然后全局搜索,看看那些有调用到这个方法。
签名校验破解过程_第11张图片签名校验破解过程_第12张图片签名校验破解过程_第13张图片
我们查看些调用到的位置,就一个地方,再点进去看。
签名校验破解过程_第14张图片
在这里插入图片描述
继续看调用的地方,又四个选项,我们要依次排除非相关的选项。
签名校验破解过程_第15张图片
最下面两个方法,主要是进行update下载方面的操作,所以可以排除在外。其中倒数第三个选项,主要是关于皮肤申请的操作。在我们请求中根本没有皮肤相关的数据,所以也去除掉,然后就剩下一个方法。 (下图是排除选项)
签名校验破解过程_第16张图片
我们打开那个选项,其中有useinfo的关键字,查看谁调用到这个e方法。
其中有三个选项,发现它们都是在一起的,但是关键的是a.a.e这个调用,前面有个run。在最上面有一个比较的判断,我认为就是比较前面信息。进去里面查看源码。
签名校验破解过程_第17张图片
签名校验破解过程_第18张图片签名校验破解过程_第19张图片
上面一看这是个两个判断,一个为真就成立,所以我们查看下h.a方法是字符串的构造算法,所以我们就编码下,看下是结果是什么。
签名校验破解过程_第20张图片
用esclipe进行编写,然后得到结果是,得到了相应的一个结果,看的有点像Md5的字符串。
签名校验破解过程_第21张图片
我们在打开equals后面的q.a的方法,发现这就获取app的签名信息,然后返回一个MD5值,然后在与a678a930b9829b54a44f92a840916f7d1这个签名信息进行对比,这就是这个app本身的签名校验的逻辑。那我们就直接修改smali文件,使得这个比较为正确。这里我们就直接用androidKiller这个工具进行操作。
签名校验破解过程_第22张图片
然后编译,运行app,但是发现还是不行,还是卡在相同的地方。所以我们就在回去查看原先的代码。
签名校验破解过程_第23张图片
在其中一个方法中,还有一个校验。所以我们在进行一个修改。
签名校验破解过程_第24张图片签名校验破解过程_第25张图片
所以我们还是像上面一样进行修改相应的smali文件。再次运行,发现还是卡在相同地方。现在回想一下,我们每次登录的时候,都是卡在进度条,所以,会不会在进度条的地方也是有进行一个匹配,这样的话,我们就尝试查找一下相应的进度条应该会有的代码。
签名校验破解过程_第26张图片
查看日志信息,尤其是看刚开始时候的日志。还有就是看看在请求列表中,是否有特殊的字符。我们看到config这个特殊的字符两个地方都有出现。查看到日志信息有个地方getconfigAndroid这个特殊的关键字,然后全局进行搜索。有三个选项。
签名校验破解过程_第27张图片签名校验破解过程_第28张图片
打开第一个,又是一个比较,又是一个获取app信息,所以再次进行修改。
签名校验破解过程_第29张图片在这里插入图片描述
修改后,进行运行,终于成功进入了界面!!!
签名校验破解过程_第30张图片签名校验破解过程_第31张图片

三、总结

最后做一个总结,这个就是一个本地的签名校验,通过多处地方获取本地的签名然后转换为MD5然后与算法得出的值进行校验,从而达到相应的签名校验的目的。处理这个过程其实就是要抓住关键字,还有就是分析相应得代码。本地得签名校验不是太过复杂,但是如果开发人员用心得话,就会像这个软件有多处的校验。如果是服务端的校验,我认为也是进行抓包,然后在代码查询关键字,然后在顺着进行分析。麻烦的在于把校验信息放在native层,如果在加上反调试,那么这样分析就会比较麻烦。
签名校验是目前比较快捷简便,成本很低的一个安全措施,所以注重这方面的加强,是非常有利于app的安全性的。但是如果每次这样操作下来,可能会花费很多时间,如果app没有一个反pticte注入的措施的话,我觉得可以使用xposed模块进行一个破解,这样又省时间,又省精力。所以下次可以的话,我将多食用xposed模块进行一个破解。

你可能感兴趣的:(android安全,android安全)