吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1895|回复: 20
收起左侧

[Web逆向] 记昨天一次分析某站的加签过程

[复制链接]
as614001 发表于 2022-11-30 11:00
本帖最后由 as614001 于 2022-11-30 11:00 编辑

起因

由于工作需要懒症发作,需要做一些工作。
post途中发现一些需要前面

1

1

过程

  1. 一般情况下,就是搜url路径、签名字符串来进行。因为这类一定是在post发包前进行整合数据。如setHeader、setParm ==

本例中进行搜索了url路径,一般搜索会出现多个结果,那就是每个结果点进去看一下,觉得可能就下一个断点。
太多了试试签名字符串,sign,(这里有个技巧减小查找范围,一般这种可以搜索 sign: 因为这类赋值一般都是这样的)

3

3

2

2
很明显33125这行有个最接近的,点进去看看。

4

4

非常明显是这个,刚好是两个需要的签名数据。
如何判断确定是不是,可以在段首下段,断下来就可以。当然可以在堆栈或者直接跟出跟进再确认。
经确认是这里。
那么就是对如何加密进行确认了。

  1. 读代码。就去可以加密的了。一般情况只需要调试一遍。我们只管结果就可以了。不过大多数情况代码都被格式化压缩。变量名代替,所以需要确认。

    5

    5

    通过读代码可以知道。
    通过i = !r || !r.hasOwnProperty("useSignApi") || r.useSignApi;是否确认需要加密。
    文中给出了公钥或固定公钥
    n = e && e.publicKey || "-----BEGIN PU

    此段意思就是 根据json的key值过滤非 数字 字符串的值,并以 “a=xxx ”形式并以 & 连接。

    Object.keys(r).filter((function(t) {
                            return ["number", "string"].includes(sn(r[t]))
                        }
                        )).sort().forEach((function(t, e) {
                            o += (0 === e ? "" : "&") + t + "=" + r[t]
                        }
                        ));

    关键点加密算法来了。

                        var a = Je()(o)
                          , s = $e.a.stringify(a)
                          , u = new rn;
                        return u.setPublicKey(n),
                        {
                            key: u.encrypt("".concat(i)),
                            sign: s
                        }

    a = Je()(o)
    通过断点调试可以发现,这里可以打个断点在这里 然后在console中打印一下Je()看看是什么,熟手也不用。
    熟悉的可以知道这个其实 Cryptojs 加密。不懂其实就要多百度,百度一下出来的就可以了。

6

6

7

7

8

8

9

9

知道了加密方式,cryptojs有很多种方式,这里只知道是cryptojs base64输出。

var a = Je()(o)
, s = $e.a.stringify(a)

所以我们可以把o字符串拿出来,做黑箱碰撞。其实就是瞎几把试。当然也可以跟进去一下就知道了。$e 是什么就可以快速知道了。

10

10
很幸运知道,该处用的是 SHA1 BASE64输出

11

11

看看另外一个


                        return u.setPublicKey(n),
                        {
                            key: u.encrypt("".concat(i)),

,经调试重复上述发现,其实这个是RSA加密,js用的一般叫 JScrypto 。一样不懂的重复上述就可以知道了。
只是这个 i 其实就是上文的一个 13位时间戳字符串。严重怀疑偷懒。

12

12

用自己的语言还原。

这里用的python

13

13

结语

多试多搞多百度。

没事多百度。

免费评分

参与人数 4吾爱币 +10 热心值 +3 收起 理由
涛之雨 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ytfh1131 + 1 + 1 谢谢@Thanks!
ycj255999 + 1 我很赞同!
superworker2022 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| as614001 发表于 2022-11-30 11:43
田田爱崽崽 发表于 2022-11-30 11:18
请教一下后面这个CryptoJS类原型的测试工具叫啥名?

易语言那边的 WT-JS
 楼主| as614001 发表于 2022-11-30 11:41
sxtyys 发表于 2022-11-30 11:11
graper 发表于 2022-11-30 11:16
唉,就是看不懂JS
田田爱崽崽 发表于 2022-11-30 11:18
请教一下后面这个CryptoJS类原型的测试工具叫啥名?
知心 发表于 2022-11-30 11:19
请教一下:黑箱碰撞的时候用的是什么软件
jhonjhon 发表于 2022-11-30 11:37

谢谢楼主分享好方法
田田爱崽崽 发表于 2022-11-30 11:44
as614001 发表于 2022-11-30 11:43
易语言那边的 WT-JS

好的,非常感谢
yingchengfeng 发表于 2022-11-30 11:50
谢谢楼主分享好方法
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-19 19:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表