我在 Ghidra 中反转了一个简单的二进制文件,并遇到了以下反编译的 C 代码:
original_key._0_4_ = original_key._0_4_ & 0xffff0000 | (uint)CONCAT11(original_key[0],(char)(original_key._0_4_ >> 8));
这是相关的反汇编:
LAB_00101558 XREF[1]:
00101558 0f b6 45 f1 MOVZX __buf,byte ptr [RBP + original_key[0]]
0010155c 88 45 e4 MOV byte ptr [RBP + local_24],__buf
0010155f 0f b6 45 f2 MOVZX __buf,byte ptr [RBP + original_key[1]]
00101563 88 45 e5 MOV byte ptr [RBP + local_23],__buf
00101566 0f b6 45 e5 MOVZX __buf,byte ptr [RBP + local_23]
0010156a 88 45 f1 MOV byte ptr [RBP + original_key[0]],__buf
0010156d 0f b6 45 e4 MOVZX __buf,byte ptr [RBP + local_24]
00101571 88 45 f2 MOV byte ptr [RBP + original_key[1]],__buf
00101574 c7 45 e8 MOV dword ptr [RBP + key_index],0x0
00 00 00 00
0010157b eb 42 JMP LAB_001015bf
我不知道这行代码在做什么:
我知道的:
original_key 是一个 char[6] 即它被定义为 char original_key [6];original_key 的值可以是此行开头的任何值,但执行后 original_key 必须包含字符串 'uvxcuh'
我想我知道的:
原始密钥。0_4表示从 original_key 数组的偏移量 0 开始的 4 个字节(即将 original_key 的前 4 个字节视为 UINT) CONCAT11 表示将第二个 arg 的一个字节附加到第一个 arg 的 1 个字节。
我不知道的是:
这条线实际上对输入做了什么。当我在纸上处理它时,它没有意义。
任何见解将不胜感激。
滑雪