该文章主要提供交流学习使用,请勿利用其进行不当行为!
如本篇文章侵犯了贵公司的隐私,请联系我立刻删除!
如因滥用解密技术而产生的风险与本人无关!
现已有接口支持调用获取 接口地址
可以先看看这两篇大佬的文章:
- https://my.oschina.net/u/4637160/blog/4556955
- https://github.com/Captain0X/SliderCracker/tree/master/shumei
https://blog.csdn.net/zc520yzy/article/details/105101394 这篇文章是基于pyppeteer的实现。
大佬们研究的是pc的方案,我这里只讲app的,跟pc通用的。
这是当时研究app的时候的url以及参数
https://captcha.fengkongcloud.com/ca/v1/register?organization=eR46sBuqF0fdw7KWFLYa& timestamp=1600423466824& md5=134f31ec595ccd6464e86c164fdfdc8f& pri=一串加密的,你们抓包就能看& code=1& ca=一串加密的指纹
这串东西是app里面生成的,用的那家的sdk,相信你们都懂的。
其实pri 和ca这两个指纹是可以固定的,就是验证设备
主要就是md5加密和时间戳的验证。
com.ishumei.sdk.captcha.SmCaptcha
这是关键类
public static WebResourceResponse a(String str)
主体方法
可以看到他这里把一些字符串加密了,直接扣代码先把字符串解密了,要是jeb的话,估计就直接反编译出来了
9c9e -> ca
private static String a(String str, String str2) {try {return new SmCaptcha().x2(str, str2);} catch (Throwable th) {throw new IOException(th);}}
这其实就是ca的加密,在so层str 就是pri,str2 是一个hashmap,具体你们hook就行
这是x2 的流程,倒是没多少混淆,就是控制流太多了。硬钢的同学这个可以刚出来的,或者做xposed插件,黑盒也能用的。这仅仅是比较老的一个版本,现在应该升级了,不过具体加密思路肯定不会变的。就是混淆加了而已,最后加密出来的是一个aes的加密,不过这个是和pri绑定的,也可以像我说的那样,写死。
然后在回过头来看看md5的成验证
929bca -> md5
服务端是会验证这个值的
md5对不上就提示这个。
public native String m2(String str, String str2);
md5的生成方式
又到了你们最爱的native的环节
这是一串盐,在md5,就是md5的结果了
s 就是 ca
v35 就是时间戳
当正确之后,会提示
sm_1600423473006({"code":1100,"message":"success","requestId":"9bf71d37b982da3558c9b69484fe1b84","riskLevel":"PASS","score":0,"detail":{"bg":"/crb/set-20200506/v4/6da5c9178bb069450044cfcc32dd11f6_bg.jpg","bg_height":300,"bg_width":600,"domains":["castatic.fengkongcloud.com","castatic-a.fengkongcloud.com"],"fg":"/crb/set-20200506/v4/6da5c9178bb069450044cfcc32dd11f6_fg.png","k":"Ao1ZgBvJlFQ=","l":8,"rid":"202011201027377828132283b356af1e"}})
会返回一个rid,
接下来就用web端这一套去解密参数了
具体实现,上面那个github已经说的很详细了
然后主要就是安卓的回调的值
现在已经25代了,几乎这几天每天都换。头疼死了
然后就是 app的图片大小比例是
pc 的是200/400
验证成功之后,这个rid就可以用了,
然后在带着你的设备信息去验证,461就解封了。
api/sns/v1/system_service/slide_captcha_check
这是提交的接口,然后成品的话也没多少含金量。其实结合我给出的地址和这些思路,完全能写出来以及适应现在的需求。