浏览器上进行全局Hook数据加密算法
·
前言:一篇简单入门级别的JS加解密hook文章。
浏览器:firefox
抓包工具:burpsuite
1、抓包访问登录页面的时候,站点加密情况如下:
2、火狐F12进入调试器,勾选“XHR断点”:
3、然后重新登录访问页面,浏览器会自动debug所有发送URL请求数据的位置,如下所示:
4、F8 到数据加密的位置:
5、接着主要查看右侧的“调用堆栈”的内容,其中loadData这段代码记录了数据加密的过程:
//三段式加密
var ajaxObj = this;
seajs.use('js/security/encrypt', function (encrypt) {
var data =YT.JsonToStr(conf.params || conf.param || {});
var key = encrypt.getAesKey();
var aesdata = encrypt.encrypt(data, key);
conf.params = aesdata;
conf.dynKey = key;
window.encryptObj = encrypt;
ajaxObj.post(conf);
});
6、简单解析这段代码:首先利用seajs向外部加载了encrypt.js,引入加密方法encrypt,因此encrypt是属于局部作用域的,接着用var声明aesdata和window.encryptObj。
加密方法:encrypt.encrypt(data, key) -> (return 加密后的数据)
解密方法: window.encryptObj -> (等于 encrypt)
7、因此,需要加密数据的hook位置就是encrypt.encrypt(data, key); 因为这个时候 data 的值还是明文。
8、而解密数据的hook位置就是window.encryptObj.aesDecrypt(data,conf.dynKey),后续代码也可以直接定位到。
9、因为 encrypt 是局部作用域,所以要借用源代码中seajs的引入方法,js hook代码可以写成下面的样子:
(function () {
try{
seajs.use('js/security/encrypt', function (encrypt) {
var e = encrypt.encrypt;
encrypt.encrypt = function (data) {
let res = e.apply(this,arguments);
console.error("加密(request):", res);
console.error("明文(request):", data);
return res
};
var decrypt = window.encryptObj.aesDecrypt;
window.encryptObj.aesDecrypt = function (key, value) {
let res = decrypt.apply(this, arguments);
console.error("response:", res);
return res;
};
});
}catch(error){}
})();
10、在控制台注入js,成功打印明文数据。
11、数据请求替换:
(function () {
try{
seajs.use('js/security/encrypt', function (encrypt) {
var e = encrypt.encrypt;
encrypt.encrypt = function (data) {
console.error("原请求:", data);
// 原字符串内容
const str1 = '111';
// 替换字符串内容
const str2 = '222';
if(data.indexOf(str1) != -1){
data = data.replace(str1, str2);
console.error("篡改后的请求:", data);
}
let res = e.apply(this, arguments);
return res
};
var decrypt = window.encryptObj.aesDecrypt;
window.encryptObj.aesDecrypt = function (key, value) {
console.error("response:", res);
let res = decrypt.apply(this, arguments);
return res;
};
});
}catch(error){}
})();
12、当然你也可以使用JS自定义替换加密文件的方法来hook,更简单!该方法在后续的文章中也有提到:
https://www.yuque.com/jammny/ioh9u7/du9lt18l9d20fqeg?singleDoc# 《【JS Hook实战】基于Webpack的JS加解密分析》
更多推荐
所有评论(0)