吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 317|回复: 1
收起左侧

[求助] 算法逻辑

[复制链接]
huchen 发表于 2023-12-5 21:36
int main() {
        uint64_t data[11] = { 0x2882d802120e,0x28529a05954,0x486088c03,0xc0fb3b55754,0xc2b9b7f8651,0xae83fb054c,0x29abf6ddcb15,0x10e261fc807,0x2a82fe86d707,0xe0cb79a5706,0x330560890d06 };
        uint32_t flag[11] = { 0 };

        for (int i = 0; i < 11; ++i) {
                flag[i] = (((data[i] ^ (data[i] >> 15)) >> 15) & 0xfffffffc) | (data[i] & 0x3);
        }
求大佬教教这个算法的逻辑,我认为这是减少字节,并且换了顺序,但就是弄不明白

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

yes2 发表于 2023-12-6 17:00
本帖最后由 yes2 于 2023-12-6 22:01 编辑

[C++] 纯文本查看 复制代码
    uint64_t data[11] = { 0x2882d802120e, 0x28529a05954, 0x486088c03, 0xc0fb3b55754, 0xc2b9b7f8651, 0xae83fb054c, 0x29abf6ddcb15, 0x10e261fc807, 0x2a82fe86d707, 0xe0cb79a5706, 0x330560890d06 };
    uint32_t flag[11] = { 0 };

    for (int i = 0; i < 11; ++i) {
        uint64_t a = data[i] >> 15;  // 低15位不参与异或,先丢弃[0-14];最高2位应该也没有用到[62-63]
        uint64_t b = a >> 15;          // 再次右移15位作为异或子
        uint64_t c = b ^ a;               // 异或 [15-46] ^ [30-61]
        uint64_t d = c & 0xfffffffc;    // 保留[17-46]
        flag[i] = d | (data[i] & 0x3);  // 合并[0-1]
    }

所以应该是64位数值按位[0-63]来,取位[17-46] ^ [32-61]的结果作为flag的[2-31]位,[0-1]照抄
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 18:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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