【瑞数VMP】浅谈某普期刊JS逆向的环境检测点

前言

某普前段时间更新了新版本的瑞数。
不过去年的垃圾代码跑不通,但是又有需求的情况下就插桩打印分析了下。
简单聊下几个检测点以及补环境应对办法。
ps: 相比去年,今年需要写的东西就不多了。

正文

原型链

原型链hook还是能打印大部分环境信息的,然后和本地打印出来的信息比对下,补的跟浏览器跑出来的一样就行了。(5代补的齐的话,基本上到6代要解决的就是几个检测点。5代补环境可以看我去年写的文章)然后这里不再赘述原型链hook了…

检测点

第一个检测点

在这里插入图片描述
window或其原型链上的原型对象都获取不到这个属性描述符,但是test in window是true的。
一开始我是代理了window来做的,但是代理window真的超级容易被检测到(行不通的笨蛋)。

第一个检测点解决思路

我们可以通过代理WindowProperties这个原型对象来实现这个功能。
并且当全局对象获取不到属性时,我在原型上也能捕获到,还不容易被检测,一举两得。

第二个检测点

typeof document.all == ‘undefined’
这个不好在js中实现,得在node源码里操作。
一开始我是用泰迪大佬的代码,在node模块中实现new 一个type为undefined的对象。
但是这样的话,我们无法对其进行代理。为什么要代理?
浏览器里原型是HTMLAllCollection、HTMLCollection的对象,都是动态数组。即dom树改变,数组就会动态更新(无需重新获取一次该对象)。
但是呢我比较菜,所以我用代理的话能比较轻松的实现这个功能。

第二个检测点解决方案

放上v8源码实现(非node模块实现),可以直接将一个对象的type类型置为undefined


BUILTIN(UtilsSetUndetectable){
  HandleScope scope(isolate);
  Factory* factory = isolate->factory();
  int args_len = args.length() - 1;
  if (args_len < 1) {
    // 报错
  }
  Handle<JSObject> obj = Handle<JSObject>::cast(args.at(1));
  Handle<Map> map(obj->map(), isolate);
  Handle<Map> new_map = Map::Copy(isolate, map, "CopyAsPrototypeForJSGlobalProxy");
  new_map->set_is_undetectable(true);
  // 如果对对象本身的map set_is_undetectable会导致同类型的对象type全部为undefined.
  obj->set_map(*new_map);
  return *factory->ToBoolean(true);
}

// 更多关于node v8 API 的源码, 我放在星球里了. 星球里还有不不大佬的补环境框架.
// 星球不定期更新好东西, 是我、泰迪、陈不不一起合作的. 
// 链接: https://t.zsxq.com/06bIUvBEM

插桩

如果还是过不去,并且原型链hook打印执行流程没有发现异常的情况下。就可以在vmp代码位置插桩打印执行流日志(日志有点多的),和本地的执行流日志比对,看看是不是有什么不一样的地方。至于在哪里打印,外面有几篇文章告诉读者插桩点了,这里就不放出来了…

鸣谢

在这里感谢陈不不大佬,在JS逆向之路上提供了不少帮助~
有兴趣的小伙伴们可以看看他在B站上发的视频,对JS逆向提升有一定的帮助~
b站:陈不不and挽风的逆向
我、陈不不、泰迪合作的星球:https://t.zsxq.com/06bIUvBEM

如有侵权,请第一时间联系作者删除文章~

<think>好的,我现在需要回答用户关于瑞数VMP环境补充和配置方法的问题。用户提到了几个引用,我需要先看看这些引用内容是否相关,然后结合我的知识来组织答案。 首先,用户提供的引用[1]是关于编译机配置环境变量的命令,比如使用source命令执行build.sh脚本,然后运行mninja并记录日志。这可能涉及到环境变量的设置和构建过程的日志记录。引用[2]提到执行程序时确保代码正常走到入口,不需要额外补环境,这可能与VM(虚拟机)内部的操作有关,比如插桩位置。引用[3]则是在生成Cookie_T的位置设置断点,验证执行路径和结果一致性。 瑞数VMP(虚拟机保护)通常用于JavaScript代码的保护,逆向分析时需要模拟或补充浏览器环境,避免被检测到自动化工具。可能需要配置环境变量、补足浏览器API、处理Cookie生成等。 结合用户提供的引用,环境配置可能包括设置环境变量(如引用1中的source命令),确保程序正确执行路径(引用2),以及在关键点断点调试(引用3)。此外,可能需要处理浏览器指纹、补全缺失的全局对象或函,比如navigator、document等。 接下来需要分步骤说明配置方法,包括环境变量设置、执行验证、断点调试、浏览器环境补充等。然后生成相关问题,如逆向分析工具、Cookie生成调试、常见问题解决等。 需要确保回答结构清晰,使用中文,正确应用引用标注,并符合LaTeX格式要求。比如行内公式用$...$,独立公式用$$...$$,但可能这个问题中学公式较少,但如果有的话需要正确应用。</think>瑞数VMP环境补充与配置主要涉及浏览器环境模拟和代码执行路径验证,以下是关键步骤和方法: ### 一、环境变量配置 1. **编译环境初始化** 在构建阶段需通过`source`命令加载环境配置,例如: ```bash source ./build.sh P720S11_T mninja 模块名 2>&1 | tee mninja.log ``` 该命令会设置编译所需的环境变量并记录构建日志,确保依赖项正确加载[^1]。 ### 二、执行路径验证 1. **入口点确认** 通过调试工具检查代码是否正常进入入口函,需确保调用栈与原生浏览器环境一致。若执行路径无偏差,则无需额外补环境[^2]。 2. **插桩定位** 在VM内部关键逻辑点(如加密函入口)插入桩代码,监控参传递和返回值,例如: ```javascript console.log("[VMP Hook] Cookie生成函被调用,参:", arguments); ``` ### 三、浏览器环境补全 1. **全局对象模拟** 补充缺失的`window`、`document`属性,例如: ```javascript Object.defineProperty(window, "navigator", { value: { userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..." } }); ``` 2. **Cookie生成验证** 在`Cookie_T`生成位置设置断点,检查执行上下文是否包含正确的`location`、`history`等对象,并比对生成结果与浏览器环境的一致性[^3]。 ### 四、调试工具配置 1. **日志重定向** 使用`tee`命令同时输出控制台日志到文件和终端,便于分析执行异常: ```bash node vm_loader.js 2>&1 | tee vmp_debug.log ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值