项目场景:

写了好几篇JS逆向的文章,作为一名热爱爬虫的工作者,想必一定会接触到JS混淆,JS混淆有很多种,这里举几个:UglifyJS,JScrambler,jsbeautifier.org,JSDetox,obfuscator.io 等,具体的大家可以看看这篇文章 https://blog.csdn.net/hefeng6500/article/details/80024810,既然能混淆JS,那么就会有反混淆的方法,这次给大家带来obfuscator(ob)混淆的入门级解密。


解决方案:

1.这里贴一个obfuscator混淆的网站,访问页面可以看到下面的一个例子。

2.就用他默认的JS代码,看看混淆后的样子,变量跟方法名已经完全替换,然后第一行可以看到明显的一个数组,这就是ob混淆的常见特性。
var _0x30bb = ['log', 'Hello\x20World!'];(function (_0x38d89d, _0x30bbb2) {var _0xae0a32 = function (_0x2e4e9d) {while (--_0x2e4e9d) {_0x38d89d['push'](_0x38d89d['shift']());}};_0xae0a32(++_0x30bbb2);
}(_0x30bb, 0x153));var _0xae0a = function (_0x38d89d, _0x30bbb2) {_0x38d89d = _0x38d89d - 0x0;var _0xae0a32 = _0x30bb[_0x38d89d];return _0xae0a32;
};function hi() {console[_0xae0a('0x1')](_0xae0a('0x0'));
}hi();
3.先看下混淆后代码整体结构,总体围绕_0x30bb 这个数组变量,先进行移位操作(明显的shift),_0xae0a是hi()方法内调用的解密函数。

4.我们先看看移位后的数组,直接扣代码放在浏览器的Console执行下

5.OK,我们得到了移位后的数组,然后有了现成的解密方法,我们只要一次执行hi()方法里带_0xae0a的解密函数,即可还原出原来的数据,那么,这里,一个一个执行是不可能的,写个代码让他自动替换,代码直接贴出来
# -*- coding: utf-8 -*-
'''
无法100%还原为源代码,只能修改变量和方法名,增加可读性
'''
import re
import execjsfunc_js = """
// 直接用重组后的数组替换原来的数组
var _0x30bb = ["Hello World!", "log"]// 解混淆用到的函数
var _0xae0a = function (_0x38d89d, _0x30bbb2) {_0x38d89d = _0x38d89d - 0x0;var _0xae0a32 = _0x30bb[_0x38d89d];return _0xae0a32;
};
"""# 1.编译解混淆函数到node.js环境中
js_func_name = '_0xae0a'  # 混淆js中函数定义的名称
ctx = execjs.compile(func_js)
# 2.正则匹配出所有需要替换的函数
with open('source.js') as f1:js = f1.read()be_replaced_func_set = set(re.findall(js_func_name + "\([\s\S]+?\)",js))print(be_replaced_func_set)
# 3.循环遍历进行替换
for be_replaced_func in be_replaced_func_set:args_tuple = re.findall("\(([\s\S]+?)\)", be_replaced_func)[0]args0 = eval(args_tuple.split(',')[0]) # 截取参数res = ctx.call(js_func_name, args0) # 调用参数,获取返回值js = js.replace(be_replaced_func, "'" + res + "'")print('{} 替换完成'.format(res))with open('code.js', 'w') as f2: # 重写JS输出js = f2.write(js)
6.然后我们Run一下,看下解密后的hi()函数和原来的对比下,大致就完成了!
# 解密后
function hi() {console['log']('Hello World!'); # 等价于console.log('Hello World!')
}hi();# 解密前
function hi() {console.log("Hello World!");
}
hi();


PS:下篇文章会带来更加复杂的JS 混淆哦,大家觉得有用的话希望关注下~~谢谢!

爬虫反混淆入门--JS混淆之ob混淆相关推荐

  1. 爬虫从入门到精通(14) | JS中常见的混淆

    文章目录 一.最简单的混淆举例 二.常见的混淆 1.eval混淆 2. AAEncode混淆(表情包加密) 3.JJEncode混淆 4.jsfuck混淆 5.ob混淆 一.最简单的混淆举例 最初级混 ...

  2. AST反混淆实战-经典ob混淆

    Ast实战:反混淆解析经典ob混淆 一.混淆demo获取 ob混淆源码 来自猿人学14题 https://match.yuanrenxue.com/api/match/14/m demo.js //为 ...

  3. JS逆向 | ob混淆一键还原工具

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!  在JS逆向的过程中,我们可能经常碰到类似如下的代码:  开头定义了一个大数组,然后对这个大数组里的内容进行位移, ...

  4. 【Js逆向】__jsl_clearance ob混淆加速乐

    此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉. 前言 简单的Js逆向, 这是个不错的案例. 加速乐兄弟篇: 标题 链接 [Js逆向]__jsl_clearan ...

  5. JS逆向、破解、反混淆、反浏览器指纹——JS补环境框架

    JS逆向的主要思路一般有这几种 1,利用AST反混淆,因为用的就是AST混淆的,所以理论上应该都能用AST再返回去.但是实际操作好像不容易. 2,跟值,一步一步找到加密方法和密钥.现在很多混淆方法,把 ...

  6. 猿人学第二题,手撕OB混淆给你看(step06-控制流平坦化)

    前情回顾: 猿人学第二题,手撕OB混淆给你看(Step1-开篇) 猿人学第二题,手撕OB混淆给你看(step2-字符串数字回填) 猿人学第二题,手撕OB混淆给你看(step3-函数调用还原) 猿人学第 ...

  7. js逆向案例-obsfuscator混淆

    目录 一.obsfuscator混淆特点 二.如何分析逆向obsfuscator混淆 三.逆向ob混淆实战 1.目标结果 2.查找哪个请求有目标数据 3.查找加密参数生成位置 4.分析data参数生成 ...

  8. AST实战|手把手教你还原ob混淆:ob混淆代码特征

    ob混淆过的代码有那些特征? 特征一: 大数组 + 移位自执行函数 + 解密字符串函数. 下面的代码是一个之前我在官网上混淆的一个例子: ‍ 可以看到,大数组为变量 _0x33fc,移位自执行函数体比 ...

  9. AST实战|免安装一键还原ob混淆详细使用教程

    关注它,不迷路. 本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除! 一.环境安装 在nodejs官网下载最新稳定版并安装: 下载地址: htt ...

最新文章

  1. 说说消息队列RocketMQ版ConsumeTimeout的含义是什么
  2. highcharts一天时间 与一周时间_如何规划自己一天的时间
  3. c# WINFORM SOCKET编程-简单聊天程序(服务端)
  4. linux打包tar包命令,Linux压缩打包方法连载之一:tar命令
  5. js 深拷贝 和 浅拷贝
  6. windows, 放方向键设置为vim格式,autohotkey-windows
  7. (51)蓝湖团队协作开发平台
  8. LADRC的学习——换被控对象进行仿真测试
  9. python爬虫基础爬取用户头像实战
  10. 【量化课堂】彼得·林奇的成功投资
  11. #章节四:input()函数
  12. WebStorm 2018.2.3 x64 的安装与破解
  13. python绘制缓和曲线_在cad中画缓和曲线的绘制方法
  14. 用户与计算机通信的界面是什么意思,GUI是什么意思
  15. 三星手机提取微信聊天数据
  16. 2022-2027年中国NGB网络建设光通信器件行业市场深度分析及投资战略规划报告
  17. 古希腊神话故事4 :伊娥
  18. 【数值分析--有限差分法】
  19. N个人,按M进行分组
  20. [附源码]Java计算机毕业设计SSM仓库物资信息可视化管理系统

热门文章

  1. 关于Linux系统网卡流量Tx和Rx的意思详解
  2. 渗透辅助工具-Dude
  3. 什么是网格交易?网格交易三问三答
  4. 以下python注释代码中_以下Python注释代码,不正确的是()_学小易找答案
  5. PbootCms微信小程序官网模版
  6. 视频教程-2020新版C语言程序设计零基础入门小白自学编程-C/C++
  7. 第一章、安装、登录CentOS7
  8. 廊坊知恩:抖音店铺怎么运营
  9. 《C语言名题精选百则----8》
  10. IE浏览器修复与优化