陈公子的话 发表于 2021-8-1 20:20:12

aeshook问题

```
// ==UserScript==
// @name       陈_AesHook
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptionhookaes测试
// @author       陈
// @match      https://*/*
// @match      http://*/*
// @icon         https://www.google.com/s2/favicons?domain=baidu.com
// @grant      none
// ==/UserScript==


(function() {
    'use strict';
    console.log('小陈AesHook测试初始化成功,自动下断请输入“IsDebugger = true”。');
    var IsDebugger = false;
    //对window对象的属性进行检测
    if( window.CryptoJS != undefined){
      console.log('检测到标准加密库')
      var CryptoJS = window.CryptoJS;
      if(CryptoJS.AES != undefined ){
            window.CryptoJS.AES.encrypt = function(){
                console.log('已检测到Aes算法')
                let password = CryptoJS.enc.Utf8.stringify(arguments);
                let key = CryptoJS.enc.Utf8.stringify(arguments);
                let iv = CryptoJS.enc.Utf8.stringify(arguments['iv']);
                console.log('已hook到Aes算法,参数如下:');
                console.log('password:'+password);
                console.log('key:'+key);
                console.log('iv:'+iv);
                if(IsDebugger = true){
                  debugger;
                }
            }
         
         
      }
    }else{
      console.log('未检测到标准加密库');
    }
})();




```

这样感觉局限的地方很多,混淆之后或者名称改了应该都拦截不到...哥哥们有点思路或者建议...?

李恒道 发表于 2021-8-1 20:44:01

遍历windows下属性,对属性返回的内容判断是否是函数,如果是函数tostring,然后tostring查找是否存在一些关键字符串?
但是可能尿崩把...

脚本体验师001 发表于 2021-8-1 20:53:55

学习中... window.CryptoJS是不是包括AES,如果是的话就直接弄残它了,还要判断干什么

王一之 发表于 2021-8-1 21:35:51

可以这样判断
if(window.CryptoJS && window.CryptoJS.AES)

李恒道 发表于 2021-8-1 23:38:16

脚本体验师001 发表于 2021-8-1 20:53
学习中... window.CryptoJS是不是包括AES,如果是的话就直接弄残它了,还要判断干什么 ...

那样网页的自身功能也会残疾,这样可以获取一些内容,比如拓展网页功能,利用自身的加密函数,或者在加密过程中做篡改什么的

cxxjackie 发表于 2021-8-2 13:46:24

本帖最后由 cxxjackie 于 2021-8-2 13:48 编辑

const windowKeys = Object.getOwnPropertyNames(window);
for (let windowKey of windowKeys) {
if (typeof(window) == 'object') {
    const firstKeys = Object.keys(window);
    for (let firstKey of firstKeys) {
      if (firstKey.toLowerCase() == 'aes' && typeof(window) == 'object') {
      const secondKeys = Object.keys(window);
      for (let secondKey of secondKeys) {
          if (secondKey.toLowerCase() == 'encrypt' && typeof(window) == 'function') {
            //hook
            break;
          }
      }
      break;
      }
    }
}
}
这样?感觉还是很难解决混淆的问题,而且性能捉鸡。还有你别把原算法弄没了,可以把原有的encrypt用一个_encrypt保存起来,然后return _encrypt.apply(this, arguments);

李恒道 发表于 2021-8-2 14:58:01

cxxjackie 发表于 2021-8-2 13:46
这样?感觉还是很难解决混淆的问题,而且性能捉鸡。还有你别把原算法弄没了,可以把原有的encrypt用一个_e ...

我也觉得...性能做鸡的不行
页: [1]
查看完整版本: aeshook问题