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

前言

由于JS沙箱定义非常多的构造函数以及prototype时,会导致初始化JS耗时太久。所以将定义这块内置到了Node中,并且很好的解决了方法toString检测,而真正的方法逻辑依旧使用JS实现,所以其实只是在底层定义了一套壳而已。
项目地址:https://github.com/bnmgh1/node-sandbox.git

魔改Node Js补环境框架

内置模块wanfeng

内置模块wanfeng, 模块里面存放的是构造函数, 是未初始化的, 也就是原型对象以及链都没有设置.

var undefined_obj = new wanfeng.xtd;
这样就可以得到一个type为undefined的对象了,感谢泰迪大佬提供的代码。

ps:我实现的有bug,蓝瘦

内置对象Utils

  1. Utils对象里的方法都是做初始化用的, 使用参考util目录下的init_env.js文件,
    这里就不赘述了,使用Utils对象初始化对象之前,先定义一个globalMy对象,否则会报错.

  2. Error_get_stack: 报错堆栈获取的时候会在这里被拦截,然后再返回堆栈字符串出去。(感谢陈不不大佬给予的帮助)

  3. newWindow newDocument newLocation 是返回一个对象,定义好属性的对象,不过原型以及链没设置,需要手动设置下.
    实现可以看init_env.js globalMy.newWindow, 初始化 window location document.

node框架使用说明

  1. 以window对象为例, window 获取 window对象时, 会走到 globalMy.window_get_window 这个方法里,我们在这里写方法逻辑。

  2. 以document对象为例, document 调用 createElement方法时, 会走到 globalMy.Document_createElement 这个方法里,因为是原型链上的方法,所以是Document

  3. 还是以document为例, document 获取 location对象时, 会走到 globalMy.document_get_location 这个方法里, 因为location是直接属于document对象下的。

ps : 核心就是在node底层定义了一层拦截器, 然后最终又走到我们定义的js方法里完成调用. 底层定义的方法不需要考虑toString检测. 而且node设置属性比js的defineProperty快很多.

js框架简介

  1. 因为之前自己写的沙箱太垃圾, 所以没有和node框架做结合. 不过node框架初始化也快, 干脆就直接用jsdom了, 偷懒了.

  2. 创建节点对象时, 我会定义一个壳对象来映射jsdom对象达到过检测的目的. 我实现的没有很优雅, 够用就行了

注意事项

  1. 框架默认重写Promise, 如果需要用自带的, 请在初始化之前备份这个对象, 然后替换~

  2. 不要代理任何对象,代理对象调用方法时会直接报错,和浏览器一样的机制。建议在方法调用时打印,像我的js框架一样。

  3. node无法使用正常的vm2模块, 改用vm模块了.所以暂时应该只能起服务调用.(不建议用execjs调, 真的很蠢…)

  4. 如果直接用node环境的话, 应该就能用python库调用了, 没去试. 因为node环境检测太多了, 不想用.

  5. 非构造函数的原型对象, 就实现了个别, 比如WindowProperties这种的原型对象.

  6. 如果遇到方法没有定义的话, node会挂掉噢…

警告

此代码开源仅供学习使用, 如有影响请联系作者删除. 请勿用于非法用途, 否则法律后果自负. 最后请不要利用信息差用此框架去获利.

赞助

我、陈不不大佬、泰迪大佬一起合作的星球 : https://t.zsxq.com/06bIUvBEM

结束语

水篇文章而已啦,用项目里的 node.exe 运行 main.js就可以了。
已经有3份例子了,具体是什么安全产品就不说了。
有啥bug或者更好的思路联系作者 q/v :1491025307

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值