AST反混淆实战|hcaptcha验证码混淆js还原分析

关注它,不迷路。       

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

1.实战地址

https://newassets.hcaptcha.com/c/bc8c0a8/hsw.js

将上面静态的js保存下来。

2.通用框架处理

使用通用反混淆模板_预处理版本对上面的js进行美化处理。分析后发现是个 ob混淆:

b84a4bb4c871eced537c744bcb53ca8f.png

2.还原点分析

使用星球里 1113 版本的 ob混淆一键还原脚本处理,发现仅还原了一点点字符串:

5d2c86bf1ae2a1053d946bb0598190d2.png

打开结果文件后,再分析看看为啥,发现函数名被重复赋值了:

be3f49336b9a48a14452fbc3be93ba69.png

而且,有很多函数的实参并非字面量,如:

f3d370deda539668dadf58146d8d58b3.png

这种需要使用星球里的这个  object对象的还原 插件可以将这里的 i 进行还原:

https://t.zsxq.com/14fNaCvuN

为了避免误伤,我把 isBaseLiteral 这个函数设置的更严格了:

function isBaseLiteral(node) {if (types.isNumericLiteral(node)) {//null可能有坑return true;}if (types.isUnaryExpression(node) && ["+", "-"].includes(node.operator)) {return isBaseLiteral(node.argument);}return false;
}

另外还有这种变量定义的赋值:

b6e93d74ea8bd30876a8409f3f56eed5.png

使用星球的 变量定义为字面量时的还原 插件:

https://t.zsxq.com/14tgMrOIv

以及这种赋值语句的赋值:

50dc97665b53f03c6afde2e006785130.png

使用星球的 赋值语句right节点为字面量时的还原 插件:

https://t.zsxq.com/14rVn4nPd

接下来就是函数名赋值给多个变量的处理了,这里因为误杀其他的语句,我给单独处理了,大家可以参考我在作业上的处理。

3.ob混淆一键处理

使用星球里 1113 版本的 ob混淆一键还原脚本处理,还原了很多字符串:

7e79198f4e7931ec40c8984680be159c.png

再次搜索 函数名,发现还有调用的地方:

dc186288630272f55e4cf5f86e2df2da.png

这说明第二步没有处理干净。直接手动处理吧。把类似n和y的值直接复制进去就行了。

然后再用一键还原就好了。

6537f637a58b14f8957d628f35b6a80a.png

完整代码请自行下载:

https://t.zsxq.com/14zASGhX0

PS:还原后替换,有2个坑,一个是会像谷歌验证码一样校验文件hash;二是第一次使用ob混淆还原的时候,移位函数不能处理。

今天的文章就分享到这里,后续分享更多的技巧,敬请期待。

13ffe5cb738d67195ccaee010697927b.jpeg

欢迎加入知识星球,学习更多AST和爬虫技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql——替换字段中指定字符(replace 函数)

一、简介 函数将字符串中出现的所有子字符串替换为新的子字符串。 REPLACE() 函数是基于字符的替换,并且替换字符串时是区分大小写的。 二、语法 这里是 MySQL REPLACE() 函数的语法: REPLACE(str, from_str, to_str)参数 str 必需的。 原字符串。 …

【华为OD题库-047】求最小步数-java

题目 求从坐标零点到坐标点n的最小步数&#xff0c;一次只能沿横坐标轴向左或向右移动2或3. 注意:途径的坐标点可以为负数 输入描述 坐标点n 输出描述 输出从坐标零点移动到坐标点n的最小步数 备注 1< n < 10^9 示例1: 输入 4 输出 2 说明 从坐标零点移动到4&#xff0c;…

Python+requests+Jenkins接口自动化测试实例

在做功能测试的基础上&#xff0c;我平时也会用postman测试接口&#xff0c;不过postman只能测试一个一个接口&#xff0c;不能连贯起来&#xff0c;特别是我们公司的接口很多都是要用到token的&#xff0c;导致我每次测个需要登录的接口都要去获取到token&#xff0c;做了很多…

Excle无法在受保护的视图中打开该文件

Excle无法在受保护的视图中打开该文件 解决方案&#xff1a;

MAC笔记本里Spyder python 的安装问题 和 虚拟环境VENV的创建

芙Spyder 作为python的开发环境还是很好用的&#xff0c;在MAC笔记本里直接下载Spyde安装即可。 安装完成以后目录在&#xff1a; /Applications/Spyder.app/Contents 此目录下有几个子目录如下&#xff1a; Frameworks Info.plist MacOS PkgInfo Resources…

【算法】链表-20231124

这里写目录标题 一、83. 删除排序链表中的重复元素二、206. 反转链表三、234. 回文链表 一、83. 删除排序链表中的重复元素 简单 1.1K 相关企业 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例…

Mybatis 使用枚举作为查询条件

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

(4)BUUCTF-web-[极客大挑战 2019]EasySQL1

前言&#xff1a; 觉得这个题目挺有意义的&#xff0c;因为最近在学数据库&#xff0c;但是不知道在现实中有什么应用&#xff0c;所以学起来也没有什么兴趣&#xff0c;做了这个题目&#xff0c;发现数据库还是挺有用处的&#xff0c;哈哈 知识点&#xff1a; mysql 中and和…

速记:一个保险丝检测电路

一个保险丝检测电路 保险丝熔断&#xff1a;红灯亮 保险丝正常&#xff1a;绿灯亮 同样的&#xff0c;仿真中的指示灯可以换成其他指示器件。

PTA-2023年软件设计综合实践_9(动态规划法)

7-1 数塔 数塔如图所示&#xff0c;若每一步只能走到相邻的结点&#xff08;图中有数字的方格&#xff09;&#xff0c;则从最顶层走到最底层所经过的所有结点的数字之和最大是多少&#xff1f;测试数据保证结果不大于231−1。 C #include <bits/stdc.h> using namespa…

python每日一题——14合并区间

题目 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;intervals …

AIGC:文本生成视频

项目1&#xff1a;GitHub - ai-forever/KandinskyVideo: KandinskyVideo — multilingual end-to-end text2video latent diffusion model 效果未知

IDEA插件:Apipost Helper使用

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…

YOLOv8改进 | 2023 | DWRSeg扩张式残差助力小目标检测 (附修改后的C2f+Bottleneck)

论文地址&#xff1a;官方论文地址 代码地址&#xff1a;该代码目前还未开源&#xff0c;我根据论文内容进行了复现内容在文章末尾。 一、本文介绍 本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv8中的C2f和Bottleneck模块&#xff0c;主要针对的是小目标检测&#xff0c…

【GraphQL】什么是Prisma?

本页提供了Prisma及其工作原理的高级概述。 什么是Prisma&#xff1f; Prisma是一个开源的下一代ORM。它由以下部分组成&#xff1a; Prisma客户端&#xff1a;Node.js和TypeScript的自动生成和类型安全查询生成器Prisma迁移&#xff1a;迁移系统Prisma Studio:GUI&#xff0…

JVM——内存溢出和内存泄漏

目录 1. 内存溢出和内存泄漏内存泄漏的常见场景解决内存溢出的思路1.发现问题 – Top命令2.发现问题 – VisualVM3.发现问题 – Arthas4.发现问题 – Prometheus Grafana5.发现问题 – 堆内存状况的对比![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/058d113715b…

BIO、NIO、selector、Netty代码Demo示例

文章目录 &#xff08;一&#xff09;BIO&#xff08;Blocking I/O 阻塞I/O&#xff09;&#xff08;二&#xff09;NIO&#xff08;Non-Blocking I/O 非阻塞I/O&#xff09;&#xff08;三&#xff09;IO多路复用--Selector&#xff08;四&#xff09;Netty &#xff08;一&am…

【hacker送书第5期】SQL Server从入门到精通(第5版)

第5期图书推荐 内容简介作者简介图书目录参与方式 内容简介 SQL Server从入门到精通&#xff08;第5版&#xff09;》从初学者角度出发&#xff0c;通过通俗易懂的语言、丰富多彩的实例&#xff0c;详细介绍了SQL Server开发所必需的各方面技术。全书分为4篇共19章&#xff0c;…

C陷阱与缺陷——第5章库函数

1. 返回整数的getchar函数 #include <stdio.h>main() {char c;while((c getchar()) ! EOF){putchar(c);} } 上述函数是错误的&#xff0c;原因在于程序中的变量c被声明为char类型&#xff0c;而不是int类型&#xff0c;这意味着c无法容下所有可能的字符&#xff0c;特…

Java,反射机制与反射的应用

关于反射&#xff1a; 有时对象的编译时类型和运行时类型是不一致的。比如在使用多态的场景下&#xff0c;有一个Object类型的数组&#xff0c;其中的元素有着各种不同的类型&#xff0c;而调用相应的元素的方法时&#xff0c;比如调用toString方法时&#xff0c;希望调用的是…