在过去的两个月里,我学习了基本的逆向工程,装配和C.我从朋友那里得到了二进制文件。他们让我把那个二进制文件转换成原始来源。我使用IDA Pro来反转二进制文件,但我在下面的这些说明中遇到了一些问题:
mov [esp+230h+var_218], 74654D5Fh
mov [esp+230h+var_214], 754D6C61h
mov [esp+230h+var_210], 6873696Ch
mov [esp+230h+var_20C], 5F61h
我尝试搜索十六进制但我没有找到任何结果。有人可以解释一下吗?
答案 0 :(得分:1)
x86是小字节序,所以为了阅读它,你从dword文字的右边到左边开始。
字符串是" _MetalMulisha _ ",fwiw。
答案 1 :(得分:1)
详细说明Lord Kale XI's answer,x86是little endian archiecture。这实际上意味着我们将多字节整数的字节向后存储,即首先存储最低有效字节。我提供的链接很好地解释了它是如何工作的。
因此,在这些指令中,我们首先将整数74654D5Fh
移动到内存中的某个位置。按顺序,这实际上写入了字节5F 4D 65 74
。然后,我们将整数754D6C61h
写入内存中的 next 四个字节,写入61 6C 4D 75
,依此类推。
在这些指令之后,内存包含以下字节序列,每个字节都可以解释为ASCII字符:
0x74654D5F 0x754D6C61 0x6873696C 0x00005F61
| | | |
V V V V
[ var_218 ] [ var_214 ] [ var_210 ] [ var_20C ]
5F 4D 65 74 61 6C 4D 75 6C 69 73 68 61 5F 00 00
'_' 'M' 'e' 't' 'a' 'l' 'M' 'u' 'l' 'i' 's' 'h' 'a' '_' '\0' '\0'
那么,这些指令正在做的是将以空值终止的字符串_MetalMulisha_
写入从var_218
开始的内存。