某菠萝小说trace还原sign(二)

部署运行你感兴趣的模型镜像

因某些问题部分算法代码不再提供,如有需要可以联系我主页

目标:nonce=89BD9D8D-69A6-474E-8F46-7CC8796ED151×tamp=1731047246145&devicetoken=910D166A-736E-3231-8B21-8D12DFD75F16&sign=9A2DFE01283DF2583E06643E1AAB7216

这个中的sign值

某算法1是:

26049;7466;<3QJJ:K5<BH=.HQW>>>12:47<B3=5=91694/07;;/2?<3/=DC76?3=677=>C8=36?B31276C88E6=-6>B7266<D/6;

如何变成

677PQC8P36RB31276C88E6P96QB7266ODB6N26049N7466NO3Q12M47OB3P5P91694B07NNB2RO3BPDC76R3PQJJMK5OBHPAHQWQQ

观察可知倒换了一下顺序 然后:

36                                   13              36                                   16
677=>C8=36?B31276C88E6=-6>B7266<D/6; 26049;7466;<3  Q12:47<B3=5=91694/07;;/2?<3/=DC76?3= >JJ:K5<BH=.HQW>>
36                                    13             36                                  
677PQC8P36RB31276C88E6P96QB7266ODB6N 26049N7466NO3  Q12M47OB3P5P91694B07NNB2RO3BPDC76R3P QJJMK5OBHPAHQWQQ

= ascii码表是 61 > ascii码表是 62

P ascii码表是 80 Qascii码表是 81

所以结论就是如果是 非数字就加上19 需要单独处理('@', '9')

3.继续分析ing +1

x2 = 26049;7466;3QJJ:K5<BH=.HQW>>12:47<B3=5=91694/07;;/2?<3/=DC76?3=677=>C8=36?B31276C88E6=-6>B7266<D/6;

这个如何来的呢:

我们针对于一个字节来寻找答案 w9 = 0x36:

[libsfdata.so 0x2b1c0] [897d0153] 0x4002b1c0: "lsr w9, w12, #1" w9=0x1 w12=0x6d => w9=0x36

lsr 是一个 逻辑右移(Logical Shift Right)指令,具体意思是将寄存器中的值向右移动指定的位数,并将结果存储到目标寄存器中

所以我们只需要关注 w12=0x6d 是哪里来的就可以了。

[libsfdata.so 0x2b148] [8c010e0b] 0x4002b148: "add w12, w12, w14" w12=0x36 w14=0x37 => w12=0x6d

[libsfdata.so 0x2b138] [ec014039] 0x4002b138: "ldrb w12, [x15]" x15=0x404530d6 => w12=0x36是从0x404530d6 加载的

看下这个位置:

一共加载了101次

fromhex之后是:

46-7CC8796ED16ED15189BD9D8D-6D15189BD9D8D-69A6-474E-8F46-7CC8796E46-7CC8796ED15189BD9D8D-69A6-474E-8F

这个就有点像我们的入参经过某算法变化后的结果了

nonce=89BD9D8D-69A6-474E-8F46-7CC8796ED151&timestamp=1731047246145&devicetoken=910D166A-736E-3231-8B21-8D12DFD75F16&sign=9A2DFE01283DF2583E06643E1AAB7216

接着分析 w14=0x37

[libsfdata.so 0x2afe8] [ce014039] 0x4002afe8: "ldrb w14, [x14]" x14=0x4045f001 => w14=0x37

终于看到明文了1731047246145lPQDb9AKO7$LjkPG910D166A-736E-3231-8B21-8D12DFD75F1689BD9D8D-69A6-474E-8F46-7CC8796ED151

所以 26049;7466;3QJJ:K5<BH=.HQW>>12:47<B3=5=91694/07;;/2?<3/=DC76?3=677=>C8=36?B31276C88E6=-6>B7266<D/6;

[libsfdata.so 0x2b1c0] [897d0153] 0x4002b1c0: "lsr w9, w12, #1" w9=0x1 w12=0x6d => w9=0x36

w9=0x36 是由

w12 = 00000000 31 37 33 31 30 34 37 32 34 36 31 34 35 6c 50 51 |1731047246145lPQ| 00000010 44 62 39 41 4b 4f 37 24 4c 6a 6b 50 47 39 31 30 |Db9AKO7$LjkPG910| 00000020 44 31 36 36 41 2d 37 33 36 45 2d 33 32 33 31 2d |D166A-736E-3231-| 00000030 38 42 32 31 2d 38 44 31 32 44 46 44 37 35 46 31 |8B21-8D12DFD75F1| 00000040 36 38 39 42 44 39 44 38 44 2d 36 39 41 36 2d 34 |689BD9D8D-69A6-4| 00000050 37 34 45 2d 38 46 34 36 2d 37 43 43 38 37 39 36 |74E-8F46-7CC8796| 00000060 45 44 31 35 31 |ED151|

+

00000000 34 36 2d 37 43 43 38 37 39 36 45 44 31 36 45 44 |46-7CC8796ED16ED| 00000010 31 35 31 38 39 42 44 39 44 38 44 2d 36 44 31 35 |15189BD9D8D-6D15| 00000020 31 38 39 42 44 39 44 38 44 2d 36 39 41 36 2d 34 |189BD9D8D-69A6-4| 00000030 37 34 45 2d 38 46 34 36 2d 37 43 43 38 37 39 36 |74E-8F46-7CC8796| 00000040 45 34 36 2d 37 43 43 38 37 39 36 45 44 31 35 31 |E46-7CC8796ED151| 00000050 38 39 42 44 39 44 38 44 2d 36 39 41 36 2d 34 37 |89BD9D8D-69A6-47| 00000060 34 45 2d 38 46 |4E-8F|

再循环右移而来的。

所以说下面的问题就是

1731047246145lPQDb9AKO7$LjkPG910D166A-736E-3231-8B21-8D12DFD75F1689BD9D8D-69A6-474E-8F46-7CC8796ED151是如何变成

46-7CC8796ED16ED15189BD9D8D-6D15189BD9D8D-69A6-474E-8F46-7CC8796E46-7CC8796ED15189BD9D8D-69A6-474E-8F

找到这个位置:

我们还是以第一个字节为例子寻找:

0x2b138] [ec014039] 0x4002b138: "ldrb w12, [x15]" x15=0x404530d5 => w12=0x34

[libsfdata.so 0x2b024] [0f020f8b] 0x4002b024: "add x15, x16, x15" x16=0x404530c0 x15=0x15 => x15=0x404530d5

查看 0x404530c0 内存:

这个0x15其实就是索引了

是nonce

x15=0x15哪来的?继续寻找

[libsfdata.so 0x2b014] [2f820f9b] 0x4002b014: "msub x15, x17, x15, x0" x17=0x1 x15=0x24 x0=0x39 => x15=0x15

  1. ​
    **`msub x15, x17, x15, x0`** 这条指令的操作顺序是:
    1. 将 **`x17`** 和 **`x15`** 相乘。
    ​
    2. 然后将x0 - 结果
    ​
    3. 最终将结果存入 **`x15`** 寄存器。
    ​
       x0 - x17 * x15  = 0x15

x15是固定的0x24,

我们开始追x17:

[libsfdata.so 0x2b00c] [1108cf9a] 0x4002b00c: "udiv x17, x0, x15" x0=0x39 x15=0x24 => x17=0x1

- `udiv` 执行的是无符号除法,即所有操作数都被视为无符号整数。

x15=0x24也是固定的,x0 = 39 我们接着寻找:

0x2aff0] [e05f41f9] 0x4002aff0: "ldr x0, [sp, #0x2b8]" sp=0xbfffeef0 => x0=0x39

[libsfdata.so 0x29830] [e95f01f9] 0x40029830: "str x9, [sp, #0x2b8]" x9=0x39 sp=0xbfffeef0 => x9=0x39

[libsfdata.so 0x29828] [e90b40f9] 0x40029828: "ldr x9, [sp, #0x10]" sp=0xbfffeef0 => x9=0x39

[libsfdata.so 0x2a188] [08014039] 0x4002a188: "ldrb w8, [x8]" x8=0x404530c1 => w8=0x39

这里读取了四次:

所以 x15=0x15 其实就是

nonce的值:46-7CC8796ED16ED151 89BD9D8D-6D15189BD9D8D-69A6-474E-8F46-7CC8796E46-7CC8796ED15189BD9D8D-69A6-474E-8F

x0 = 89BD9D8D-69A6-474E-8F46-7CC8796ED151 取 索引[1] = 0x39

x17 = (x0 整除 0x24) = 0x1

x15 = 0x24

x0 - x17 * x15 = 0x15 => 索引 对比下图 也就是 46-7CC8796ED16ED1

同理 x0 = 89BD9D8D-69A6-474E-8F46-7CC8796ED151 取 索引[2] = 0x42

x17 = (x0 整除 0x24) = 0x1

x15 = 0x24

x0 - x17 * x15 = 0x15 => 0x1e 索引 对比下图 也就是 6ED15189BD9D8D-6

其余两次是:

D15189BD9D8D-69A6-474E-8F46-7CC8796E ​ 46-7CC8796ED15189BD9D8D-69A6-474E-8F

所以算法是先根据 89BD9D8D-69A6-474E-8F46-7CC8796ED151 自己相加自己扩展到至少101个字节长度

然后根据算法求出索引再进行拼接

4.最后一部分:

 读者自己可以琢磨一下。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值