猿人学爬虫比赛第七题:《动态字体,随风漂移》 地址: http://match.yuanrenxue.com/match/7 ---- 召唤师名字是在html 的 script 标签中,字体是从接口中返回 先请求match/7,然后请求 api/match/7 api/match/7返回的json数据,里面data数组有10个字体(胜点) 和 woff文件的地址。 'User-Agent': 'yuanrenxue.project', } data =requests.get(f'http://match.yuanrenxue.com/api/match/7' (woff)) 转成xml查看 from fontTools.ttLib import TTFont font = TTFont('7.woff') font.saveXML('7x.xml') xml 猿人学爬虫比赛第八题:《图文点选》 地址: http://match.yuanrenxue.com/match/8 这种题和js没什么关系,不过多描述了。
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逆向」
前言近期在知识星球中,有位星友在逆向一个航司的时候,遇到了点阻碍,向我提问,本期就对该网站进行逆向分析:逆向目标目标: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代码运行报错能够进行基本的处理和修改,使其正常运行! 更多或如有时间,可看视频版解析: 一 探寻 JavaScript 反爬虫的根本原因和基本原理-夜幕NightTeam(B站) https://www.bilibili.com/video/BV16e4y1G7xv 文件生成页面数据 5.老规矩,搜索关键字查找加密部分,这里关键字为 document.getElementById 6.可以看到就是1008js文件,在生成数据可疑处打上断点 7.断点调试验证数据生成, 可看到部分数据生成 8.继续下一行调试,验证,这里就考验js阅读能力了 9.经过对比打印输出验证,g就是我们要获取的值,运行输出g值即可 10.抠出js代码,并修改调试 由于关联函数多,基本上都可以全部抠出再进行修改
一个小说网站文字内容加密,不用说,肯定也是js加密,加密特征也比较明显,尤其是适合新人学习js加密逆向分析数据和内容,算是比较简单,只需要扣取代码,直接用获取的加密参数运行即可获取数据内容。 特征: 数据内容为加密数据段 打开目标网址,访问网站 2.获取加密数据,找到加密特征 3.老规矩,根据特征,搜索关键字,这里我们搜索 chapter_content 4.结果非常明显,只有一个加密js 文件,继续搜索 chapter_content 5.打开至面板,下断点,可以多下几处 6.断点调试,刷新页面 7.可以看到加密数据出现,继续下一行调试 8.接着调试,可以看到解密函数 9.点进去关键解密函数 PS:建议补好js基础知识! 最后还有一个参数需要获取到! 可惜的是在 Python 爬取中还是存在限制,没有获取到数据!
0.5908619931518229 #每次测试登陆值改变,随机生成 mobile: 13288888888 #手机号 password: "bfd59291e825b5f2bbf1eb76569f8fe7" 第三步:分析解密逆向参数 关于 password 一般网站登陆密码的加密,没有特别设置的话,一般都是md5加密,通常使用的MD5就是会生成32位的和64位的不可逆的加密字符串! 拿到密码数据“bfd59291e825b5f2bbf1eb76569f8fe7”测试看看,网页上就有不少这样的加密解密工具可参考! ? 2.获取到搜索结果,定位到js文件 ? ? 3.进入到js加密文件中 ? 4.老路子继续搜索参数名codeKey ? 5.获取到位置,分别查看分析 ? ? ? 6.工具栏js调试查看 ?
看了他们这个说明可能以上两个功能相对比较吸引人: 因为加密和压缩这种太容易被人分析了,原理比较简单; 控制流混淆对于逻辑的处理能够增大分析难度,原理上其实就是分析js得到语法树,通过操控语法树,比如对于 2.Js2x http://ty2y.com/obfuscate/#how-to-use ? 这个跟上面那个多态变异是一样的。 SecurityWorker https://www.securitify.io/ 这个重点强调了虚拟机,其实虚拟机的思路也比较好理解:这里只说虚拟机的思路i: 第一阶段: 这个可能是目前看到应该是 js vmp 最强的,这种方案其实也是很好理解的,比如对于一个js代码来说,我们只用js操作写一个基于栈的解释器,然后对于本身要保护的js进行虚拟化,定义一堆自定义操作,这个时候其实还是比较弱,因为全部是 总结 对于 js 这种语言来说,由于语言本身的特殊性,一定的保护是非常必要的,再结合浏览器本身的发展,为了性能会在编译上做处理,引入本地层的东西,比如谷歌的 V8 ,火狐的 asm.js 在安全性上:业务上更多的结合服务端动态特性以及客户端强大的静态代码保护的设计会达到一个比较好的效果
前言最近又有小伙伴在逆向某网站的时候,碰到了点棘手的问题,过来询问 K 哥。经过分析,该网站既有加密参数,又使用了 WebSocket 协议来传输数据,正好可以丰富 JS 逆向百例专栏。 本文将对其进行逆向分析,仅作为学习研究:逆向目标目标:某 Hospital,逆向分析网址:较为敏感,感兴趣的小伙伴,私聊逆向过程抓包分析打开开发者人员工具,刷新网页,会发现被断住了,经典的无限 debugger 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://www.kgtools.cn 跟到 app.07b0b337.js 文件中,代码未经过混淆处理:该处创建了一个 Promise 对象,往上跟,会发现,h 就是 post 请求中,data 参数的加密结果:h = w["encryptSessions
逆向目标 目标:有道翻译接口参数 主页:https://fanyi.youdao.com/ 接口:https://fanyi.youdao.com/translate_o? 参数逆向 salt、sign、bv 三个加密参数,全局搜索任意一个,搜索结果比较多,依次对比,可以发现 fanyi.min.js 文件第 8969 行左右开始,Form Data 所有的参数都齐全了,埋下断点调试一下 ,使用 nodejs 里面的加密模块 CryptoJS 来进行 MD5 加密,改写 JS 如下: // 引用 crypto-js 加密模块 var CryptoJS = require('crypto-js parseInt(10 * Math.random(), 10) var sign = CryptoJS.MD5('fanyideskweb'+data+salt+']BjuETDhU)zqSxf-=B#7m * Math.random(), 10) var sign = CryptoJS.MD5('fanyideskweb' + data + salt + ']BjuETDhU)zqSxf-=B#7m
这次文章是补之前文章提到的eval加密 之前简单介绍了常见的JS混淆:JS逆向常见混淆总结 里面提到的第一种混淆就是这次要分析的主角,这里分析的网站是「漫画柜」 查看请求 打开控制台,随意点击一本漫画 第二种就是按照之前的文章提到的分析流程,我们分析一遍,虽然麻烦点会走弯路但是适合新手: 没有看过的朋友可以点击下面的文章链接回顾一下:实战案例浅析JS加密 - 基础总结篇 先搜索一下关键字,这里加密的参数是 :18,"17":1q,"1p":"/1o/l/1r/1u/","1t":1,"1s":"","1j":1i,"1h":0,"1k":{"1n":"1m"}}).1l();', 62, 121, 'D7BWAcHNgdwUwEbmARgJwHYAcwAMAmANgIz3wwJwLVwGZcytq966UyBWAws3A93OgINBTdGRQF8ZACwEOZevhll8BWi0m1puGWpkbdkvSF18ZAg7pW7iM0rq4ye1xyxpyWc2grr1aNtp ,执行了这段eval,解密了参数里的一堆密文,之后根据参数请求具体内容,那我们逆向只要拿到页面的代码,用execjs执行这段代码不就能拿到md5值直接请求了吗。 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 就好办了,复制下来,在本地调试一波 ? 然后再把调用函数也一并拿下来 ? 在本地执行一下,然后和网站抓包数据比对下结果,结果一致! ?
链接地址 打开检查,刷新页面 随便输入,进行测试 密码已加密,搜索pwd 结果很多,慢慢看 疑似这个,打断点查看一下 搜索第一个值key_to_encode 然后得到这一长串东西 打开JS 调试工具,定义一个函数,cv进去 加载调试 少啥搜啥,再去搜索这个setMaxDigits 文件名是rsa.min.js这个应该就是加密文件了,直接全部复制到js调试工具 加载调试
转载自 三尾先生 博客 初探js逆向 在开始之前想先说下阅读完三尾先生这篇文章的一点个人理解,文章写得挺好的,很值得新手学习了解,首先谈下逆向激活成功教程思路 1.需要逆向的时候一般是遇到了加密问题 而请求参数的加密一般就需要反复断点了,先断点到加密完成(即ajax发送参数值)然后再反复断点一步一步的往上推直到原始参数的传参; (下面就是三尾先生 初探js逆向的原文了,很值得阅读了解练手) 前言 js逆向是让爬虫萌新们比较头疼的一块领域,因为市面上大部分的爬虫书籍等教程都未涉及这方面知识,需要爬取用js加密的网站时常常无从下手,只能使用selenium等自动化框架来模拟人工点击。 但这种方式往往效率低下,所以本文将以企名片这个网站为例,带大家初探js逆向。 逆向过程挺糟心,也挺有趣的,且逆向成功后会有很大的成就感。
逆向请求过程 这个过程中有很多技巧,最原始的方式就是一点一点跟栈 本地先安装 nodejs 环境,用于本地执行 js 文件,本次用于解密的 js 名称为 js_rev.js 1. X-K-Header 如果服务器想让客户端发起一个请求,并携带特定的请求头,那肯定是在 js 中定义好的,要么是访问即加载的js,要么是服务器远程返回的js,我们直接在开发者工具中搜索该字符 (Ctrl + f) 打开搜索 这一步的目的是在服务器 js 文件中(或者服务器返回的js代码)找到我们希望的字符,所以可以看到,这里只有一个 main.js 中包含该字符,我们点进去 搜索相关字符 有两个结果 向 sessionStorage 的写入过程,我们尝试探索一下 我们需要取消所有断点,之后重新搜索 secretKeyValue 还是在 main.js 中 通过搜索,发现有 7 处存在该字符,我们查询一下 逆向解密返回值 对于安全人员来说,返回值不见得一定要逆向,毕竟浏览器会帮我们显示出来 如果我们从xhr 断点处一点一点向下进行调试,是可以找到解密方法的,但是这种方法效率太低了 从返回内容和头来看,
分享另一个破解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.模拟数据,将这些数据通过代码模拟生成,然后加入到数据当中
一个小说网站文字内容加密,不用说,肯定也是js加密,加密特征也比较明显,尤其是适合新人学习js加密逆向分析数据和内容,算是比较简单,只需要扣取代码,直接用获取的加密参数运行即可获取数据内容。 文件加密生成,需解密逆向获取! 打开页面,查找加密特征 2.获取加密特征,关键字 加密特征还是比较好找的 3.搜索关键字 ChapterContent 很明显在第二个结果,js文件中 4.打开查看,继续搜索关键字 ChapterContent 5.打开至面板断点调试 6.可以看到正文文本内容已经生成成功了 7.查看代码,分析加密函数 8.不放心的话,可以继续打断点验证 9.可以看到加密过程 10.抠出代码,本地js文件调试 本地运行效果: 使用Python 调用js 文件获取数据效果: def get_data(): url = "https://c13.shuqireader.com/pcapi/chapter/contentfree