首页 > 其他分享 >h5st 4.3版本代码研究

h5st 4.3版本代码研究

时间:2024-02-02 12:11:21浏览次数:33  
标签:加密 4.3 研究 代码 h5st 算法 版本 var

背景介绍

最近比较悠闲,于是没事研究了一下某东的h5st代码,2024年新鲜出炉的前端加密代码;

最大的惊喜并不是算法的复杂,在逆向破解代码的过程中,对js加密混淆有了新的认识;

于是心血来潮,回到这里,写一份研究总结,供技术交流分享。


 

代码分析

拿到的代码是h5st的4.3版本

使用开发者工具,显示的风格是这样的:

 

直接搜索关键字"h5st",整份文件里面就出现了2次,所以这里很容易找到出口。(PS:如果还有4.4版本,建议把这个关键字也加密,加大破解难度)

注意看10787行这个switch语法,在研究的过程中,这个语法出现概率非常高,它的作用就是把串行的代码用switch改变了代码的书写顺序,例如:

var a = 1;
var b = a+1;
var alert(b)j

加密之后就变成了:

var config = '3|1|2';
var lines = config.split('|');
var i = 0;
switch(lines[i++]){
    case 1:
        var b = a+1;
        break;
    case 2:
        return alert(b);
    case 3:
        var a = 1;
        break;
}

 

还有就是变量的混淆,总体上分为两类:

// 原始代码
alert('hi');


// 加密后
function a1(t,r){
    return t(r)
}
function b1(t,r){
    return ['','hi'][t-r];
}
a1(alert,b1(699,698));

 

整个研究过程中,这些加密顶多是费点时间,要说最痛苦的,莫过于这一段:

    function Hv(t, r, n, e, o, i, u) {
        try {
            var a = t[i](u)
                , c = a.value
        } catch (t) {
            return void n(t)
        }
        a.done ? r(c) : Kv.resolve(c).then(e, o)
    }

这种不是串行的代码,类似无限递归的函数,理解起来最为费劲;

所以算法里面,最让人头痛的也是第8个关键参数,因为很难找到加密的原始字符串来源是什么。

庆幸的是,如果不是要求很高,那么可以按照它的格式,自己撰写一个,不需要去研究具体来源;

PS:如果想研究每个字段的计算过程,那么参考搜索的代码是"switch (t[kn(741, 0, p)] = t.next) "


算法总结

位置 字段名 说明   值格式   说明
1 time 时间字符串 20240131103354895  当前时间
2 fingerPrint 指纹 hnmy1t6fytuu1kt7  自定义算法,就是随机字符串删删减减,固定字符池:kl9i1uct6d
3 appId 应用编号 95cb4  业务页面的appId
4 token 令牌  tk02wad0d1bee41lMiszWWgySTRKO.. 下面这个对象的值.join('')

{
"magic": "tk",
"version": "02",
"platform": "w",
'adler32': "其它参数的校验",
"expires": "41",
"producer": "l",
"expr": "类似3+3+3+2x2的base64编码,生成sign会用到"
"cipher": "HmacSHA256结果,跟fp有关"
}

5 sgin 签名  c40d194fb4...

对请求参数进行HmacSHA256加密

加密使用的key生成算法

最初原始字符串:token + fp + timestamp + "22" + appid + "Z=<J_2";

从token中获取签名算法字符串,类似:3+3+3+2x2

数字表示用第一套加密,运算符,表示是拼接还是多种加密

6 version 算法版本 4.3  固定值
7 timestamp 毫秒时间戳 1706668434895  当前时间
8 sent 环境数据 bb7ef745bba685...

AES-128-CBC加密

原始字符串参考:

{
"sua": "Macintosh; Intel Mac OS X 10_15_7",
"pp": {},
"extend": {"wd": 0, "l": 0, "ls": 5, "wk": 0, "bu1": "0.1.9", "bu2": -1, "bu3": 43, "bu4": 0},
"random": "27_CACK7qU5",
"v": "h5_file_v4.3.3",
"fp": "xxx",
"bu1": "0.2.0"
}

 


 

测试过程

好不容易研究完准备验收

发现jd的所有接口都不验证这个参数

所以研究就到此为止了~

标签:加密,4.3,研究,代码,h5st,算法,版本,var
From: https://www.cnblogs.com/wslcn/p/18002592

相关文章

  • WordPress 技巧:解决 3.6 版本的 "wpdb::escape is deprecated" 错误提示
    来源:http://www.shanhubei.com/archives/13621.html升级到WordPress3.6之后,发现在debuglog中有很多以下的错误信息:Notice:wpdb::escapeisdeprecatedsinceversion3.6!Usewpdb::prepare()oresc_sql()instead.这个错误信息的意思是WordPress3.6将$wpdp类......
  • 对话董事长:Smartbi对话式分析大模型版本发布,AI+BI颠覆产品力
    编者按:在大模型浪潮下,思迈特最新发布了对话式分析大模型版本,实现大模型+BI结合应用的产品化,深受广大媒体的关注,近日,松果财经主编采访思迈特董事长-吴华夫,一起聊一聊大模型如何从技术层走向应用层,如何创造更多的商业价值。——————在大模型爆发一年后,人工智能的浪潮已席卷全球。......
  • CentOs在线安装MySQL最新版本
    更新系统yumupdate-y清理YUM软件包管理器的缓存(包括软件包文件和元数据,可以释放磁盘空间并删除旧的缓存数据)yumcleanall添加MySQLYumRepository:MySQL提供了官方的Yum存储库,可以通过它安装最新的MySQL版本。运行以下命令添加MySQL存储库:yuminstall-y......
  • 在Visual Studio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)
      本文介绍在VisualStudio软件中配置、编译C++环境下GDAL库、SQLite环境与PROJ库的详细方法。  GDAL库是一个非常方便的地理数据处理库,但其在C++环境下的配置与编译流程较为复杂;尤其是最新的GDAL3及以上版本,其在C++环境中的配置更是首先需要满足许多其他的环境配置条件(包括......
  • Dash 2.15版本新特性介绍
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master大家好我是费老师,Dash不久前发布了其2.15.0版本,新增了一些实用的特性,下面我们就来一起get其中的重点......
  • 第一个错误版本
    278.第一个错误的版本(Easy)问题描述:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有n个版本[1,2,...,n],你想找出导致之后所有版本出......
  • python多版本
    1、分别下载并安装两个版本的python2、去安装的文件夹中将python.exe和pythonw.exe改名加上版本号3、将python.exe文件目录和当前目录下的Scripts目录都加到用户环境变量中去重新安装pip注:若遇到Scripts文件夹中没有pip,则在cmd中运行python39-mensurepip(python39是修改p......
  • 幻兽帕鲁服务器游戏版本怎么升级更新?
    哈喽大家好,我是咕噜美乐蒂,很高兴又见面啦!幻兽帕鲁(MonsterHunter:World)是一款热门的多人在线游戏,玩家可以在服务器上与其他玩家一起探险、狩猎怪物。为了保持游戏的平衡性和提供更好的游戏体验,游戏开发者会定期发布更新版本。在本文中,我将为您详细介绍如何在幻兽帕鲁服务器上升级......
  • Canary 在软件发布时代表什么版本
    在软件发布中,"Canary"版本指的是CanaryChannel、CanaryBuild或CanaryRelease,它通常是指一种高频率更新且可能包含最新(但未经充分测试)功能和改进的版本。这种版本面向的是愿意接受较高风险并帮助开发者发现潜在问题的用户群体,比如开发者社区、早期尝鲜者或技术预览计划成员......
  • 解决proplot和Matplotlib版本冲突问题
    非原创,但忘记来源了,原作者看到请评论或后台联系我添加版权在环境内运行PY代码importimportlibimportosimportreimportsubprocessimportsysimportlogginglogging.basicConfig(level=logging.DEBUG,format='%(asctime)s-%(levelname)s-%(message)s')#Ju......