前言
浏览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构建的,其大致流程:
- 访问目标网站时设置浏览器走我们自定义的代理服务器,这个代理服务器要支持能够使用代码处理请求,这里选择的是anyproxy。
- 在代理服务器这里,对请求做处理,对于JavaScript响应和HTML响应里的JS代码,使用AST实时处理,注入Hook逻辑。
- Hook逻辑就是所有涉及到变量改动的地方都经过我们的Hook方法,以此实现页面上所有的变量值变动都可以捕获到,你可以把这理解为
内存中变量级别的抓包监控
。 - 抓到的变量会被保存到一个变量数据库中,然后当你访问页面请求了带加密参数的请求之后,从Chrome开发者工具的Network中把那个加密参数复制出来,
切换到console调用本工具提供的api在变量数据库中搜索一下,就能搜索到存储这个字符串的变量及变量所在的代码位置,
单击代码位置可以自动切换到Source面板并自动定位到变量位置。 - 然后在此处打断点往前找加密逻辑抠出来就好了,如果有多个加密参数或者加密参数为多个地方拼接生成,无脑重复此步骤即可。
注:不要尝试去搜索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/
然后下载证书信任即可:
再将下载的证书放进受信任的证书即可,可自行百度。
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,至此已经安装完毕。
怎么使用呢?下一篇文章会写具体的使用方法。