【JS Hook 实战】某网上银行JS加密算法分析

admin 2022年12月8日19:42:00评论67 views字数 2049阅读6分49秒阅读模式

原创文章WEB渗透渗透技术

原创声明:转载本文请标注出处和作者,望尊重作者劳动成果!感谢!

前言:一篇简单入门级别的JS加解密hook文章。

浏览器:firefox抓包工具:burpsuite

1、抓包访问登录页面的时候,站点加密情况如下:

【JS Hook 实战】某网上银行JS加密算法分析

2、火狐F12进入调试器,勾选“XHR断点”:

【JS Hook 实战】某网上银行JS加密算法分析

3、然后重新登录访问页面,浏览器会自动debug所有发送URL请求数据的位置,如下所示:

【JS Hook 实战】某网上银行JS加密算法分析

4、F8 到数据加密的位置:

【JS Hook 实战】某网上银行JS加密算法分析

5、接着主要查看右侧的“调用堆栈”的内容,其中loadData这段代码记录了数据加密的过程:

【JS Hook 实战】某网上银行JS加密算法分析

//三段式加密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声明aesdatawindow.encryptObj

加密方法:encrypt.encrypt(data, key) -> (return 加密后的数据)解密方法:window.encryptObj -> (等于 encrypt)


7、因此,需要加密数据的hook位置就是encrypt.encrypt(data, key); 因为这个时候 data 的值还是明文。

【JS Hook 实战】某网上银行JS加密算法分析

8、而解密数据的hook位置就是window.encryptObj.aesDecrypt(data,conf.dynKey)后续代码也可以直接定位到

【JS Hook 实战】某网上银行JS加密算法分析

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,成功打印明文数据。

【JS Hook 实战】某网上银行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加解密分析》

原文始发于微信公众号(Fighter安全团队):【JS Hook 实战】某网上银行JS加密算法分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月8日19:42:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【JS Hook 实战】某网上银行JS加密算法分析https://cn-sec.com/archives/1445702.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息