原理
方法hook
我们知道在 JavaScript
中 JSON.stringify()
方法用于将 JavaScript
对象或值转换为 JSON
字符串,JSON.parse()
方法用于将一个 JSON
字符串转换为JavaScript
对象,某些站点在向 web
服务器传输用户名密码时,会用到这两个方法
// JSON.parse('{name:xxx}')
(function() {
var _parse = JSON.parse;
JSON.parse = function(ps) {
console.log("Hook JSON.parse ——> ", ps);
debugger;
return _parse(ps); // 不改变原有的执行逻辑
}
})();
有两处需要处理,避免麻烦的是返回的加密数据
现在控制台执行上面的hook函数,然后出发翻译
o是密文,通过第二个红框的处理就变成了明文
hxr hook
案例地址:https://www.qimai.cn
定义了一个变量 open
保留原始 XMLHttpRequest.open
方法,然后重写 XMLHttpRequest.open
方法,判断如果 rnd 字符串值在 URL 里首次出现的位置不为 -1,即 URL 里包含 analysis
字符串,则执行 debugger
语句,会立即断下。
var xhr= new XMLHttpRequest(),
method = "GET",
url = "https://developer.mozilla.org/";
xhr.open(method, url, true);
xhr.onreadystatechange = function () {
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
console.log(xhr.responseText)
}
}
xhr.send();
示例一:
搜索不到想要的关键字
分析
解决:
// 如果是正数 表示存在里面
// 如果是-1 表示不在里面
(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);
};
})();
在控制台执行上面的函数,然后触发请求,会被断住
断点跟踪
跟到then,就进入
向上找,一定会找到request
示例二
示例三 模拟发请求
前提是需要浏览器环境, 提前打开网站
cookie hook
原理
Object.defineProperty
为对象的属性赋值,替换对象属性
基本语法:Object.defineProperty(obj, prop, descriptor)
,它的作用就是直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,接收的三个参数含义如下:
obj
:需要定义属性的当前对象;prop
:当前需要定义的属性名;
逆向的作用:
示例:监听后,修改属性的值:
访问属性时,会访问get
设置值的时候,会访问set方法
cookie 钩子用于定位 cookie 中关键参数生成位置,以下代码演示了当 cookie 中匹配到了 v
, 则插入断点:
注:正常hook cookie
操作的时候需要清除下cookie
示例:
监听cookie里面的v的变化
(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;
},
});
})();
执行hook, 翻页数据
可以看到已经有加密结果了,在往上找栈,看这个方法是谁调用的
可以看出,只有n是需要逆向的,其他都是固定值
根据rt.update, 点击控制台的函数,可以定位到上面的D()函数, 最终结果是通过O()函数返回的,定位到大O函数