看这篇文章的前提是:读者已经成功请求到了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为请求的urlreturn _$mM
}

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

三、请求验证


最后最后,真心谢谢十一姐的指导与帮助

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

  1. 瑞数5维普期刊js逆向

    网址首页http://lib.cqvip.com/ 瑞数5跟瑞数4区别不大,检测的东西多了一点,不会补的话可以看前面的瑞数4补环境.瑞数五有几个小版本,加密入口隐藏了,正则匹配直接能找到入口.\S{4 ...

  2. 【瑞数】维普期刊JS逆向4000字详细流程_1_获取接口签名

    文章目录 前言 过debugger 定时器debugger 死循环debugger 分析搜索接口 签名在何处生成? 中场休息 签名代码来源分析 签名代码在何处加载到内存? 注入代码 设置签名为全局变量 ...

  3. 某版本瑞数解决方案-爬虫

    某版本瑞数解决方案-爬虫 前言 工具 分析过程 JS获取 js代码分析 附代码 前言 本次采集的目标站点是江苏省农村产权交易信息平台,网址http://www.jsnc.gov.cn/jygg/tzg ...

  4. 【JS逆向系列】某乎x96参数3.0版本与jsvmp进阶

    [JS逆向系列]某乎x96参数3.0版本与jsvmp进阶 前言 初看js代码 补环境方案 修改字节码方案(反混淆与反汇编) 算法还原 后记 前言 距离上一次的某乎jsvmp也过了好一段时间,现在也从2 ...

  5. js逆向之补环境过瑞数5.0某银河证券,你还在拿某药监局做案例?该换换啦.

    网址: aHR0cDovL3d3dy5jaGluYXN0b2NrLmNvbS5jbi9uZXdzaXRlL2Nncy1zZXJ2aWNlcy9zdG9ja0ZpbmFuY2UvYnVzaW5lc3NB ...

  6. js逆向案例-某数美

    目录 一.案例分析 二.fveify校验分析-滑块/点选 1.滑块 2.点选 三.动态的js参数名以及密钥获得方式 四.DES/滑块缺口/轨迹xyt代码 一.案例分析 点击查看案例网址 如图regis ...

  7. java 浮点型 除零_Java-非零整数除以10等于0.0浮点?

    我有一个音量控制滑块来控制Android中音频文件的播放音量.Java-非零整数除以10等于0.0浮点? vSlider=(SeekBar) findViewById(R.id.seekBar2); ...

  8. 爬虫破解瑞数js逆向动态混淆

    巧用selenium破解瑞数js逆向 实战站点:湖北省生态环境厅:http://sthjt.hubei.gov.cn/site/sthjt/search.html?searchWord=%E7%A2% ...

  9. JS逆向之补环境过瑞数详解

    JS逆向之补环境过瑞数详解 "瑞数" 是逆向路上的一座大山,是许多JS逆向者绕不开的一堵围墙,也是跳槽简历上的一个亮点,我们必须得在下次跳槽前攻克它!! 好在现在网上有很多讲解瑞数 ...

最新文章

  1. android自学笔记《五》——模拟器的使用
  2. mysql两列数据去重_CiteSpace多数据库一键去重4.0-知网、万方、维普数据库
  3. 使用vue.js devtools遇到的磕磕绊绊
  4. 2090. 「ZJOI2016」旅行者 分治,最短路
  5. 网络安全-使用HTTP动词篡改的认证旁路
  6. 【数值分析】证明题一道
  7. Mysql执行计划查看
  8. 特斯拉中国公开统一维保价格
  9. azure云数据库_保护Azure SQL数据库免于意外删除
  10. BCD码和ASCII码的区别
  11. pytorch入门——构建神经网络
  12. 淘宝客升级助手V1.0 等级升级获取高级账户,淘客适用高佣金破解版
  13. basler相机参数简要中文说明_basler相机参数设置
  14. 【解决】Yandex浏览器Bing搜索遭遇trovi.com劫持
  15. 关于微信刷票的Python源码
  16. Qt 之 Concurrent Run
  17. MircoPython 的组件扩展方法
  18. CodeForces-1016C Vasya And The Mushrooms(模拟+思维+前缀和的前缀和) 解题报告 Apare_xzc
  19. 基于3D Sensor的触控与悬控高性能方案
  20. PHP-深入理解Opcode

热门文章

  1. linux相框应用程序,linux应用项目(一)数码相框(1)数码相框之系统框架
  2. 可以救命的生活小常识,关键的时候…
  3. yolov2-Tiny在darknet下训练模型转caffe再到ncnn实现
  4. 参数分析类毕业论文文献包含哪些?
  5. 死表燃气费引争议 业主称没用气凭啥要收费
  6. 云服务器饥荒_阿里云/腾讯云搭建饥荒服务器
  7. 我,人到中年,突然失业...
  8. Java中的正则表达式匹配过程
  9. PHPExcel导入Excel时长数字变成科学计数法调整
  10. java9新特性--jShell--命令语法改进:try语和接口的私有方法--String存储结构变更--集合工厂方法--模块化系统--InputStream 加强--增强的 Stream API