JS逆向的主要思路一般有这几种

1,利用AST反混淆,因为用的就是AST混淆的,所以理论上应该都能用AST再返回去。但是实际操作好像不容易。

2,跟值,一步一步找到加密方法和密钥。现在很多混淆方法,把一句代码变成了1万句(这个没夸张,我遇到好几个,虽然不知道原来的代码量是多少,反正实际运行了几十万行,浏览器竟然也很流畅),再利用一些平坦流的写法,让你无法跟值。

3,完全就不用去逆向,直接搞个浏览器(为了提高效率,可以用无头浏览器),真实的去运行就行了,最后用一些手段得到加密的结果。

为了防御方案3,又有2种方法:1)浏览器指纹;2)判断环境是什么

获取到方案3的浏览器环境指纹,如果这个指纹提交了过多的数据,那么这些数据就都是异常的。

知道方案3用的是什么环境,比如python的selenium,只要是这个,那就都判定为异常。

针对方法1,可以用指纹浏览器,每次都是不同的指纹。

针对方法2,只要知道对方是根据什么判断出是selenium,相应的属性干掉或者补充就行了。

但问题是,指纹的获取和selenium的判断,你怎么知道是什么。

指纹的获取和selenium的判断,本质就是一组js代码,但是这组js代码是什么,是没法确定的,通常只能是百度搜一下,把搜到的都做相应的处理,但是别人可能还根据什么做了判断,就无法得知了。

比如PC端的B站注册,用了fingerprint获取指纹,不管你通过什么方式,实现了fingerprint获取到的指纹每次都不同,但是你会发现,注册的B站账号,还是异常,说明B站检测到了你这个注册途径不正常(每次注册IP肯定会换的,已经排除掉了这个检测的可能)。

这时候,就需要补环境框架了。

js代码简单的说是3部分组成,V8(js最核心的代码,可以简单的理解为js官方发布的),BOM(浏览器实现的js代码,比如alert,比如xmlHttpRequest),DOM(页面节点,节点对应的js方法,也是浏览器自己实现的)。不管是指纹或者判断selenium的代码,基本都在BOM和DOM中。

很多语言都有运行js代码的功能,本质就是调用V8。所以就产生了一种思路,如果我把混淆的js代码放在V8里跑,因为没有BOM和DOM的方法,如果有用到了相关函数,那就会报错,一旦报错了,不就知道这个js代码判断了什么东西了。

以判断selenium的方法window.navigator.webdriver为例,说下js补环境框架下如何知道对方是怎么检测的。

首先,V8环境是没有navigator的,所以需要我们先自己定义,然后挂上代理,此时运行“window.navigator.webdriver”,就能监听到代码有在获取navigator的webdriver属性。

//*******************这部分是框架代码***************************
var navigator={};window.navigator=new Proxy(window.navigator, {set(target, property, value) {console.log("proxy set", target, property, value);return Reflect.set(...arguments);},get(target, property, receiver) {console.log('proxy get:',target,property);return target[property];}
});
//*******************这部分是框架代码***************************//***这是混淆的js代码(当然为了说明问题自然就没混淆)**********
console.log(window.navigator.webdriver);
//***这是混淆的js代码(当然为了说明问题自然就没混淆)**********

补环境的基本思路就是这样,看着很简单,但问题是,你既然能想到这么做,人家也能想到,那么人家可以用一些方法,去检测你是不是补环境框架。

比如,我们刚才定义的navigator,就是个普通的对象,但是真实的navigator,是有原型为Navigator的对象。你在控制台里测试这句代码,会得到这么个结果,这个在我们自己的代码里可没有。

console.log(navigator.__proto__[Symbol.toStringTag])
"Navigator"

所以相对完善一点的定义navigator代码,应该是这样。

var Navigator = function Navigator() {throw new TypeError("Illegal constructor");
};Object.defineProperties(Navigator.prototype, {[Symbol.toStringTag]: {value: "Navigator",configurable: true}
});Navigator.prototype.userAgent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36";navigator = {};
navigator.__proto__ = Navigator.prototype;for (var property_ in Navigator.prototype) {navigator[property_] = Navigator.prototype[property_];Navigator.prototype.__defineGetter__(property_, function () {throw new TypeError("Illegal constructor");});
}

首先,先定义一个Navigator,这个是不能被new的。

然后,定义Navigator原型上的Symbol.toStringTag

然后,把Navigator的属性否赋值给navigator,此时还有个点需要注意,不能直接从Navigator上获取属性。

再比如navigator.plugins,这是指纹用到的检测浏览器插件,这个东西你在控制台里看的话,在内部无限循环。如果你模拟出来的不是这样的,就很容易被检测出来。

最近跑一个混淆的js代码,第一次开始研究这个东西,自认为有几个点比较难(大佬应该觉得是浮云),在此记录一下

1,事件的监听与触发,也可以说是Event的重写

2,webrtc的重写,要自己实现这个,还得解决promise

3,XMLHttpRequest的重写

4,plugins里无限嵌套

5,toString的检测,在控制台里对原生函数执行toString,得到是这么个结果“function alert() { [native code] }”,如果alert是我们自己定义的,就不是这个结构了。有一次偶然,对toString进行监听,发现有个混淆的js代码,输出了这样的字符串"function get cancelBubble() { [native code] }",直接蒙了,完全不知道怎么能得到这样的结果。研究了4,5天吧,每天下班回家搞2小时,最后终于发现了端倪。

最后再说一下,有了补环境框架,基本上也就实现了指纹重写,因为都知道了检测的是什么了,只需要把对应的js代码拿出来,在selenium跑一下就行了。

自己补了大概这么多环境吧,有需要的联系(332439180 微信QQ都是这个),付费出售,原谅我没有分享精神,有老婆孩子要养。

JS逆向、破解、反混淆、反浏览器指纹——JS补环境框架相关推荐

  1. python爬虫二十四:js逆向破解(一)

    1.环境搭建 通过python代码模拟js去生成加密数据完成数据破解,需要用到PyExecJS模块 ①安装模块pip install pyexecjs通过模块的方法来读取js代码,也可以用js2py( ...

  2. js逆向破解 —— 懂车帝视频链接

    背景 话说下午有一朋友发我一链接懂车帝某视频,让我帮忙看一下这个网页中视频链接是怎么获取的.我断断续续地花了两三个小时,最后终于把它给拿下了.在整个分析的过程中,我觉得还算是有点意思,所以写下这便博客 ...

  3. 【JS逆向】魔改Node JS补环境框架

    [JS逆向]魔改Node JS补环境框架 前言 魔改Node Js补环境框架 内置模块wanfeng 内置对象Utils node框架使用说明 js框架简介 注意事项 警告 赞助 结束语 前言 由于J ...

  4. 【JS 逆向百例】反混淆入门,某鹏教育 JS 混淆还原

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...

  5. js逆向案例-obsfuscator混淆

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

  6. JS逆向——破解百度翻译参数(sign)爬虫 超级详细

    一.分析请求参数 打开地址: https://fanyi.baidu.com/ 打开Chrome调试工具,然后随意输入一段文字,查看抓包结果. post请求 Form data 参数 如上图所示,Fo ...

  7. 指纹浏览器指纹追踪技术:指纹浏览器开源代码,浏览器指纹js插件

    指纹追踪技术(指纹浏览器)的前世今生: 1).第一代 第一代指纹追踪是cookie这类的服务端在客户端设置标志的追踪技术,evercookie 是 cookie 的加强版. . 第二代 第二代指纹追踪 ...

  8. JS逆向|写给小白的浏览器环境补充指北

    ​现在越来越多的JavaScript代码都加入了浏览器的特征,如果你用node去运行扣下来的JavaScript源代码,可能会报错,也可能得到的结果与浏览器上的不一致,因此也就无法通过服务器的参数校验 ...

  9. js逆向系列:企名片,获取js逆向后的真实数据!

    一.进入企名片创业项目 我们需要爬取如下数据 首先,对该网页进行抓包,发现这些数据是通过post请求获得的. 这是网站给我们返回的数据,为什么和网页上显示的不一样呢?分析后得出,这是经过js加密后的数 ...

最新文章

  1. ESLint里的规则教会我,无规矩 不编程
  2. HTML DOM中DIV的Style:margin,border,padding
  3. Redis入门(二)之数据类型
  4. openjdk 编译_使用OpenJDK 11运行JAXB xjc编译器
  5. centos7的网卡配置 实用经典总结
  6. 西安科技大学计算机学院保研,独臂姑娘,好样的!
  7. C++ 双端队列deque
  8. python使用默认参数
  9. -bash: cd: /.ssh: 没有那个文件或目录
  10. Spring Boot入门篇-@RequestParam/@RequestBody配置
  11. 编译Notepad2语法高亮记事本源码心得
  12. 全球卡巴斯基升级服务器列表
  13. 抖音数据统计_【数据】2018抖音大数据报告(完整版)
  14. linux内核下载 ok6410,手把手教你移植linux内核---------OK6410(一)
  15. Google Test - Google Testing and Mocking Framework
  16. 图像数据标记-图片筛选教程
  17. App开发智能车载应用之概述篇
  18. 【装机】老毛桃的安装及使用教程
  19. 【U盘被莫名分成两个盘我们该怎么合盘?】
  20. 简单模拟图卷积(numpy实现)

热门文章

  1. tp5 限制访问频次
  2. 开学第一周(伪)学习总结
  3. 日语二级语法汇总(part2/16)
  4. 七个基本量纲_量纲是什么?
  5. filebeat7.7.0相关详细配置预览- Paths
  6. ros中启动rviz显示段错误,核心以转储问题
  7. Day663.大佬学习经验分享 -Java业务开发常见错误
  8. 【发际线大作战】AndroidStudio使用Intent和ListView开发书签(spinner、intent、setOnItemLongClickListener、SimpleAdapter)
  9. 运维平台权限表结构设计
  10. 冲破服务机器人赛道“不可能三角”,科沃斯展现行业第一的统治力