首页
社区
课程
招聘
[原创][js逆向] HmacSHA512例子-08月19号-搜索key定位,xhr常规定位,校验请求
发表于: 1天前 414

[原创][js逆向] HmacSHA512例子-08月19号-搜索key定位,xhr常规定位,校验请求

1天前
414

解压密码 :     kanxue

解压密码是看雪的拼音 :   kanxue 


目标概述:


1, 首先,需要登录才能操作. 搜索的关键字是 万达集团


2,  开启xhr 请求. 这个就是我们需要的接口.



目标接口 : 4daK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2^5P5s2S2^5 .com/api/search/searchMulti, 我们看到响应正常. 我们看看有哪些请求 参数? 



请求头中的参数.

一共两个字段.


43d930d400d14394164a :  4e12473f5cb87ba5a5271b9f3f70c3115e9ed0bc771b4461398a82873a75d48d68d9200758c2bbace59ea8fab7063dde34ad5ee2e346a5be8bb6676895ad7be6


x-pid :  fc280becab404310fe61547ab0f3e424


基础知识: 



这个是在请求头中设置的.

exp.setRequestHeader('key', 'valude')   //方式1

exp.headers['key'] = 'valude'         // 方式2

exp.headers = {'key','valude'}      // 方式3 



找出分析字段



查找关键词的方法.

我们请求一下,看看 这个 43d930d400d14394164a 这个头是不是 固定的? 


x-pid:   fc280becab404310fe61547ab0f3e424

d4a47fe8c28bcc2588cc :  4f179b8a1b39380128261e80dcf578c92f08b279d82cf5bd0b31c3c95d059f347caad5514cb74eea66a93f305b0a0c7b1aede7d3efe0bbbf17d2db25f1840e4a

通过对比,可以知道,  x-pid 可以不用找了,他是一个固定.

唯一每次请求都要发生变化的就是 这个数字的这个位置. 


这 x-pid 给他下个断点.

这里看到更像url 组合的地方,我们给他下个断点.

又是一个 x-pid, 下断



jquery ,可以不用看了,这是 一个js库, 第三方的和 qcc没有关系.


我们跑起来看看.


fc280becab404310fe61547ab0f3e424

这个 Windows.pid 他是固定的. 看看 他直接赋值给了 x-pid



"4f179b8a1b39380128261e80dcf578c92f08b279d82cf5bd0b31c3c95d059f347caad5514cb74eea66a93f305b0a0c7b1aede7d3efe0bbbf17d2db25f1840e4a"

// 看来这个生成的位置找到了.


我们需要知道这个l值是怎么来的. 

var i = (0, o.default)(t, e.data) , 

    l = (0, r.default)(t, e.data, (0, s.default)());

     e.headers[i] = l  // i = "d4a47fe8c28bcc2588cc"  那么 请求头中的 这个 纯16进制的字符串都在这里生成的.我们需要慢慢寻找

定位就在里面了.

所以 找到 i 和 l 赋值的位置我们就知道了 它的生成过程.

最重要的 是   o.default     r.default    s.default  分别是什么? 

下断点 完毕,我们进入下一个步骤. 

我们找到了的话,就撤销无用的 bp

这里和 l 的值高度相关,我们也要探秘所有的相关的运算的函数. 



_createHmacHelper: function(t) {

    return function(e, n) {

        return new p.HMAC.init(t,n).finalize(e)

    }

}


最核心的表达式就是这个区块.   这个就是我们需要寻找的目标.

>new p.HMAC.init(t,n).finalize(e)  这个计算后, 就是  Hmac 算法的 幻数. 

'a00568f1b3fa007f8565a258be6b0973c5293d76010e6d37a1986dee5fae93dddf282f670b2613136ab3e6104379a1a425afb42c19bb0df03aa80bbf336e1d6d'

 a00568f1b3fa007f8565a258be6b0973c5293d76010e6d37a1986dee5fae93dddf282f670b2613136ab3e6104379a1a425afb42c19bb0df03aa80bbf336e1d6d

这个就是128位, 如果128位算法的话,就是  Hmac的SHA512 算法.



t  :   {blockSize: 32, _doReset: ?, _doProcessBlock: ?, _doFinalize: ?, clone: ?,?…}$super: {cfg: {…}, init: ?, reset: ?, update: ?, finalize: ?,?…}blockSize: 32clone: ? ()init: ? ()_doFinalize: ? ()_doProcessBlock: ? (t,e)_doReset: ? ()[[Prototype]]: Object

n  :    'iLAgiLklNiBl4LklN86rALvlgvk6iLAgiLklNiBl4LklN86rALvlgvk6'   //这个就是加密的key

e  :    '/api/user/getusercompanyinfopathString{"keynos":["befe52d9753b511b6aef5e33fe00f97d","52ab9321ae2fc33034faa5b32b642f75","eb6e4d0d990ed05670f65eccad73feb2","07f9b1dc5213f1ddec6862917b4348e4","c6a82e37e98b3501b1246dec9a09f376","faa238037c6cdf4367d52ae97c9b98a6","264084c817c76e003bf2501537e364b9","c6c109b080025ff0b5092ae6396bccbb","dcf5109629a637be741bf8033c3408c0","3044071874b3c9ce565cd598069e6351","f0cb34f96d131f0f6c322d8f5ea3d3ea","d88c2105c23f4bb7bd533c7b919c8d7c","00274c4f4315d2034e3a1f4dc8d28a59","dc1fee6d7bd83614e75deb242cc7138b","b1de8fe0d93c08d70fc0f8461d24f960","100ba81e4e3c870682bc7500d4e0ae7d","b58b2679b3c8f0354bbbbb10eaa3342e","9e4ac02a065d775feec7c253d6eceaec","ae795aefd4be177ba733c7daba60f2af","6dbb9c5f55b311afa97374fb7255a282"]}82bf4a689a0756f3840bc23cdb2e09b1'

// 这个就是待加密的 明文.


e40fa9edd30890541056


ok ,全部一致,就是 HmacSHA512 , 长度是128位.



案例理解:


对于这个项目 2年了 算法基本没有变过, 是先看了课程, 真的是一帧一帧看的, 虽然简单,但是不能妄自菲薄, 说要研究 安卓逆向, iOS逆向,都是浮云. 
先一步步让我们把 地基打牢固再说下一步. 
在我的 过去的几年中, 有个兄弟已经上岸了, 对着感兴趣的事情进行死磕.
今晚做这个 文章的时候, 真的有点不想写了,  做逆向的兄弟 他们真的是抱着一份热爱在做一份事情,而不是为了 为了钱而去逼着自己学习.

所以热爱.如果不热爱, 屁股是坐不热的. 所以人不要眼高手低. 

耐得住寂寞, 能够心无旁鹫做事情, 那么工作的机会将是一大把一大把的跟着你. 


注:  拒绝 AI 全量分析, 从你我做起.




传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!

最后于 10小时前 被calleng编辑 ,原因: 内容有更新.
上传的附件:
收藏
免费 0
打赏
分享
最新回复 (5)
雪    币: 84
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
剥离深情哈
1天前
0
雪    币: 51
活跃值: (4006)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有了深情才有动力, 不是理工, 学文科的. 
1天前
0
雪    币: 51
活跃值: (4006)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

本节方法:XHR 常规手段 + 调用栈定位

我们现在这个就是通过常规 XHR 方式来解决问题:

  • 上一节课:使用关键字搜索来找加密逻辑
  • 这一节课:使用 XHR 断点、常规手段,通过调用栈定位

操作步骤

  1. /api/search/searchMulti 直接配置 XHR 断点
  2. 逐层往上寻找,看能不能找到加密发生的位置,同时配合断点排查
  3. 这里的 t 已经有了我们想要的值
  4. 所以继续往上看:t 的值 d4a47fe8c28bcc2588cc 究竟是怎么传递过来的
  5. 发现这个值在当前帧里没有出现,说明应该是在异步逻辑之后产生的
  6. 于是给所有相关的异步调用逐个下断点

一路下断点,走调用栈分析,一步一步排查,就能找到目标位置。


验证:待加密文本 + 密钥

待加密文本:

/api/search/searchmultipathString{"searchkey":"万达集团","pageindex":2,"pagesize":20}82bf4a689a0756f3840bc23cdb2e09b1

加密密钥:

iLAgiklLN8QiklLN8QrLi4giLAgiklLN8QiklLN8QrLi4g

加密结果对比:

4e12473f5cb87ba5a5271b9f3f70c3115e9ed0bc771b4461398a82873a75d48d68d9200758c2bbace59ea8fab7063dde34ad5ee2e346a5be8bb6676895ad7be6

4e12473f5cb87ba5a5271b9f3f70c3115e9ed0bc771b4461398a82873a75d48d68d9200758c2bbace59ea8fab7063dde34ad5ee2e346a5be8bb6676895ad7be6

OK,位置完全一致。


下一步:扣代码

我们又开始扣代码来解决实际需求的问题。

通过前面的对比,我们知道 key 是固定的

上传的附件:
11小时前
0
雪    币: 51
活跃值: (4006)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5

对于 提取js中的函数, 基本需要下很多断点,非常考验调试的能力, 包括值的传递过程.中途并没什么课件.

上传的附件:
10小时前
0
雪    币: 51
活跃值: (4006)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

问题排查记录:耗时近 10 小时

对于这个问题,我又排查了近 10 个小时。

有些环境不统一,所以还是直接让 AI 把环境统一了一下。然后在新版本的基础上,先解决了计算的问题。

对于这个版本的 JS 代码,还要多看几次,自己再动手写一下——虽然跑起来了,但是还有 40% 的内容不太懂。


05:课程原版(存在 Cookie / WAF 问题)

  • C:\bbs.kanxue\Hamc-temp\05-qichacha-lesson.js
  • C:\bbs.kanxue\Hamc-temp\05-qichacha-lesson.py

这两个是课程中原来没有问题的,后来添加了 Cookie,然后再加上还有 Web 防火墙(WAF)

  • 一般 Cookie 是通过了 WAF 认证之后才放行的
  • Cookie 在原始的 两年前 的课件里是没有的
  • Cookie 会失效,它是存在有效期

所以 Cookie 的解决还不具备能力。


06:解决跨环境调用不统一问题

  • C:\bbs.kanxue\Hamc-temp\06-qcc-sha512.js
  • C:\bbs.kanxue\Hamc-temp\06-qcc-test3.py

这两个是通过 AI,在 WinXP 上解决 Node 8.xPython 3.8.xexecjs 调用不统一的问题。

所以这两个终于让调用传参没有了问题

关键经验:

  1. 无论在什么环境下,都应该使用 UTF-8 保存
  2. 函数的设计必须传参,否则存在不统一的情况

07:最终结果

响应 200 成功 ~

还有更多的事情要做!

理解它!

上传的附件:
10小时前
0
游客
登录 | 注册 方可回帖
返回