破解某班signature算法心得

tips:这是一篇有小知识的睡前小故事

一、抓包

电脑端工具使用Fiddler,Fiddler配置及手机代理设置百度一大堆,不再赘述,下面说一下抓包时遇到的坑,这些坑都是配置没问题前提下的。
1、证书不安全,据百度描述,是因为Android7以后用户添加的证书默认不安全,解决方法百度又是有很多,因为我的root不彻底,无法把system分区挂载读写,所以使用的是Xposed+JustTrustMe,使用以后即可正常抓包,如果Fiddler一直显示tunnel to,看我的这篇帖子 https://blog.csdn.net/qq_45704978/article/details/113801752。
2、为了照顾新手,把Xposed+JustTrustMe说的详细一点点。我的机型为OPPO R11,机型较老,百度有使用奇兔刷机工具解锁刷机的教程,按着一步一步来就可以,再去下载个有root和xposed的刷机包,如果只有root也行,自己再装个xposed,我的xposed没用root,直接rec刷入的。xposed装成后,百度下载.4版本的JustTrustMe,在xposed模块里面勾选重启即可。

请求头中有一项属性为signature,每次请求,前面大部分不变,结尾一部分一直变化,可以猜测为固定值+时间戳,退出重新登录,绝大部分都变了,所以可以猜测明文组成为 固定值+access_token+时间戳,加密方法为Base64(未知加密方法),经过这番分析,好像没什么用,先用最简单的方法测试一下能不能拿到加密方式,还是Xposed模块,名字叫Inspeckage,结果没抓到加密方式,对于一些简单的加密,这个方法简单快速。好吧,开始走上了一条反编译的不归路。

反编译

1、用MT看了一下显示 未加固(伪腾讯御安全),闹不明白到底有没有加固,百度好多教程都是脱壳打包完显示 “伪”,还是实战一下,发现代码被混淆了,不能草率了,只能认真反编译了。
2、首先使用大佬在GitHub开源的drizzleDumper,直接百度就有,需要用到终端模拟器,终端模拟器需要root权限,重点在su口令可以获取root权限,也就是在命令行输入su,然后回车。用法百度也有。。。。。但是我用着有异常,一直在导出dex文件。而且代码中并没有有价值的signature关键字(怎么看代码一会就会说)。
3、然后换工具,没错,又用到了Xposed,模块用反射大师。在反射大师里面打开易班,然后点中间红色的星星,点当前的ACTIVITY,点写出DEX,dex文件就被成功写出了,然后传到电脑,使用dex2jar-2.0把dex文件转为jar包,拖入jd-gui,搜索signature,即可找到关键算法
在这里插入图片描述
在这里插入图片描述
可以看出机密算法为Base64(DES()),明文为 id+access_token+时间戳,和猜的格式一样,然后把代码复制到eclipse测试一下,我只学过一点点Java,反编译也是看着百度一点一点操作的,加密也没学过,所以好多代码看不懂,只能是jd-gui里面的用到的类都复制进去,这可是一个大工程,费了好大劲,发现在反编译的Base64类里面的方法有bug,我绝望了。经过百度,原来所有的Base64算法都是一样的,并不是某班自己写的,于是百度了java Base64用法,算法就这么写出来了。
4、怕什么来什么,得到的结果和正确的signature并不完全一样,不是不一样,是不完全一样,只有开始的一部分是一样的,后面的不一样。这很上头,如果算法有错误的话,应该是全都不一样,如果明文不对的话。。。通过代码能看出来明文一定是对的,思绪一下子断了。
5、不知百度了多少篇文章,Windows端和Android端的Base64加密结果可能不一样,所以百度了一份SDK里面的Base64源码,作为自己的一个类,自己的算法不用JDK的Base64,用SDK的Base64类,然后测试,激动人心的时刻来了,没错,结果没有变!!!又一次崩溃!!!静下来,再想一想,会不会是DES的问题,因为我自己的代码里的getInstance()的参数必须是"DES/CBC/PKCS5Padding",不然会报错,而反编译的代码里是"DES",经过一番百度,果然有好多Windows端和Android端加密结果不一样的情况,我再复制一份SDK的DES算法就行了呗,万分开心,但是现实总是那么残酷,SDK并没有开源。。。。
6、DES还只是个猜想,我现在需要验证我的猜想,所以我只能搞个安卓环境自己测试一下,开始在eclipse装环境,装了两个小时,失败了。。。改战IDEA,还是输了。。。看了看磁盘,还有十几个G就要满了,不知不觉下载了一百多个G的东西。。。统统删掉,最后的希望,Android Studio,两个多小时,搞定了,Android Studio的错误主要就是虚拟机跑不起来,原因是我CPU是ADM R7 4700U的原因,试了百度的几个方法终于奏效了,但是,后来发现我用不到虚拟机。。。还有就是gradle下载好慢好慢,最后超时,去官网下载一个对应版本就OK了(飞机场,香!),就这样环境搞定了。
7、开始撸代码,写了个main方法,发现打印不出结果,百度发现安卓入口竟然不是main!好吧,找对了写代码的地方,开始运行,结果正确!!!!!!!!!!!
8、我从一开始,我就打算用eclipse写这个算法的,现在只能安卓端结果正确,又到死胡同了,还没想到好的解决办法,可能要转战安卓了,但是时间太紧了。。。。

感悟

正所谓,开车无难事,只怕有新人。一个加密算法搞了五天,但也印证了只要功夫深铁杵磨成针这句话,期间想过很多次放弃,但是有很多人以不同的方式激励着我,感谢生命中的每一个人,谢谢。
tips:上面的所有工具和用法百度都有,因为我都是自己百度的,所以没有过多的描述,因为是测试出最后结果才写的这篇文章,所以连接忘了用的哪个了。还有什么不足的地方欢迎指正。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

终于可以关掉了,舒服!

今天是2021年12月20日,芭比Q了,前一阵子他们进行了大规模升级,所有的api都改了,今天想重新抓个api,发现signature没有了,但是在请求的时候一直返回“不是最新版本”,除了密码的加密算法,其余都已经被我改成了最新的参数,所以我断定,他们把密码的加密算法改了,于是反编译了一下,发现密码的加密算法写到了native层。。。。对汇编一点不了解的我只能放弃了,呜呜呜。。。。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值