大家好,我是黑骑士,论坛的一名不成器的小开发小码农,今天我们讨论的话题相对敏感性和技术性,废话不多说进入正题
《关于JS逆向的十八般武艺都有哪些?》
以下是以登录报文为背景,个人经验中的一个概述吧,可能有所缺陷与过时,本贴仅作学习讨论,欢迎各位大佬们显示自己的 “JS逆向之降龙十八掌”
JS逆向是衍生在爬虫、HTTP模拟技术中的,一般我们会通过报文的分析模拟来预测“加密项”,然后通过“十八般武艺”来实现官方客户端请求服务端的一个过程,上重头戏的第一项↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
一、HTTP 报文解析
在F12抓取到一个web的服务器通讯的http报文请求时,往往我们会关注这几点内容 - HTTP请求地址
- 请求方式
- 请求参数
- 请求协议头
- 请求Cookies
二、加密项的揣测
参数:
参数就是请求体这里针对不同的请求方式有不同的概念英文称为requestParam和requestBody,观测报文后第一点我们关注的就是参数了我们会看到我们在web页面表单域提交的数据或部分数据或者根本没有数据,这里就诞生问题了 问题一:为什么只有部分数据 问题二:为什么没有数据,但是返回值真的是登录的返回数据包 答:可能敏感数据在客户端(web)已经进行了相应的加密值处理,举例一个用户名和密码 - #第一种
- user=a123456&pwd=202cb962ac59075b964b07152d234b70
- #第二种
- data=e9858915767179c31e79c2fff9bc719d4035e760906175d1048c13ea8f6efdaacc5ec837d04e6a4c8cd1a8feacd13f976ec7f5efeb575592a2294b8c6b6a603f
- #第三种
复制代码这样的就是一个加密处理或者其他方式传递的“请求体”,但是我们无从得知是什么加密方式 协议头: 协议头就是请求头英文称之为requestHeader,那么常见的协议头有以下几点 - Host: 2.kr887.com #主机地址
- Connection: keep-alive #<span style="box-sizing: border-box; outline: 0px; color: rgb(77, 77, 77); font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: rgb(255, 255, 255);">表示使用</span><span style="box-sizing: border-box; outline: 0px; color: rgb(77, 77, 77); font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: rgb(255, 255, 255);">Keep</span><span style="box-sizing: border-box; outline: 0px; color: rgb(77, 77, 77); font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: rgb(255, 255, 255);">-</span><span style="box-sizing: border-box; outline: 0px; color: rgb(77, 77, 77); font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: rgb(255, 255, 255);">Alive</span><span style="box-sizing: border-box; outline: 0px; color: rgb(77, 77, 77); font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: rgb(255, 255, 255);">方式,即数据传递完并不立即关闭连接</span>
- Accept: application/json, text/javascript, */*; q=0.01 #<span style="color: rgb(77, 77, 77); font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: rgb(255, 255, 255);">表示我们所用的浏览器能接受的Content-type</span>
- User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 #浏览器客户端信息
- X-Requested-With: XMLHttpRequest #标识为AJAX请求
- Referer: http://2.kr887.com/?buyok=1 #请求来源页
- Accept-Encoding: gzip, deflate #<span style="color: rgb(51, 51, 51); font-family: "PingFang SC", "Lantinghei SC", "Microsoft YaHei", arial, 宋体, sans-serif, tahoma; font-size: 16px; background-color: rgb(255, 255, 255);">向服务器申明客户端(浏览器)接收的编码方法,通常为压缩方法</span>
- Accept-Language: zh-CN,zh;q=0.9 #<span style="background-color: rgb(255, 255, 255); color: rgb(77, 77, 77); font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px;">是语言和编码信息</span>
复制代码那么有时候我们会遇到一些其他没见过协议头的比如:TOKEN、DATA、TIMESTAMPE、AUTH-TOKEN等等等等,那么这些可能是这样的形式 - TOKEN: dc3a85a541addb8dd88f20ecb53630b589632de5e9e63c49a78e57c68603448d66fa5824ee7fa2edd96b75979cc1db2b9257fabf056ee57a081eb9a708ecd183
复制代码这些呢,其实也是客户端传入进来的加密项,需要逆向师傅们来解析模拟算法的了 Cookie: cookie是我们可以在协议头种看到的一个数据,这个数据区别于协议头,它也是http报文中一个组成部分cookie不是饼干,而是存储在计算机本地终端的一种数据,也是一个key-value形式存储的,有时我们的数据也会藏在这个里面发送给服务器方,当然伴随问题有如上的加密情况 - a=83ab1c68acb086de988f5033f30898359ed15704627d602058bc80a98c1fe6f0d3ae89c803c9599553668bc28b36f60490feb8b3381462e3aab765f0bfe04110;b=477256dc850934f08aac04d3d3c175369db18db83bcba2d74b117083afdbe533821589f65797c1644d5a04b5506f7f5b42fdcf760b25f4bee5a0b75dab36c2;monitor_count=5
复制代码三、加密定位 URL: 我们可以拿到URL地址上面的地址比如http://www.baidu.com/api/login 我们可以用 api/login作为搜索的关键词进行搜索定位到发送请求的这个步骤
参数名/协议头/Cookies: 利用参数名、协议名、Cookies全局搜索定位,然后看局部代码,进行定位是否发送请求的步骤然后观测数据参数的获取和组装,进行动态调试+静态分析 请求调用栈: 直接定位到请求发送的地方,然后向上追溯,找到参数数据组装的起点,可以理解为从终点倒退到起点的地方
往下呢。。。就是我们看到了数据代码组装数据的过程了,无非是跳来跳去的代码,还有混淆,无法动态调试debugger的,这些呢不作为今天讨论的主题,我们综上所述,共享出自己和大家有什么逆向遇到的问题或者自己的套路
我就遇到过很多调用栈追溯的时候线程隔离的,参数一直向上跑跑不到尽头而失去耐心的情况也有。混淆的JS难以还原的,根本就定位不到地方的,因为加密是一进入页面就开始的缘故,此时找不到切入点了等等等各种问题的发生
然后呢欢迎各位新人!大佬分享自己的心得与经验 以致于共同学习!共同进步! 
|