- 在 反混淆插件五 这篇文章中,介绍了 options 的一些功能,忘记介绍如何删除空行了。也很简单,注意 retainLines 这个即可,代码如下: const output = generator(ast,opts = {"retainLines":true},code); 也可以利用 UltreEdit 这个工具的 正则替换来删... 在 反混淆插件五 这篇文章中,介绍了 options 的一些功能,忘记介绍如何删除空行了。也很简单,注意 retainLines 这个即可,代码如下: const output = generator(ast,opts = {"retainLines":true},code); 也可以利用 UltreEdit 这个工具的 正则替换来删...
- 插件功能 获取实参,计算出全局函数调用的结果,并用结果替换该全局函数的调用表达式。 处理实例 处理前: var a = parseInt("12345",16),b = Number("123"),c = String(true),d = unescape("hello%2CAST%21");eval("a = 1"); 处理后: var a&nb... 插件功能 获取实参,计算出全局函数调用的结果,并用结果替换该全局函数的调用表达式。 处理实例 处理前: var a = parseInt("12345",16),b = Number("123"),c = String(true),d = unescape("hello%2CAST%21");eval("a = 1"); 处理后: var a&nb...
- 实战地址 http://match.yuanrenxue.com/match/14 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: 没有加密参数,看看cookie字段: 有三个加密的字段,看上一个接口: http://match.yuanrenxue.com/api/match/14/m cookie请求是这样的: 带着 ... 实战地址 http://match.yuanrenxue.com/match/14 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: 没有加密参数,看看cookie字段: 有三个加密的字段,看上一个接口: http://match.yuanrenxue.com/api/match/14/m cookie请求是这样的: 带着 ...
- “继续学习操作AST” 我们今天来看看,如何将一个 BinaryExpression 类型的节点转换成 CallExpression 类型 的节点。即将代码: var a = 123 | 456; 转换为: var a = function (s, h) { return s | h;}(123, 456); 为什么要这么做,因为一个BinaryExpr... “继续学习操作AST” 我们今天来看看,如何将一个 BinaryExpression 类型的节点转换成 CallExpression 类型 的节点。即将代码: var a = 123 | 456; 转换为: var a = function (s, h) { return s | h;}(123, 456); 为什么要这么做,因为一个BinaryExpr...
- 本文缘由 随着反爬的升级,前端的JavaScript代码越来越难以阅读,一个简单的字符串声明竟然可以拆分成多行代码,虽然并不会给动态调试带来困难,但是在静态分析时着实让人难受。明明一行代码可以搞定的事情,偏偏写成了十行甚至百行,代码冗余非常严重。 我们以下面的代码为例,来讲讲如何还原。 for (var e = "\u0270\u026D\u0274\u0274\... 本文缘由 随着反爬的升级,前端的JavaScript代码越来越难以阅读,一个简单的字符串声明竟然可以拆分成多行代码,虽然并不会给动态调试带来困难,但是在静态分析时着实让人难受。明明一行代码可以搞定的事情,偏偏写成了十行甚至百行,代码冗余非常严重。 我们以下面的代码为例,来讲讲如何还原。 for (var e = "\u0270\u026D\u0274\u0274\...
- 前言 &n... 前言 &n...
- 代码样本 打开著名的JavaScript在线混淆网站: https://obfuscator.io/ 按照它给的原代码: // Paste your JavaScript code herefunction hi() { console.log("Hello World!");}hi(); 选择下图所示的选项,其他的不变: 然后点击 Obf... 代码样本 打开著名的JavaScript在线混淆网站: https://obfuscator.io/ 按照它给的原代码: // Paste your JavaScript code herefunction hi() { console.log("Hello World!");}hi(); 选择下图所示的选项,其他的不变: 然后点击 Obf...
- 以下内容来源于babel官方网站关于generator的介绍: https://babeljs.io/docs/en/babel-generator 所给的示例代码如下: import { parse } from "@babel/parser";import generate from "@babel/generator"; const code = "cl... 以下内容来源于babel官方网站关于generator的介绍: https://babeljs.io/docs/en/babel-generator 所给的示例代码如下: import { parse } from "@babel/parser";import generate from "@babel/generator"; const code = "cl...
- “今天来学习下怎么将简单的CallExpression 类型进行处理。” 昨天写了这篇文章 JavaScript 代码混淆实战(二):将 BinaryExpression 类型转换为 CallExpression 类型,今天来看看它的逆过程。 如何将下面的代码: var Xor = function (p,q){ return p ^ q;} let a = ... “今天来学习下怎么将简单的CallExpression 类型进行处理。” 昨天写了这篇文章 JavaScript 代码混淆实战(二):将 BinaryExpression 类型转换为 CallExpression 类型,今天来看看它的逆过程。 如何将下面的代码: var Xor = function (p,q){ return p ^ q;} let a = ...
- 读取JavaScript源文件 因为是对源代码进行处理,因此需要读取源文件。当然代码也可以直接放进处理文件中,但是有些代码非常多,不太适合,因此这里使用读取文件的方式来获取源代码。 代码如下 let encode_file = "./encode.js",decode_file = "./decode_result... 读取JavaScript源文件 因为是对源代码进行处理,因此需要读取源文件。当然代码也可以直接放进处理文件中,但是有些代码非常多,不太适合,因此这里使用读取文件的方式来获取源代码。 代码如下 let encode_file = "./encode.js",decode_file = "./decode_result...
- 通过操作AST的节点,既可以将混淆的代码变清晰,也可以将清晰的代码变的混淆。说白了,就是通过操作节点来达到目的。 我在之前的文章中介绍了如何处理十六进制、中英文Unicode字符串或数值,也就是将十六进制格式或者Unicode转换为直观的字符串。这篇文章的目的是一个逆过程。 阅读本文章之前,请熟读这篇文章: JavaScript反混淆插件一:处理十六进制、... 通过操作AST的节点,既可以将混淆的代码变清晰,也可以将清晰的代码变的混淆。说白了,就是通过操作节点来达到目的。 我在之前的文章中介绍了如何处理十六进制、中英文Unicode字符串或数值,也就是将十六进制格式或者Unicode转换为直观的字符串。这篇文章的目的是一个逆过程。 阅读本文章之前,请熟读这篇文章: JavaScript反混淆插件一:处理十六进制、...
- 上篇文章讲解了如何操作FRIDA进行内存的读写,今天试试用objection来进行内存的读写。 github地址: https://github.com/sensepost/objection 继续以上篇文章的apk进行学习,请开启frida服务。 通过objection命令启动apk进程: objection -g com.yaotong.crackme ... 上篇文章讲解了如何操作FRIDA进行内存的读写,今天试试用objection来进行内存的读写。 github地址: https://github.com/sensepost/objection 继续以上篇文章的apk进行学习,请开启frida服务。 通过objection命令启动apk进程: objection -g com.yaotong.crackme ...
- Node.js并不是一个新的开发语言,更不是一个JavaScript框架,而是一个基于Chrome V8引擎的JavaScript运行环境。Node.js使用的是事件驱动模型。 Node.js的底层是使用C/C++编写的,如: Chrome V8引擎是用C++编写的,负责将JavaScript代码转换成机器码。线程池使用C语言编写的、全特性的异步I/O库libeio,... Node.js并不是一个新的开发语言,更不是一个JavaScript框架,而是一个基于Chrome V8引擎的JavaScript运行环境。Node.js使用的是事件驱动模型。 Node.js的底层是使用C/C++编写的,如: Chrome V8引擎是用C++编写的,负责将JavaScript代码转换成机器码。线程池使用C语言编写的、全特性的异步I/O库libeio,...
- 1、this JavaScript中的this,总是指向一个对象 ,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境。 this的指向大致可以分以下4种: 作为对象的方法调用作为普通函数调用构造器调用Function.prototype.call或Function.prototype.apply调用 1、作为对象的方法调用 var... 1、this JavaScript中的this,总是指向一个对象 ,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境。 this的指向大致可以分以下4种: 作为对象的方法调用作为普通函数调用构造器调用Function.prototype.call或Function.prototype.apply调用 1、作为对象的方法调用 var...
- 封装的目的是为了将信息隐藏。JavaScript中并没有像其他编程语言那样提供相应的关键字来支持,所以Javascript只能依赖变量的作用域来实现封装特性,只能模拟出public和private两种封装特性。 除了ECMAScript6中提供的let之外,通常我们用函数来创建作用域: var myObject = (function(){ var name = '... 封装的目的是为了将信息隐藏。JavaScript中并没有像其他编程语言那样提供相应的关键字来支持,所以Javascript只能依赖变量的作用域来实现封装特性,只能模拟出public和private两种封装特性。 除了ECMAScript6中提供的let之外,通常我们用函数来创建作用域: var myObject = (function(){ var name = '...
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢
2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考
2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本
2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签