- “继续学习操作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 = '...
- AOP即面向切面编程,把一些跟核心业务逻辑模块无关的功能抽离出来,如日志统计、安全控制、异常处理等。把它们抽离出来后,通过“动态织入”的方式掺入业务逻辑模块中。在Java中,可以通过反映和动态代理机制来实现AOP技术,而在JavaScript中实现AOP技术就是把一个函数“动态织入”另一个函数之中。以下通过Function.prototype来实现: <!DOC... AOP即面向切面编程,把一些跟核心业务逻辑模块无关的功能抽离出来,如日志统计、安全控制、异常处理等。把它们抽离出来后,通过“动态织入”的方式掺入业务逻辑模块中。在Java中,可以通过反映和动态代理机制来实现AOP技术,而在JavaScript中实现AOP技术就是把一个函数“动态织入”另一个函数之中。以下通过Function.prototype来实现: <!DOC...
- WebView漏洞: ** WebView 中的 addJavascriptInterface()接口** JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射: // 参数1:Android的本地对象 // 参数2:JS的对象 // 通过对象映射将Android中的本地对象和JS中的对象进行关联,从而实现JS调用... WebView漏洞: ** WebView 中的 addJavascriptInterface()接口** JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射: // 参数1:Android的本地对象 // 参数2:JS的对象 // 通过对象映射将Android中的本地对象和JS中的对象进行关联,从而实现JS调用...
- 在以类为中心的面向对象编程语言中,对象总是从类中创建而来。而在原型编程的思想中,一个对象是通过克隆另外一个对象所得到的。 在面向对象编程语言中,想要创建一个对象,要先指定它的类型,然后再通过类来创建这个对象。而原型模式则不再关心对象的具体类型,它通过找到一个对象,然后通过克隆来创建一个一模一样的对象。但这里要注意,原型模式的真正目的并非在于得到一个一模一样的对象,而是... 在以类为中心的面向对象编程语言中,对象总是从类中创建而来。而在原型编程的思想中,一个对象是通过克隆另外一个对象所得到的。 在面向对象编程语言中,想要创建一个对象,要先指定它的类型,然后再通过类来创建这个对象。而原型模式则不再关心对象的具体类型,它通过找到一个对象,然后通过克隆来创建一个一模一样的对象。但这里要注意,原型模式的真正目的并非在于得到一个一模一样的对象,而是...
上滑加载中
推荐直播
-
“智见未来”数字文旅创新大赛 线上培训
2025/04/16 周三 19:30-21:00
洪洁/行业算力发展部
4月16日19:30-21:00,大赛组委会将于线上举办培训,汇聚行业专家与技术大牛,从文旅产业的前沿趋势到AI技术的深度应用,全方位为你赋能
回顾中 -
WS63E星闪开发板快速入门指南:开启星闪技术之旅
2025/05/15 周四 19:00-20:30
杨阳 华为开发者布道师
本期直播,深度解析星闪技术核心优势与开发实战技巧,分享从环境搭建到“海思智棒”优秀星闪体验官案例开发的完整路径,覆盖技术原理、场景化案例、备赛避坑指南,助力开发者快速攻克物联网项目开发难题。
回顾中
热门标签