初始化g_bn, 这个用来保存数独
.text:004B8DCC mov ecx, offset g_bn
.text:004B8DD1 call BigNum__BigNum_0
// size: 1410
struct BigNum {
void *vtbl;
DWORD digit_len;
// 8
BYTE digit[0x400];
// 408
DWORD digit_index[0x400];
// 1408
DWORD seed1;
DWORD seed2;
};
digit_index保存了digit的实际索引
构造函数中使用当前clock为随机数种子, 初始化digit_index
.text:004B8DCC mov ecx, offset g_bn
.text:004B8DD1 call BigNum__BigNum_0
// size: 1410
struct BigNum {
void *vtbl;
DWORD digit_len;
// 8
BYTE digit[0x400];
// 408
DWORD digit_index[0x400];
// 1408
DWORD seed1;
DWORD seed2;
};
digit_index保存了digit的实际索引
构造函数中使用当前clock为随机数种子, 初始化digit_index
校验代码, 设置硬件断点, 校验结果保存到buf_bn1
.text:004B8E55 call x_update_buf_bn1
...
.text:004B8E7A call x_set_hardware_bp
更新后的buf_bn1
.data:004BC080 buf_bn1 db 0BDh, 0A3h, 9Ch, 10h, 46h, 0F3h, 2Ch, 0
.data:004BC088 buf_bn2 db 1Eh, 0D6h, 83h, 0F4h, 9Fh, 0A3h, 62h, 0A3h, 0Dh, 34h, 73h, 0AEh, 0CDh, 0EEh, 0
.text:004B8E55 call x_update_buf_bn1
...
.text:004B8E7A call x_set_hardware_bp
更新后的buf_bn1
.data:004BC080 buf_bn1 db 0BDh, 0A3h, 9Ch, 10h, 46h, 0F3h, 2Ch, 0
.data:004BC088 buf_bn2 db 1Eh, 0D6h, 83h, 0F4h, 9Fh, 0A3h, 62h, 0A3h, 0Dh, 34h, 73h, 0AEh, 0CDh, 0EEh, 0
sn字符集: 123456789ABCDEF
输入作为16进制转换成10进制
.text:004B8EBF
...
.text:004B8FBC
sn字符集: 123456789ABCDEF
输入作为16进制转换成10进制
.text:004B8EBF
...
.text:004B8FBC
.text:004B8EBF
...
.text:004B8FBC
bn1 *= bn2; 结果转换成16进制
bn1: C23F6401C93ADB = 54675844241111771
bn2: EEDCEA3743D03A263AF94F386DE1 = 4844716167725693655941655263997409
bn1 *= bn2; B53E8F2B7B1A5B4D53C1BC6B32C8B6A5D9B4D3F97B
bn1: C23F6401C93ADB = 54675844241111771
bn2: EEDCEA3743D03A263AF94F386DE1 = 4844716167725693655941655263997409
bn1 *= bn2; B53E8F2B7B1A5B4D53C1BC6B32C8B6A5D9B4D3F97B
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!