1

我在 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 个字节。

我不知道的是:

这条线实际上对输入做了什么。当我在纸上处理它时,它没有意义。

任何见解将不胜感激。

滑雪

4

0 回答 0