专栏名称: 合天网安实验室
为广大信息安全爱好者提供有价值的文章推送服务!
目录
相关文章推荐
OFweek维科网  ·  宁德时代连签三大重磅合作! ·  昨天  
半导体行业联盟  ·  突发!"中国英伟达"裁员200人! ·  2 天前  
51好读  ›  专栏  ›  合天网安实验室

那些年之我不会js逆向

合天网安实验室  · 公众号  ·  · 2023-12-27 17:42

正文

0x01 示例1-bc野站(md5)

(直接搜索关键词法)

在日某个网站的时候,想要爆破账号密码,解密密码加密的时候遇见的问题

这里的password被加密了,尝试找到加密方式

通过抓取js发现了:

/jdb-gamehallv3/pool_247/_nuxt/entry.ee524e21.js

代码

数据很多,搜索关键字,然后搜索了很久,搜索到了 crypto 关键字,发现这么一段代码:

var nodeWrap = function(method) {  // 使用 require 导入 crypto 和 Buffer 模块  const crypto = eval("require('crypto')");  const Buffer = eval("require('buffer').Buffer");    // 定义封装后的哈希方法  var nodeMethod = function(t) {    if (typeof t == "string") {      // 如果输入是字符串,使用 crypto 模块的 createHash 方法生成 SHA-1 哈希值      return crypto.createHash("sha1").update(t, "utf8").digest("hex");    }        if (t.constructor === ArrayBuffer) {      // 如果输入是 ArrayBuffer,转换为 Uint8Array,并使用 createHash 方法生成哈希值      t = new Uint8Array(t);    } else if (t.length === void 0) {      // 如果输入是其他类型数据,则使用外部传入的 method 函数处理      return method(t);    }        // 使用 crypto 模块的 createHash 方法生成 SHA-1 哈希值    return crypto.createHash("sha1").update(new Buffer(t)).digest("hex");  };    return nodeMethod;};

  • 如果输入是字符串,使用 crypto.createHash 方法生成输入字符串的 SHA-1 哈希值,并以十六进制格式返回。

  • 如果输入是 ArrayBuffer,将其转换为 Uint8Array,并使用 crypto.createHash 方法生成哈希值。

  • 如果输入是其他类型的数据,则使用外部传入的 method 函数来处理。

其实核心代码就是:

crypto.createHash("sha1").update(t, "utf8").digest("hex");

解密

const x = "test";const nodeWrap = (method) => {    const crypto = require('crypto');    const nodeMethod = (t) => {        if (typeof t === "string") {            return crypto.createHash("sha1").update(t, "utf8").digest("hex");        }        return method(t);    };    return nodeMethod;};const myHashFunction = nodeWrap();const result = myHashFunction(x);console.log(result);

而后续当我使用前段输入账号密码后发现结果一致,解密成功

小DLC

后续通过逻辑漏洞到了后台

0x02 示例2-某公众号登录加解密(调试md5)

跟踪分析

这里可以看到加密是md5,但是我们还是按照不知道如何加密的节奏来看如何加密的

这里登录后,查看调用堆栈

然后追踪到了v函数

在这里之前,密码没有加密,然后在此之后,密码进行了加密。

然后这里,我们进入v函数,在控制台也可以看见v的定义

于是下断点,还是admin,那就跟踪D(t)

然后再去追踪这些,太多了,应该这些都是加密的代码了

随着这个不断的循环,加密的内容r从短变长,逐渐加密结束

当退出这个循环的时候,发现就已经加密完成,也就是md5的加密结束了

解密过程

既然已经知道如何加密了,我们这里就需要对其进行解密,我们尝试复制出来他的代码,然后解密尝试

成功解密

0x03 示例3-某企业登录(对称加密)

分析

首先抓包看一下加密了什么:

这里是加密了密码,但是这里不像是常见url或者base64,md5之类的,所以继续进行分析

全局搜索这个密码字段,发现了若干,然后一个个去看,去下断点调试即可

通过分析,我们定位到了desEncrypt函数,然后在函数里发现了: keyObj = SECURITYKEY.get();







请到「今天看啥」查看全文