xhsvmp分析1-vmp入口定位方法

最近观看了志远大佬关于某书vmp思路分析的公开课,感觉有了新的思路,特此进行整理,这一篇重点记录参数入口方法定位的思路,望懂行的大佬轻喷。

网址:aHR0cHM6Ly93d3cueGlhb2hvbmdzaHUuY29tL2V4cGxvcmU=
接口:aHR0cHM6Ly9lZGl0aC54aWFvaG9uZ3NodS5jb20vYXBpL3JlZGNhcHRjaGEvdjIvZ2V0Y29uZmln

思路一:志远大佬视频中的方法(比较通用且快速的方法,推荐:⭐⭐⭐⭐⭐)

1. 通过查看x-s参数可以发现XYW_之后的内容为base64加密数据,使用atob方法进行节能能得到一个json字符串内容
2. 查看内容发现内部包含payload项,因x-s为json字符串经base64加密而来,可以判断必定使用JSON.stringify方法进行对象转字符串操作,
   此处可以对JSON.stringify方法进行hook获取参数生成位置
3. hook方法如下
4. 有了hook方法,接下来需要定位何时hook,那么肯定需要定位何时下hook
直接搜索"/api/redcaptcha/v2/getconfig",发现在vendor-dynamic.cc05cd1.js内定义了变量
     redConfig = "/api/redcaptcha/v2/getconfig",继续搜索redConfig,发现只有一处用到该变量,在方法
     function verifyInit_ConfigHttp() {
            var t;
            return browser.ZP.http.post(concat_default()(t = "".concat(getRedHost())).call(t, redConfig), {}, {
                withCredentials: !0,
                transform: !1
            })
        }
     内,此处直接在return出下断点,然后进行hook即可
5. hook后通过跟栈信息可以发现参数生成入口在vendor-dynamic.cc05cd1.js内
   l = (a && void 0 !== window._webmsxyw ? window._webmsxyw : encrypt_sign)(s, i) || {};
                e.headers["X-t"] = l["X-t"],
                e.headers["X-s"] = l["X-s"]
   位置,即l包括了生成的x-s,x-t参数,最后跟栈可发现在window._webmsxyw方法内,而window._webmsxyw方法在6e0d0a976c31ec4cf07d8dfaea68aefe79a8c678.js文件内,通过查看该js文件可以发现为一个jsvmp流程
JSON.stringify_ = JSON.stringify;
JSON.stringify = function () {
  if (arguments[0]&&arguments[0]['payload']) {
      debugger
  }
  let temp = JSON.stringify_.apply(this,arguments)
  return temp
  
}

思路二:比较取巧的思路(不一定通用,推荐:⭐⭐⭐)

直接全局搜索X-s可以找到几个关键位置,全部在vendor-dynamic.cc05cd1.js文件内,全部下断点,刷新页面可在
l = (a && void 0 !== window._webmsxyw ? window._webmsxyw : encrypt_sign)(s, i) || {};
处成功断住程序,表示此处即为x-s生成参数入口位置

思路三:硬刚的思路(一定能找到,但是效率较低,推荐:⭐⭐⭐⭐)

通过观察栈,以及跟栈打断点的方式可以定位带关键位置在vendor-dynamic.cc05cd1.js文件内的u内的fulfilled方法内,关键代码如下,
此处e内包含了headers信息,并且携带了X-s数据,而上一步为被循环调用的方法,t(e, i, o);
由此可以断定,X-s一定在循环执行的t方法内生成,而t为传入参数,直接监控e可发现第五次调用的时候会生成X-s参数,
因此单步执行此处断点,能进入到方法signAdaptor内,最后会跳如xsXt方法,观察可知关键函数仍为window._webmsxyw
u = {
    fulfilled: function (e) {
        e !== o && (0,
            S.ZK)("[Http Warning] config reference has been changed during dispatch interceptor");
        var r = t(e);
        if (!r || !r.then)
            throw new Error("[Http Exception] send must return a promise object");
        return r
    }
};
        
p = function(t) {
                return function(e) {
                    return t ? t(e, i, o) : e
                }
            };

function signAdaptor(t, e) {
            return signAdaptor_awaiter(this, void 0, void 0, (function() {
                return signAdaptor_generator(this, (function(r) {
                    return xsXt(t, e),
                    xsCommon(t, e),
                    [2, e]
                }
                ))
            }
            ))
        };

function xsXt(t, e) {
            var r = e.url
              , n = e.params
              , o = e.paramsSerializer
              , i = e.data
              , a = t.configInit
              , u = t.xsIgnore
              , c = t.autoReload;
            if (!(!some_default()(u).call(u, (function(t) {
                return index_of_default()(r).call(r, t) >= 0
            }
            )) && shouldSign(r)))
                return e;
            c && signLackReload();
            try {
                var s = getRealUrl(r, n, o)
                  , l = (a && void 0 !== window._webmsxyw ? window._webmsxyw : encrypt_sign)(s, i) || {};
                e.headers["X-t"] = l["X-t"],
                e.headers["X-s"] = l["X-s"]
            } catch (f) {}
            return e
        };

视频连接:

https://www.bilibili.com/video/BV1DA4m137ua/?vd_source=ef8c870f1871754d3268729bd72f9086#reply209530914496

下一篇会整理视频中插桩的思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值