手工反编译与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)
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



