55、手工反编译与Z3 SMT求解器及加密狗破解实例

手工反编译与Z3 SMT求解器及加密狗破解实例

手工反编译与哈希函数分析

初始时,我们面对一个经过简化后可明确其计算余数而非商的函数。以下是该函数的代码:

uint64_t f(uint64_t input)
{
    uint64_t rax, rbx, rcx, rdx, r8;
    rax = input;
    rax *= 0x5D7E0D1F2E0F1F84;
    rax = _lrotr(rax, rax & 0xF); // rotate right
    rax ^= 0x388D76AEE8CB1500;
    rax = _lrotl(rax, rax & 0xF); // rotate left
    r8 = rax + 0xD2E9EE7E83C4285B;
    return _lrotl(r8, r8 % 60); // rotate left
}

进一步整理后,得到如下格式更规范的源代码:

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <intrin.h>
#define C1 0x5D7E0D1F2E0F1F84
#define C2 0x388D76AEE8CB1500
#define C3 0xD2E9EE7E83C4285B
uint64_t hash(uint64_t v)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值