需要帮助理解来自 ghidra 的反编译代码行

问题描述

我在 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'

我认为我知道的:

original_key.0_4 表示从 original_key 数组偏移量 0 开始的 4 个字节(即将 original_key 的前 4 个字节视为 UINT) CONCAT11 表示将第二个 arg 的一个字节附加到第一个 arg 的 1 个字节。

我不知道的:

这一行实际上对输入做了什么。当我在纸上完成它时,它没有意义。

任何见解将不胜感激。

滑雪

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)