vmp版本某数后缀(10-6,js逆向)

本文详细解析了一个网站在提交验证码时所使用的后缀生成算法。通过抓包及跟栈分析,逐步揭示了从原始数据到最终后缀字符串的转换过程。涉及数组操作、位运算等关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看这篇文章的前提是:读者已经成功请求到了200页面
一、抓包分析
这个站在提交验证码的时候会将识别的内容加密放到后缀中,所以分析后缀也是无奈之举。
在这里插入图片描述

二、跟栈分析
下个xhr断点,提交验证码,找到这个地方
在这里插入图片描述
思路:open和send都经过魔改了,所以在这两个地方下断点。再提交验证码,断到open处的时候,进到vm代码里插桩,当在send处断下来时,后缀已生成,这部分的日志就是我们需要分析的。

插桩位置:进到vm层,全局搜length,
找到结构跟这个差不多的就对了,插桩内容JSON.stringify(_$iK)
在这里插入图片描述

三、算法分析(从后往前推)
1、首先是一个大数组(arr_final)经过一个函数转为字符串(后缀)

function get_suffix(arr_final){
    _$hv = ['q', 'r', 'c', 'k', 'l', 'm', 'D', 'o', 'E', 'x', 't', 'h', 'W', 'J', 'i', 'H', 'A', 'p', '1', 's', 'V', 'Y', 'K', 'U', '3', 'R', 'F', 'M', 'Q', 'w', '8', 'I', 'G', 'f', 'P', 'O', '9', '2', 'b', 'v', 'L', 'N', 'j', '.', '7', 'z', 'X', 'B', 'a', 'S', 'n', 'u', '0', 'T', 'C', '6', 'g', 'y', '_', '4', 'Z', 'e', '5', 'd', '{', '}', '|', '~', ' ', '!', '#', '$', '%', '(', ')', '*', '+', ',', '-', ';', '=', '?', '@', '[', ']', '^'];
    _$eZ = 0;
    _$aj = 0;
    _$av = _$ch['length'];
    _$k3 = new Array(Math["ceil"](_$av * 4 / 3));
    _$av = _$ch["length"] - 2;
    while (_$eZ < _$av)  _$c1 = _$ch[_$eZ++], _$k3[_$aj++] = _$hv[_$c1 >> 2], _$ah = _$ch[_$eZ++], _$k3[_$aj++] = _$hv[(_$c1 & 3) << 4 | _$ah >> 4], _$c1 = _$ch[_$eZ++], _$k3[_$aj++] = _$hv[(_$ah & 15) << 2 | _$c1 >> 6],  _$k3[_$aj++] = _$hv[_$c1 & 63];
    if (_$eZ < _$ch["length"]) { _$c1 = _$ch[_$eZ];_$k3[_$aj++] = _$hv[_$c1 >> 2];_$ah = _$ch[++_$eZ];_$k3[_$aj++] = _$hv[(_$c1 & 3) << 4 | _$ah >> 4]};
    if (_$ah !== undefined) { _$k3[_$aj++] = _$hv[(_$ah & 15) << 2];} 
   return  _$k3.join('')
}

2、arr_final = arr_4 + arr_549

//这里的arr_549长度不一定(arr_xxx)
arr_4 = []
_$_f(arr_4, number_549)  
arr_final = arr_4.concat(arr_549)

function _$_f(_$mM, _$$a) {
    if (typeof _$$a !== _$lb[4]) {
        _$$a = 0;
    } 
    _$mM[_$lb[10]](_$$a >> _$mJ[31] & _$mJ[25]);
    _$mM[_$lb[10]](_$$a >> _$mJ[13] & _$mJ[25]);
    _$mM[_$lb[10]](_$$a >> _$mJ[3] & _$mJ[25]);
    _$mM[_$lb[10]](_$$a & _$mJ[25]);
}

3、arr_549 = arr35 + arr512

//这里的arr_512长度不一定(arr_xxx)
//arr_35 = [1,0,32] + 35位数组里面第二位
arr_549 = _$b7(arr_35, arr_512); 
number_549 = _$bo(arr_549) ;

function _$b7(_$mM, _$$a) {  
      _$eW(_$mM, _$$a[_$lb[50]]);
      _$fi(_$mM, _$$a);
      return _$mM
}
function _$bo(_$ch) {
	  var _$hv,_$k3,_$eZ,_$aj;
	  if (typeof _$ch === "string") {_$ch = _$g$(_$ch);} 
	  _$hv = _$cM();
	  _$k3 = -1;
	  _$eZ = _$ch['length'];
	  for (_$aj = 0; _$aj < _$eZ;) {
		_$k3 = _$k3 >>> _$mJ[3] ^ _$hv[(_$k3 ^ _$ch[_$aj++]) & _$mJ[25]];
	  }
	  return (_$k3 ^ -1) >>> 0;
}

4、arr_512 = arr_498 + arr_21

//这里的arr_498长度不一定(arr_xxx)
//arr_21和生成cookie中的arr_20_to_21是一致的
arr_512 = _$kW(arr_498, arr_21); 

function _$kW(_$mM, _$$a) {
    var _$ei;
    if (typeof _$mM === _$lb[32]) {
        _$mM = _$cO(_$mM);
    } 
    _$ei = _$$O(_$$a);
    return _$ei._$ee(_$mM, false);
}

5、arr_498 = arr_cookie + arr_259

//这里的arr_259长度不一定(arr_xxx)
//arr_cookie就是生成cookie的数组
arr_498 = _$b7(arr_cookie,arr_259);

function _$b7(_$mM, _$$a) {  
      _$eW(_$mM, _$$a[_$lb[50]]);
      _$fi(_$mM, _$$a);
      return _$mM
}

6、arr_259由来

//获取关于后缀的259位数组
function get_arr_259(){
    _$mM = [];
    _$_f(_$mM,65592)  
    _$dE(_$mM, 1);  
    _$kk(_$mM, _$dO(_$mJ[43]));//35位数组的第10位运算得来
    _$_f(_$mM, _$_9[22]);  //35位数组的第19位运算得来
    _$li(_$mM, _$hc);  //flag_10_longnum
    _$_f(_$mM, _$iC); //arr_to_longnum(url1.toUpperCase())
    _$hh(_$mM, _$kd);  //_$kd为请求的url
    return _$mM
}

至此 关于后缀的所有算法都已分析完毕

三、请求验证

在这里插入图片描述
最后最后,真心谢谢十一姐的指导与帮助

爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取据并存储,以便后续分析或展示。爬虫通常由搜索引擎、据挖掘工具、监测系统等应用于网络据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标据,如文本、图片、链接等。 据存储: 爬虫将提取的据存储到据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型据库、NoSQL据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值