瑞数 Botgate 多用于政企、金融、运营商行业,曾一度被视为反爬天花板,随着近年来逆向大佬越来越多,相关的逆向文章也层出不穷,真正到了人均瑞数的时代了,这里也感谢诸如 Nanda、懒神等逆向大佬,揭开了瑞数神秘的面纱 过瑞数的方法基本上有以下几种:自动化工具(要隐藏特征值)、RPC 远程调用、JS 逆向(硬扣代码和补环境),本文介绍的是 JS 逆向硬扣代码,尽可能多的介绍各种细节。 MmEwMD=4xxxxx 就是4代瑞数,bX3Xf9nD=5xxxxx 就是5代瑞数:图片图片图片图片4、看 Cookie,瑞数 3、4 代有以 T 和 S 结尾的两个 Cookie,其中以 S 开头的 :数字 443 是 https 协议的默认端口号,对应 https 请求,其值第一位为 4,表示 4 代瑞数。 在后续逆向分析中再详细介绍),示例如下:3 代:_$aW = _$c6[_$l6()](_$wc, _$mo);,_$c6 实际上是 eval,_$l6() 实际上是 call;图片4 代:ret =
第三题和第四题跟Js逆向没有什么关系,本来是不想发的,为了排版好看也发这个专栏里吧。 page=4') print(d.text) 第四题:《雪碧图、样式干扰》 这个数字是无法选中的,因为以图片的形式加载出来,这种css做映射的方式在市面上还是很常见的。 测试方法:(打印出所有不同class的数量)(尽管在js中也能找到解决方法) import requests from lxml import etree url = "http://match.yuanrenxue.com /api/match/4? requests from lxml import etree for page in range(1,6): url = f"http://match.yuanrenxue.com/api/match/4?
var token = md5(String(page) + String(num) + String(timestamp)); 这段代码我们可以用 js 实现也可以用 python。 分析请求 这次要分析的网站不同上一个的是,这次网站使用的是 cookie 加密, cookie 的有效期过了之后就会返回一段 js 。 ? 使用有效的 cookie 请求我们需要的数据就在返回的网页中,所以我们只要解决这段 js 就好了。 ? 分析加密 把返回的 js 复制到编辑器里格式化,可以看到代码分为两个部分: 参数定义部分: ? 到这里加密就分析结束了,获取全部代码,请后台回复「JS逆向」 加密二,完。
0x01 简介 文章较长,为保证有效传递知识,已经为大家准备了 PDF 版本,放在了文末 JavaScript代码混淆是一种通过对代码进行转换和修改,使其难以理解和逆向工程的技术。 下面是混淆JavaScript代码的一些主要意义: 防止代码被逆向工程:混淆使得代码的逻辑变得晦涩难懂,使攻击者难以理解代码的运行原理。这可以防止恶意用户或竞争对手直接分析、修改或复制您的代码。 /UglifyJS/ https://github.com/LiPinghai/UglifyJSDocCN/blob/master/README.md 使用方法 npm install uglify-js 根本就不重要,因为它完全可以做成一个黑盒子,随意自定义的对原代码的字符串进行修改,之后提供最终的字符串以及逆向还原的过程,最终通过 eval 来执行,所以回到我们的初衷,我们分析这种混淆压缩所采用的知识点 +[]+[+[]]]) 0x04 一些感想 代码混淆是一个代码保护以及阻止逆向分析的优解,但是我感觉不像是最终解,我相信代码混淆会在最终解中继续扮演重要角色 感谢创造代码混淆工具、方法以及与其对抗寻求解密的人
var token = md5(String(page) + String(num) + String(timestamp)); 这段代码我们可以用 js 实现也可以用 python。 ? 分析请求 这次要分析的网站不同上一个的是,这次网站使用的是 cookie 加密, cookie 的有效期过了之后就会返回一段 js 。 ? 使用有效的 cookie 请求我们需要的数据就在返回的网页中,所以我们只要解决这段 js 就好了。 ? 分析加密 把返回的 js 复制到编辑器里格式化,可以看到代码分为两个部分: 参数定义部分: ? 到这里加密就分析结束了,获取全部代码,请加我微信回复「JS逆向」
逆向目标目标:东某航空某数指纹 v4 设备 ID 逆向分析 网站:aHR0cHM6Ly93d3cuZG9uZ2hhaWFpci5jb20v抓包分析打开网站,找到返回机票信息的机票查询接口 flightSearch 点开调用堆栈,都是由 fp.min.js 文件加载出来的,进入后,发现经过 ob 混淆了,不过通过搜索也能轻松定位到。 0x484fb9 函数的赋值操作,即可定位到 ep 参数生成的位置:_0x1dbb2a,由上面的 getUid 函数生成,就是 uuid:_0x3f6bcc['publicKey'],通过全局搜索发现由 api.js 最后就是对明文的分析了,由一些浏览器环境、加密参数等信息构成,通过 sent 接收 ,由 _0xa0ac38(_0x4c1ea4['Protocol']) 返回,分析几个加密参数:Protocol,与上面包含 + 0x0), _0x317aff, _0x163575, _0x4fa2e9, _0xd556d6, _0x1ccff8, _0x5a4c0d, _0x5b0ca1, _0x229546, _0x539a5b
前言近期在知识星球中,有位星友在逆向一个航司的时候,遇到了点阻碍,向我提问,本期就对该网站进行逆向分析:逆向目标目标:cebupacificair 航空查询逆向分析网站:aHR0cHM6Ly93d3cuY2VidXBhY2lmaWNhaXIuY29tL2VuLVBILw 是另外一个 ceb-omnix_proxy 接口返回的:该接口有四个参数需要分析,也是有两个 content,估计都大差不差,我们继续先搜索,发现 authorization 是 main.xxx.js 文件返回的:而 main.xxx.js 文件是通过首页加载的,大致流程都梳理清晰了,我们开始进行逆向分析:逆向分析cookie 值从头开始,我们请求首页,发现他并没有返回 main.xxx.js 文件 第一个 ceb-omnix_proxy 接口第一个 ceb-omnix_proxy 接口我们用 xhr 断点来跟:清空缓存,刷新网站,跟到第一次进入 main.xxx.js 文件的位置,发现 e 变量中已经生成了 ,过程非常清晰,uniqueId 由 window.crypto.randomUUID() 生成,Us 是由 main.xxx.js 文件返回,通过搜索就可以找到。
逆向JS(JavaScript)通常指的是对已经编译或混淆的JavaScript代码进行分析、理解和修改的过程。这通常用于安全研究、软件破解、漏洞分析、或理解某些复杂的或混淆的代码。 逆向JS的过程可以相当复杂,因为JavaScript可以被多种方式混淆和保护。 以下是一些逆向JS的基本步骤和技巧: 代码美化(Beautify): 使用工具如JSBeautify或Prettier将混淆的代码转换为更易读的格式。 这可以帮助你发现代码中的错误或不一致之处,并验证你的逆向工程成果。 遵守法律和道德准则: 在进行逆向JS时,务必遵守相关的法律和道德准则。 请注意,逆向JS可能是一个复杂且耗时的过程,需要一定的编程经验和对JavaScript的深入理解。如果你是初学者,建议从简单的代码和示例开始练习,并逐渐增加难度。
某游戏站麻将数据逆向,该页面数据在网页源码中无法找到,源码上没有,网页调试是存在数据的,数据是js文件驱动生成,需要JS加密逆向分析,逆向思路和方法知道借鉴和参考,可以说本篇是步步踩坑! 建议:JS逆向,JS基础是关键,JS基础语法学习一定不要落下! 踩坑的根本原因在于:仅仅扣取JS代码是不行的,得会调试代码,能够修改代码,对于JS代码运行报错能够进行基本的处理和修改,使其正常运行! 网址: aHR0cHM6Ly9ob3RlbC5iZXN0d2Vob3RlbC5jb20vTmV3TG9naW4vP2dvPWh0dHBzJTNBJTJGJTJGaG90ZWwuYmVzdHdlaG90ZWwuY29tJTJG 更多或如有时间,可看视频版解析: 一 探寻 JavaScript 反爬虫的根本原因和基本原理-夜幕NightTeam(B站) https://www.bilibili.com/video/BV16e4y1G7xv 2&vd_source=fcecddad2b6d926771ba73e82af70880 以下为踩坑过程: 打开网页查看数据 2.查看需要获取的数据html代码片段 3.python 爬取效果,无数据 4.
一个小说网站文字内容加密,不用说,肯定也是js加密,加密特征也比较明显,尤其是适合新人学习js加密逆向分析数据和内容,算是比较简单,只需要扣取代码,直接用获取的加密参数运行即可获取数据内容。 aHR0cHM6Ly93d3cuY2l3ZWltYW8uY29tL2NoYXB0ZXIvMTAzNTQzODcy 特征: 数据内容为加密数据段 打开目标网址,访问网站 2.获取加密数据,找到加密特征 3.老规矩,根据特征,搜索关键字,这里我们搜索 chapter_content 4. 结果非常明显,只有一个加密js文件,继续搜索 chapter_content 5.打开至面板,下断点,可以多下几处 6.断点调试,刷新页面 7.可以看到加密数据出现,继续下一行调试 8.接着调试,可以看到解密函数 PS:建议补好js基础知识! 最后还有一个参数需要获取到! 可惜的是在 Python 爬取中还是存在限制,没有获取到数据! 参考来源: Python爬虫进阶必备 | 某小说(XX猫)网站加密分析-咸鱼学Python https://mp.weixin.qq.com/s/STAWu31fQakOgROfCs-4-g ·····
第三步:分析解密逆向参数 关于 password 一般网站登陆密码的加密,没有特别设置的话,一般都是md5加密,通常使用的MD5就是会生成32位的和64位的不可逆的加密字符串! 2.获取到搜索结果,定位到js文件 ? ? 3.进入到js加密文件中 ? 4.老路子继续搜索参数名codeKey ? 5.获取到位置,分别查看分析 ? ? ? 6.工具栏js调试查看 ?
逆向目标 目标:有道翻译接口参数 主页:https://fanyi.youdao.com/ 接口:https://fanyi.youdao.com/translate_o? smartresult=dict&smartresult=rule 逆向参数: Form Data: salt: 16261583727540 sign: 151e4b19b07ae410e0e1861a6706d30c bv: 5b3e307b66a6c075d525ed231dcc8dcd 逆向过程 抓包分析 我们在有道翻译页面随便输入文字,可以看到没有刷新页面,翻译结果就出来了,由此可以推断是 Ajax 加载的, 参数逆向 salt、sign、bv 三个加密参数,全局搜索任意一个,搜索结果比较多,依次对比,可以发现 fanyi.min.js 文件第 8969 行左右开始,Form Data 所有的参数都齐全了,埋下断点调试一下 ,使用 nodejs 里面的加密模块 CryptoJS 来进行 MD5 加密,改写 JS 如下: // 引用 crypto-js 加密模块 var CryptoJS = require('crypto-js
前言最近又有小伙伴在逆向某网站的时候,碰到了点棘手的问题,过来询问 K 哥。经过分析,该网站既有加密参数,又使用了 WebSocket 协议来传输数据,正好可以丰富 JS 逆向百例专栏。 本文将对其进行逆向分析,仅作为学习研究:逆向目标目标:某 Hospital,逆向分析网址:较为敏感,感兴趣的小伙伴,私聊逆向过程抓包分析打开开发者人员工具,刷新网页,会发现被断住了,经典的无限 debugger B8%82%E7%AC%AC%E4%B8%80%E4%BA%BA%E6%B0%91%E5%8C%BB%E9%99%A2%E5%8C%BB%E7%94%A8%E7%94%B5%E5%8A%A8%E9%97% A8%E7%BB%B4%E4%BF%9D%E6%9C%8D%E5%8A%A1%E9%A1%B9%E7%9B%AE%E8%AF%A2%E4%BB%B7%E5%87%BDBase64 编码解码:https: 跟到 app.07b0b337.js 文件中,代码未经过混淆处理:该处创建了一个 Promise 对象,往上跟,会发现,h 就是 post 请求中,data 参数的加密结果:h = w["encryptSessions
看了他们这个说明可能以上两个功能相对比较吸引人: 因为加密和压缩这种太容易被人分析了,原理比较简单; 控制流混淆对于逻辑的处理能够增大分析难度,原理上其实就是分析js得到语法树,通过操控语法树,比如对于 2.Js2x http://ty2y.com/obfuscate/#how-to-use ? 这个跟上面那个多态变异是一样的。 vmp 最强的,这种方案其实也是很好理解的,比如对于一个js代码来说,我们只用js操作写一个基于栈的解释器,然后对于本身要保护的js进行虚拟化,定义一堆自定义操作,这个时候其实还是比较弱,因为全部是 4.腾讯防水墙 https://segmentfault.com/a/1190000015216576#articleHeader8 腾讯防水墙这个根据自己的业务需求,以及动态多样性与服务端结合相当于混淆保护出多套 总结 对于 js 这种语言来说,由于语言本身的特殊性,一定的保护是非常必要的,再结合浏览器本身的发展,为了性能会在编译上做处理,引入本地层的东西,比如谷歌的 V8 ,火狐的 asm.js 在安全性上:业务上更多的结合服务端动态特性以及客户端强大的静态代码保护的设计会达到一个比较好的效果
转载自 三尾先生 博客 初探js逆向 在开始之前想先说下阅读完三尾先生这篇文章的一点个人理解,文章写得挺好的,很值得新手学习了解,首先谈下逆向激活成功教程思路 1.需要逆向的时候一般是遇到了加密问题 2.先找到加密的字段名,通过字段名在sources全局搜索 3.在含有这些字段的位置打断点,一般sources里看到的会是一行的压缩代码,我们可以通过点击左下角的双大括号格式化js代码 4. 而请求参数的加密一般就需要反复断点了,先断点到加密完成(即ajax发送参数值)然后再反复断点一步一步的往上推直到原始参数的传参; (下面就是三尾先生 初探js逆向的原文了,很值得阅读了解练手) 前言 js逆向是让爬虫萌新们比较头疼的一块领域,因为市面上大部分的爬虫书籍等教程都未涉及这方面知识,需要爬取用js加密的网站时常常无从下手,只能使用selenium等自动化框架来模拟人工点击。 但这种方式往往效率低下,所以本文将以企名片这个网站为例,带大家初探js逆向。
分享另一个破解JS登录的案例 抓包 网站如下:http://www.airchina.com.cn/www/jsp/userManager/login.jsp 下面是登录的抓包: ? 因为 JS 代码一般是根据输入框的 id 标签取相应的值,然后做加密! ? id标签 搜索结果如下: ? 结果 猜测应该是 RSA 加密! 分析 在加密的位置打上断点,重新发请求: ? 点击该函数进入,可以发现 RSAUtils 的定义及其相应的函数都在这个 JS 文件中,直接一把梭,将该文件中的 JS 代码全部复制下来吧: ? 所以也将bodyRSA 函数对应的的 JS 代码复制下来。最终本地 JS 文件内容如下: ? 最后,自己写个 JS 函数,执行一下,并和抓包的数据进行对比验证结果: ? 总结 可以看到在流程当中比较重要的地方就是: 1.找规律,寻找这些数据的加密规则 2.调试 JS,使用浏览器或者在本地进行调试 3.模拟数据,将这些数据通过代码模拟生成,然后加入到数据当中
漏洞利用代码,经过加密传输到后端后,可能就会导致漏洞利用 0x03 js 逆向请求过程 这个过程中有很多技巧,最原始的方式就是一点一点跟栈 本地先安装 nodejs 环境,用于本地执行 js 文件 ,本次用于解密的 js 名称为 js_rev.js 1. X-K-Header 如果服务器想让客户端发起一个请求,并携带特定的请求头,那肯定是在 js 中定义好的,要么是访问即加载的js,要么是服务器远程返回的js,我们直接在开发者工具中搜索该字符 (Ctrl + f) 打开搜索 这一步的目的是在服务器 js 文件中(或者服务器返回的js代码)找到我们希望的字符,所以可以看到,这里只有一个 main.js 中包含该字符,我们点进去 搜索相关字符 有两个结果 逆向解密返回值 对于安全人员来说,返回值不见得一定要逆向,毕竟浏览器会帮我们显示出来 如果我们从xhr 断点处一点一点向下进行调试,是可以找到解密方法的,但是这种方法效率太低了 从返回内容和头来看,
这次文章是补之前文章提到的eval加密 之前简单介绍了常见的JS混淆:JS逆向常见混淆总结 里面提到的第一种混淆就是这次要分析的主角,这里分析的网站是「漫画柜」 查看请求 打开控制台,随意点击一本漫画 第二种就是按照之前的文章提到的分析流程,我们分析一遍,虽然麻烦点会走弯路但是适合新手: 没有看过的朋友可以点击下面的文章链接回顾一下:实战案例浅析JS加密 - 基础总结篇 先搜索一下关键字,这里加密的参数是 /CgcKgcYgcBwcLiVvDlv4IwiSQg6b4ths0YgNvgcSw0Lh4ZG6BH9v46DhyWsN+hThtqDiGUEYASrn7tpiEZs0Cg8uQYXyHn4uDBqDDL x73\x70\x6c\x69\x63']('\x7c'), 0, {})) 解密过程 我们来捋一捋整个过程,首先网站加载页面,执行了这段eval,解密了参数里的一堆密文,之后根据参数请求具体内容,那我们逆向只要拿到页面的代码 JS逆向是细致活,需要大胆假设,小心求证,耐心调试,同时在逆向过程中卡住了需要求助的时候也不要不好意思。把自己思考的结果、遇到的问题描述清楚附上小小的红包和大佬聊聊,会有意想不到的惊喜。 共勉~
目标地址 这篇来讲讲逆向破解js的方法, 先拿美团外卖的请求参数, X-FOR-WITH 练练手 请求地址: https://h5.waimai.meituan.com/waimai/mindex 发现需要解密的参数: X-FOR-WITH, openh5_uuid(uuid), _token 以X-FOR-WITH为例 按照正常来说, Ctrl + f打开搜索, 粘贴X-FOR-WITH, 应该能找到相关的js 文件, 然后就直接会找到加密的地方, but并没有发现有关的js文件 接下来使用杀手锏 打断点 选择url包含food的请求 再次刷新页面, 请求页面会中断, 然后在一步步往下来 找了好几遍也没找到 小技巧 点击这里, 可以直接格式化js哦!!!
抓包 万幸只有一个加密参数,搜索大法好呀,拿着加密参数全局搜一下,参数值呢就是密码输入框的 id 标签,和上一篇分享的那个 JS 逆向案例一样的。有惊喜… ? 十有八九就是它了,来下个断点走起。 点进去瞅瞅,看代码好像找到了JS 加密的代码 ? 一步步往下走,直接断到返回值,发现为空 ? ? 继续往下走,断点又回到最开始那个判断函数,然后进入了另一个加密函数 ? 很简单吧,全部复制下来吧… 破解 找到加密 JS 就好办了,复制下来,在本地调试一波 ? 然后再把调用函数也一并拿下来 ? 在本地执行一下,然后和网站抓包数据比对下结果,结果一致! ?