ast-hook-for-js-RE 浏览器内存漫游

这里写目录标题

    • 前言
      • 一、什么是内存漫游?
      • 二、功能列表
    • 三、本程序实现原理及流程
    • 四、安装
      • node版本要求
      • 启动项目
      • 杂项

前言

浏览Github中发现的一个好项目ast-hook-for-js-RE
项目github地址:https://github.com/CC11001100/ast-hook-for-js-RE。
一个非常好的项目,大家可以多给作者star支持一下。
Github需要科学上网,所以在这里克隆了一下仓库到国内。
链接:https://gitee.com/wangpeng35023502/ast-hook-for-js-RE

一、什么是内存漫游?

作者的话:
简单的说,这是一个浏览器端的内存漫游解决方案,借助此工具你可以随意检索浏览器内存中的数据(标题党警告一次),
默认看到这个项目的人都是会点逆向的, 所以可以简单理解为这是一个浏览器版本的objection,
这里的浏览器特指Chrome浏览器, 事实上在写代码的时候我也并没有考虑兼容其它的浏览器。

二、功能列表

本项目刚刚立项,内存漫游功能并不是特别完善(其实只有一个功能…),目前已开发的功能:

  • 变量级抓包监控,根据加密参数秒秒钟定位到加密逻辑的代码位置(追加密逻辑代码位置的通杀方案)

计划开发的功能:

  • 基础的定位功能的兼容性一直在搞咋也搞不完,上面那条就当我吹牛笔了…
  • 目前 TODO v0.3 功能点:
    • script hook plugins,通过script设置innerHTML动态插入到页面中的逻辑也能够Hook到
    • eval hook plugins想办法能够直接定位到jsvm中,现在只能知道是在eval中,但跳不到vm中
    • cache的逻辑优化
    • 想办法对定位doc请求url中的加密参数能够起到一定的帮助作用(也许应该把另一个还未完全开源的hook项目直接合并进来?)

三、本程序实现原理及流程

划回来!请务必不要跳过此部分,在使用本程序之前,希望你能够对其原理有一个大致的了解,知其然知其所以然。

本程序的运行原理非常简单,所有的功能都是基于AST Hook构建的,其大致流程:

  1. 访问目标网站时设置浏览器走我们自定义的代理服务器,这个代理服务器要支持能够使用代码处理请求,这里选择的是anyproxy。
  2. 在代理服务器这里,对请求做处理,对于JavaScript响应和HTML响应里的JS代码,使用AST实时处理,注入Hook逻辑。
  3. Hook逻辑就是所有涉及到变量改动的地方都经过我们的Hook方法,以此实现页面上所有的变量值变动都可以捕获到,你可以把这理解为内存中变量级别的抓包监控
  4. 抓到的变量会被保存到一个变量数据库中,然后当你访问页面请求了带加密参数的请求之后,从Chrome开发者工具的Network中把那个加密参数复制出来,
    切换到console调用本工具提供的api在变量数据库中搜索一下,就能搜索到存储这个字符串的变量及变量所在的代码位置,
    单击代码位置可以自动切换到Source面板并自动定位到变量位置。
  5. 然后在此处打断点往前找加密逻辑抠出来就好了,如果有多个加密参数或者加密参数为多个地方拼接生成,无脑重复此步骤即可。

注:不要尝试去搜索AST Hook相关的资料,这只是一个我瞎编的词…感兴趣请自行阅读项目源码。

四、安装

node版本要求

注:笔者在编码时使用到了较高版本的语法,因此请更新的您的node版本至少到14.0.0+,建议更新到最新的LTS版本。

首先将项目push到本地

git clone https://gitee.com/wangpeng35023502/ast-hook-for-js-RE

解压到本地,安装所需依赖,分别是anyproxy,需自行安装

npm install anyproxy

启动项目

需要启动两个本地Server,anyproxy的代理Server监听在本地10086端口,运行这个文件即可:

src/proxy-server/proxy-server.js

要用anyproxy抓取https请求需要信任它的证书,在运行这个文件之前,先用anyproxy ca选项启动,访问它的web管理界面:

http://localhost:8002/

然后下载证书信任即可:
ast-hook-for-js-RE 浏览器内存漫游_第1张图片

再将下载的证书放进受信任的证书即可,可自行百度。

api-server监听在本地10010端口,运行这个文件即可:

src/api-server/api-server.js

然后在浏览器中将代理设置为10086端口即可,这里推荐使用便携版Chrome搭建单独的调试环境,并搭配Proxy SwitchyOmega或类似的插件作为代理路由辅助:
https://chrome.google.com/webstore/detail/padekgcemlokbadohgkifijomclgjgif

杂项

因为用AST实时处理JS文件太慢了,所以设置了个缓存,缓存目录默认为:

src/proxy-server/js-file-cache

其它IDE请自行搜索如何设置。

OK,至此已经安装完毕。


怎么使用呢?下一篇文章会写具体的使用方法。

你可能感兴趣的:(javascript,node.js)