目录
前言
hook方法
hook XHR请求
hook cookie
前言
前面了解了浏览器开发者工具并能快速定位数据包接口,后面就是要分析该接口是不是存在加密点,也就是找到需要逆向的位置。
通常需要逆向的位置一般在Request headers、Payload、Response和Cookie中。下图中数据包的url的查询关键字中有一个analysis的是无法看懂的,这个就是密文,需要着重分析。
hook方法
hook技术可以改变js函数的执行行为,针对一些加密函数可以去快速定位。Javascript中的JSON.stringnify和JSON.parse两个方法是处理JSON数据常用的方法,某些站点传输响应数据时会用到这两个方法。
(function() {
var _parse = JSON.parse;
JSON.parse = function(ps) {
console.log("Hook JSON.parse ——> ", ps);
debugger;
return _parse(ps); // 不改变原有的执行逻辑
}
})();
将上述代码放入Console控制台运行即可。这里将JSON.parse赋值给_parse变量,当调用了JSON.parse方法时则输出相应的JSON字符串并执行debugger语句,会立即断下 ,且不改变原来函数的执行逻辑。其他方法的hook代码可以以此为模板进行编写。
hook XHR请求
在Javascript中,可以利用XMLHttpRequest.open方法发送xhr请求,因此可以对其进行hook。
经过脱敏的练习网址:aHR0cHM6Ly93d3cucWltYWkuY24v
在payload中存在analysis,是一个密文,则需要对其进行逆向分析。可以看到该数据包是一个xhr请求,可以尝试去hook XMLHttpRequest.open方法。
(function () {
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function (method, url, async) {
if (url.indexOf("analysis") != -1) {
debugger;
}
return open.apply(this, arguments);
};
})();
url.indexOf("analysis") != -1这行代码表示在url中存在analysis,此时会执行debugger语句,立即断住。此时向上跟栈,可以定位加密位置。通过该方法可以很快地定位加密点。
关于xhr请求,XMLHttpRequest.send, XMLHttpRequest.setRequestHeader和XMLHttpRequest.
onreadystatechange这几个方法很重要,需要重点关注。
同时我们也要注意发包的流程,首先初始化javascript>>执行加密逻辑>>发包>>返回相应>>解密响应体。执行加密逻辑可能会在请求Interceptors (拦截器)中进行。
hook cookie
对于一些cookie反爬,则可以hook相应的cookie来进行定位。hook cookie的代码是固定的,可以直接拿来使用。
练习网址:aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v
cookie是以键值对的形式存储的,其中键名为v的值是需要逆向分析的。可以使用以下代码进行hook。
(function () {
var cookieTemp = '';
Object.defineProperty(document, 'cookie', {
set: function (val) {
if (val.indexOf('v') != -1) {
debugger;
}
console.log('Hook捕获到cookie设置->', val);
cookieTemp = val;
return val;
},
get: function () {
return cookieTemp;
},
});
})();
当document.cookie中含有键名为v时,则会执行debugger语句。此时可以快速定位加密位置。
总结
这篇文章主要是利用hook技术帮助我们实现快速定位加密位置,成功定位加密位置基本上就已经逆向成功了50%。要熟练使用该技术,需要有一定的js语法基础,因此需要认识一些常用的js函数。当然定位方式有许多种,我们下次再说。创作不易,觉得有收获的同志记得点个关注哈。有问题欢迎留言~