1.郑重声明

本次分析过程仅限于学习使用,请勿用于非法用途,若读者用于非法用途其造成的一切后果与本人无关

博客所写的所有算法还原均已开源在GitHub,地址

https://github.com/YotaGit/AlgorithmRestore

目标站点:https://www.xingtu.cn

2.女神鉴赏

不要慌,我们没有跑题,在分析之前我们来看看宅男供奉的女神都值多少钱

嗯不错,1分钟价值22万,这好像和我3000一个月工资并没有关系,我们回到正题去分析当前站点

3.参数加密点


只有一个加密参数点sign,现在追一下,看看它是怎么玩的

4.sign分析


通过这个A函数我们最终能定位到一个y函数

我们看看y还是倒是干了啥

当然这里会有一个s函数和一个r函数,那么下面的s函数的操作我相信不是你希望看到的

function(e, t, n) {var r, i, o, a, s;r = n("00d8"),i = n("9a63").utf8,o = n("044b"),a = n("9a63").bin,s = function(e, t) {e.constructor == String ? e = t && "binary" === t.encoding ? a.stringToBytes(e) : i.stringToBytes(e) : o(e) ? e = Array.prototype.slice.call(e, 0) : Array.isArray(e) || e.constructor === Uint8Array || (e = e.toString());for (var n = r.bytesToWords(e), l = 8 * e.length, c = 1732584193, u = -271733879, f = -1732584194, d = 271733878, h = 0; h < n.length; h++)n[h] = 16711935 & (n[h] << 8 | n[h] >>> 24) | 4278255360 & (n[h] << 24 | n[h] >>> 8);n[l >>> 5] |= 128 << l % 32,n[14 + (l + 64 >>> 9 << 4)] = l;var p = s._ff, g = s._gg, m = s._hh, v = s._ii;for (h = 0; h < n.length; h += 16) {var y = c, b = u, A = f, _ = d;c = p(c, u, f, d, n[h + 0], 7, -680876936),d = p(d, c, u, f, n[h + 1], 12, -389564586),f = p(f, d, c, u, n[h + 2], 17, 606105819),u = p(u, f, d, c, n[h + 3], 22, -1044525330),c = p(c, u, f, d, n[h + 4], 7, -176418897),d = p(d, c, u, f, n[h + 5], 12, 1200080426),f = p(f, d, c, u, n[h + 6], 17, -1473231341),u = p(u, f, d, c, n[h + 7], 22, -45705983),c = p(c, u, f, d, n[h + 8], 7, 1770035416),d = p(d, c, u, f, n[h + 9], 12, -1958414417),f = p(f, d, c, u, n[h + 10], 17, -42063),u = p(u, f, d, c, n[h + 11], 22, -1990404162),c = p(c, u, f, d, n[h + 12], 7, 1804603682),d = p(d, c, u, f, n[h + 13], 12, -40341101),f = p(f, d, c, u, n[h + 14], 17, -1502002290),u = p(u, f, d, c, n[h + 15], 22, 1236535329),c = g(c, u, f, d, n[h + 1], 5, -165796510),d = g(d, c, u, f, n[h + 6], 9, -1069501632),f = g(f, d, c, u, n[h + 11], 14, 643717713),u = g(u, f, d, c, n[h + 0], 20, -373897302),c = g(c, u, f, d, n[h + 5], 5, -701558691),d = g(d, c, u, f, n[h + 10], 9, 38016083),f = g(f, d, c, u, n[h + 15], 14, -660478335),u = g(u, f, d, c, n[h + 4], 20, -405537848),c = g(c, u, f, d, n[h + 9], 5, 568446438),d = g(d, c, u, f, n[h + 14], 9, -1019803690),f = g(f, d, c, u, n[h + 3], 14, -187363961),u = g(u, f, d, c, n[h + 8], 20, 1163531501),c = g(c, u, f, d, n[h + 13], 5, -1444681467),d = g(d, c, u, f, n[h + 2], 9, -51403784),f = g(f, d, c, u, n[h + 7], 14, 1735328473),u = g(u, f, d, c, n[h + 12], 20, -1926607734),c = m(c, u, f, d, n[h + 5], 4, -378558),d = m(d, c, u, f, n[h + 8], 11, -2022574463),f = m(f, d, c, u, n[h + 11], 16, 1839030562),u = m(u, f, d, c, n[h + 14], 23, -35309556),c = m(c, u, f, d, n[h + 1], 4, -1530992060),d = m(d, c, u, f, n[h + 4], 11, 1272893353),f = m(f, d, c, u, n[h + 7], 16, -155497632),u = m(u, f, d, c, n[h + 10], 23, -1094730640),c = m(c, u, f, d, n[h + 13], 4, 681279174),d = m(d, c, u, f, n[h + 0], 11, -358537222),f = m(f, d, c, u, n[h + 3], 16, -722521979),u = m(u, f, d, c, n[h + 6], 23, 76029189),c = m(c, u, f, d, n[h + 9], 4, -640364487),d = m(d, c, u, f, n[h + 12], 11, -421815835),f = m(f, d, c, u, n[h + 15], 16, 530742520),u = m(u, f, d, c, n[h + 2], 23, -995338651),c = v(c, u, f, d, n[h + 0], 6, -198630844),d = v(d, c, u, f, n[h + 7], 10, 1126891415),f = v(f, d, c, u, n[h + 14], 15, -1416354905),u = v(u, f, d, c, n[h + 5], 21, -57434055),c = v(c, u, f, d, n[h + 12], 6, 1700485571),d = v(d, c, u, f, n[h + 3], 10, -1894986606),f = v(f, d, c, u, n[h + 10], 15, -1051523),u = v(u, f, d, c, n[h + 1], 21, -2054922799),c = v(c, u, f, d, n[h + 8], 6, 1873313359),d = v(d, c, u, f, n[h + 15], 10, -30611744),f = v(f, d, c, u, n[h + 6], 15, -1560198380),u = v(u, f, d, c, n[h + 13], 21, 1309151649),c = v(c, u, f, d, n[h + 4], 6, -145523070),d = v(d, c, u, f, n[h + 11], 10, -1120210379),f = v(f, d, c, u, n[h + 2], 15, 718787259),u = v(u, f, d, c, n[h + 9], 21, -343485551),c = c + y >>> 0,u = u + b >>> 0,f = f + A >>> 0,d = d + _ >>> 0}return r.endian([c, u, f, d])},s._ff = function(e, t, n, r, i, o, a) {var s = e + (t & n | ~t & r) + (i >>> 0) + a;return (s << o | s >>> 32 - o) + t},s._gg = function(e, t, n, r, i, o, a) {var s = e + (t & r | n & ~r) + (i >>> 0) + a;return (s << o | s >>> 32 - o) + t},s._hh = function(e, t, n, r, i, o, a) {var s = e + (t ^ n ^ r) + (i >>> 0) + a;return (s << o | s >>> 32 - o) + t},s._ii = function(e, t, n, r, i, o, a) {var s = e + (n ^ (t | ~r)) + (i >>> 0) + a;return (s << o | s >>> 32 - o) + t},s._blocksize = 16,s._digestsize = 16,e.exports = function(e, t) {if (null == e)throw new Error("Illegal argument " + e);var n = r.wordsToBytes(s(e, t));return t && t.asBytes ? n : t && t.asString ? a.bytesToString(n) : r.bytesToHex(n)}}

5.sign算法还原

首先,从结构可以看出这是一个webpack,那我们是不是要启动常规操作了呢,其实不需要,不需要补环境,不需要扣webpack,我们用纯python的方法将其还原,效果very nice

博客所写的所有算法还原均已开源在GitHub


```bashdef get_sign_params(oai):"""核心算法还原"""salt = 'e39539b8836fb99e1538974d3ac1fe98'#这里举例两种params,其实已经够用了,使用前请替换达人或者主播的o_author_id为对应字符串params = [('o_author_id',oai), ('platform_source', '1'), ('platform_channel', '10'),('limit', '15'),('service_name', 'author.AdStarAuthorService'),('service_method', 'GetAuthorLatestItems'), ('sign_strict', '1')]params2 = [('o_author_id', oai), ('platform_source', '1'), ('platform_channel', '10'),('limit', '15'), ('only_ecom_live', 'only_ecom_live'),('service_name', 'author.AdStarAuthorService'),('service_method', 'GetAuthorLatestItems'), ('sign_strict', '1')]params.sort()sss = ''for i in params:sss += ''.join(list(i))sss += saltsign = 核心算法内容在群公告的text文件里,加我微信YotaGit拉你进群params.append(('sign', sign))params_data_dict = dict()for item in params:k = item[0]v = item[1]if k == v:if k == "recommend":v = "true"else:v = "false"params_data_dict[k] = vreturn params_data_dictif __name__ == '__main__':author_id="某个达人或者主播的o_author_id"result = get_sign_params(author_id)print(result)

巨量星图sign算法还原(头条系)相关推荐

  1. JS逆向之巨量星图sign签名

    文章目录 1. 目标网站 2. 初步抓包分析 3. 定位加密参数生成位置 4. 编码测试 往期逆向文章推荐: JS逆向之百度翻译 JS逆向解析之有道翻译 JS逆向之企名科技 JS逆向之人口流动态势 j ...

  2. 关于巨量算数jsvmp简单还原signature思路

    关于巨量算数jsvmp简单还原signature思路 也是头一次处理jsvmp,简单记录一下.因为不是补环境,所以介绍的会比较细碎,不然可能漏掉了,结果又会有问题 先说好,只是介绍思路哈,我只是个摸鱼 ...

  3. python 获取巨量星图数据

    巨量新图数据目前只获取了前端显示的数据,up主的详细信息有个前端加密,发起的请求需要sign对应才能拿到数据,而且星图的数据拿取到200条的时候就会监测出来,目前没有解决,有人找到星图的sign可以探 ...

  4. qq音乐sign算法还原源码放送及jsvmp全流程分析

    1.声明 本次分析过程仅限于学习使用,请勿用于非法用途,若读者用于非法用途其造成的一切后果与本人无关,若本文章侵犯了贵公司的权益请添加本人微信YotaGit联系删除 博客所写的所有算法还原均已开源在G ...

  5. app和web逆向算法还原案例源码分享

    1.前言 后续公众号将不再设置任何收费,只做算法还原源码分享并分享在github项目上 项目地址是:https://github.com/YotaGit/AlgorithmRestore 现已将之前公 ...

  6. JS逆向之巨量算数signature与data解密

    文章目录 data加密算法追踪 data加密算法还原 解决签名问题 往期逆向文章推荐: JS逆向之艺恩数据 JS逆向之网易云音乐 JS逆向之巨量星图sign签名 JS逆向之巨量创意signature签 ...

  7. 快消行业营销难?巨量引擎让生意每一步明明白白

    随着商业环境的快速变迁,快消行业的传统营销模式日渐退潮.在产品升级换代基础上以用户为中心的深度分销,成为挖掘市场存量的重要抓手;传统渠道基于"BC一体化"的"全链路数字化 ...

  8. 巨量引擎宣布DouCar2021升级计划,将探索更多商业模式

    12月1日,"破界 · 新可能"2020 DouCar年度盛典在北京举行.作为抖音商业化在汽车行业的重要IP,DouCar计划陆续推出了DouCar短视频营销创作大赛.DouCar ...

  9. 头条系 巨量算数 _signature

    文章内容仅供参考学习,如有侵权请联系作者进行删除 本文介绍一种生成头条系巨量算数web端接口"_signature"参数的思路,此思路应该适用于所有头条系_signature的生成 ...

最新文章

  1. 研究揭示大脑在工作记忆中存储信息的神经机制
  2. CentOS查看CPU信息
  3. php读取客户机本地时间,PHP如何获取客户端时区以及准确显示所在地时间
  4. iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比
  5. 【python教程入门学习】五、Python中的列表(list)
  6. 为什么数据库连接很消耗资源?
  7. Yii 2.0 权威指南 (5) 应用结构
  8. VC 控件的字体控制 若将字体设置成“宋体、仿宋—GB2312、隶书、幼圆”中的某一字体时,需将lfCharSet设置成GB2312—CHARSET才使设置的字体有效...
  9. teambition 还是jira_研发管理工具之 Id 比较(Jira/Teambition/TAPD/禅道)
  10. 集训模拟赛改题及总结(7月part)
  11. Gossip协议笔记--谣言、流行病协议
  12. phpstudy8.1安装duxcms3.1.3
  13. 复杂网络盘传播搜索关键字
  14. ThreeJs中给立方体设置没有对角线的border
  15. 苹果cms用Fusion app对接封装app源码教程
  16. centos7.5安装snipe-it v5.1.2版本开源资产管理软件
  17. [200902] 条件概率与独立事件
  18. 如何使用.bas文件
  19. oracle 日志 aw,DBMS_AW_EXP: not AW$
  20. jmeter压测使用实践

热门文章

  1. 从卖产品到建电站 我国光伏企业海外战略升级
  2. 行人检测:论文翻译Histograms of Oriented Gradients for Human Detection
  3. jetbrains系产品IDEA:mac上面提示快捷键设置
  4. [ZT]程序员的用户界面设计手册1-9章(作者: Joel Spolsky 译: 梅普华 MSWord繁简转换)
  5. 用Python程序实现语音识别就是这么简单!​
  6. tomcat隐藏版本号
  7. 判断字符是否为字母c语言,C程序检查字符是否为字母
  8. 微信检测开通号码软件|检测微信
  9. 10-21 查询S001学生选修而S003学生未选修的课程(MSSQL)
  10. 仿网易新闻客户端(一)