斗鱼APP签名校验绕过

转载自:http://www.secbuff.com/ios/215.html?d=3

0×00 说明

斗鱼是自己非常喜欢的一家直播平台,由于经常在斗鱼看lol比赛,加上又是武汉的互联网企业,所以就逆向了下斗鱼,看能不能过签名校验。

首先我们正常登录APP,可以正常加载APP各种页面,登录的时候再尝试用QQ号登录,会正常来到授权页面。如下图:

0×01 签名校验分析

一般APP的签名验证有3种:本地验证、网络验证、本地验证+网络验证,其中本地验证也分Java层和Native层验证。那么要分析APP的是否存在签名校验一般的方法是先反编译APP,然后直接回编译再签名,运行APP查看是否存在闪腿或者弹toast提示签名错误。斗鱼的签名验证有问题的时候会无法连接网络,如果再尝试用QQ进行辅助验证的话就可以很明显看出存在签名校验,如下图:

 

0×02 签名分析

首先我们在启动斗鱼的时候抓包,发现一处可疑之处:

header头中有个dy-sign的字段,我们是否可以猜测是不是签名校验中的网络校验,先把获取到的app校验值传给服务端进行判断,如果正确在是正版app。,否则就是伪造的app。那么我们直接反编译app,不做任何修改,启动自己签名的app后在把dy-sign改成前面获取的看看:

我们看到返回200,但是后面进去后太少加载网络失败,看来有可能存在本地验证。

根据前面介绍的,发现使用伪造签名的app时。进去后会提示无法连接服务器,加载失败的提示,所以就先根据这个错误提示来找找看:

上面的图片就是根据提示信息,找到这个提示消息所对于的string name,然后根据string name找到这个提示信息的ID号,在全局搜索ID号,查看哪里有调用的地方,一步步分析。

通过jd-gui查看调用的java代码,并没有发现有0x7f080304的地方,我们把0x7f080304变成十进制再搜可以搜索,但是并没有什么卵用。

 

0×03 分析android系统获取签名方法

我们知道如果要做签名验证,app必须调用系统的一个api方法:

packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES );
我们在看下packagemanager类实现:
下面是实现整个签名的过程
通过前面分析我们可以手动搜索signature或者getpackageinfo\getpackagemanager等等关键字进行找到签名的地方,再在smali代码中修改相应代码就可以绕过,但是这种方法太麻烦,通过全局搜索会得到大量的关键字信息,一个个看太耗时。此时我们可以直接hook系统的java.security.Signature这个接口,直接让系统获取的签名永远返回true,这样就绕过了app的签名校验了,直接用xposed就非常简单了:
public void initZygote(StartupParam startupParam) throws Throwable {
     
           XposedHelpers.findAndHookMethod( "java.security.Signature" ,null, "verify" , byte[].class,new XC_MethodHook(){
              protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                  XposedBridge.log( "disabled verifysignature......" );
                  param.setResult(Boolean.TRUE);
              }  
         });
通过这种方法就可以完美绕过app的签名校验。
0×04 总结
由于android的开源特性,可以说攻击者和保护者根本不在一个纬度上,对于移动端的安全来说,很多东西(反调试策略、加固)都可以通过研究源码来进行绕过,以达到攻击者的纬度。签名校验可以说是app最基本最重要的保护方法,如果app的签名被逆向绕过的话,恶意攻击者就可以写入任意恶意代码,发布到各种平台上让用户下载,从而实现恶意行为(短信拦截、偷开摄像头、录音、支付监控、激活设备管理器防卸载等等)。
对于签名保护,比较好的方法是本地验证+网络验证。对于本地验证要求验证在native层中进行,然后需要对相应的so进行加固处理。网络验证就需要对上传的sign参数进行处理,避免用户直接拦截数据包进行替换绕过验证

转载请注明:SecBuff » 斗鱼APP签名校验绕过


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值