附件里有加密程序和密文。
先把花指令修一下。
核心逻辑:
1.明文循环左移1位生成a
2.取a的825和826两个字节做key1, 循环异或 004040A9 中的67个字节还原逻辑
3.执行还原后的逻辑(这里失败了)
4.再用 0x3139362D 循环异或 a 生成密文
for ( i = 0; i < target; ++i )
dest[i] = (2 * dest[i]) | (dest[i] >> 7); // ROR 7, ROL1
ptr = loc_4040A0
key1 = *(dest + 825);
dest[k] = ptr(dest[k], &key1);
push r12 ; loc_4040A0
push r11
call sub_4040EE
sub_4040EE(__int64 a1, _BYTE *text825_826, __int64 a3, __int64 a4)
{
for ( i= 0; i <= 0x42 ; i++ ) {
ptr_004040A9[i++] ^= text825_826[i % 2]; // 004040A9使用原文 ROL1后的 825 826字节 作为key 异或
}
return (ptr_004040A9)(a1, text825_826, a3, a4, j);
}
*(*(v9 + 72) + 0x32LL) ^= v10;
*key = 0x3139362D;
n4 = strlen(key);
for (j = 0; j < size; ++j )
dest[j] ^= key[j % n4];
通过爆破key1的2个字节还原字节码。尝试了以下全部可能。还是还原失败。
x[√] 成功! 字节组合: 0x4, 0x24
x[√] 成功! 字节组合: 0x20, 0x25
x[√] 成功! 字节组合: 0x20, 0x27
x[√] 成功! 字节组合: 0x21, 0x25
x[√] 成功! 字节组合: 0x21, 0x27
x[√] 成功! 字节组合: 0x22, 0x25
x[√] 成功! 字节组合: 0x22, 0x27
x[√] 成功! 字节组合: 0x23, 0x25
x[√] 成功! 字节组合: 0x23, 0x27
x[√] 成功! 字节组合: 0x24, 0x25
x[√] 成功! 字节组合: 0x24, 0x27
x[√] 成功! 字节组合: 0x25, 0x25
x[√] 成功! 字节组合: 0x25, 0x27
x[√] 成功! 字节组合: 0x25, 0x3d
x[√] 成功! 字节组合: 0x26, 0x25
x[√] 成功! 字节组合: 0x26, 0x27
x[√] 成功! 字节组合: 0x26, 0x3c
x[√] 成功! 字节组合: 0x27, 0x25
x[√] 成功! 字节组合: 0x27, 0x27
x[√] 成功! 字节组合: 0x39, 0x37
x[√] 成功! 字节组合: 0x3b, 0x5e
x[√] 成功! 字节组合: 0x3f, 0x31
x[√] 成功! 字节组合: 0x3f, 0x32
x[√] 成功! 字节组合: 0x40, 0x4e
x[√] 成功! 字节组合: 0x46, 0x7a
x[√] 成功! 字节组合: 0x6c, 0x25
x[√] 成功! 字节组合: 0x6c, 0x27
x[√] 成功! 字节组合: 0x70, 0x62
x[√] 成功! 字节组合: 0x71, 0x2c