看这篇文章的前提是:读者已经成功请求到了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. GTX1080 安装 cuda 8.0 + cuDNN5.1
  2. springboot获取getBean方法以及ApplicationContext空指针问题解决
  3. ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输
  4. if ($this-getRequest()-isPost()) {
  5. UI设计优秀可临摹素材|网页设计头部技巧
  6. 怎样使用计算机上的高级共享设置,win7打印机共享怎么设置
  7. Toggle Buttons(二)
  8. Spring Boot入门(5)表单验证
  9. 开源究竟差哪了--- 关于开源软件和自由软件的区别
  10. 网络管理与维护基本知识
  11. 手动安装 VirtualBox 增强扩展包及 USB 设备无法识别的问题
  12. codeoforces 1467 B Hills And Valleys (枚举)
  13. 计算机技术对艺术的影响,数字化技术对当代艺术发展的影响--理论
  14. 视频教程-AI 教程illustrator从入门到精通-Illustrator
  15. 单片机简单Log日志封装
  16. Qt 内存管理与布局管理器
  17. javascript call用法及好处
  18. Web前端学习笔记——HTML5与CSS3之购物车宣传案例
  19. mysql纯数字用什么类型_用幸运数字起名美到极致,个性又独特,你的幸运数字是什么?...
  20. 大学四年,这些让我起飞的计算机必看书籍

热门文章

  1. 基于SSM框架的音频分享平台的设计与实现计算机毕业设计源码74192
  2. Android音频子系统(十四)------耳机杂音问题解析
  3. Java取整函数的使用
  4. 如何用windows自带工具检测磁盘性能
  5. 启用Ubuntu 服务器上的 mDNS
  6. 版本管理工具GIT篇
  7. 探索Android四大组件之广播
  8. ssm 框架上传图片到服务器
  9. 【日志】伯特兰-切比雪夫定理的小应用
  10. 基于 SpringBoot + VUE 【爱音乐管理系统】 平台设计与实现