这个反汇编的数组的开始和结束是啥?
Posted
技术标签:
【中文标题】这个反汇编的数组的开始和结束是啥?【英文标题】:What is the beginning and the end of this disassembled array?这个反汇编的数组的开始和结束是什么? 【发布时间】:2021-06-06 08:23:56 【问题描述】:在一个反汇编的 dll 中(通过 IDA),我找到了一个数组,它被注释为 int
的数组(但它可能是 byte
):
.rdata:000000018003CC00 ; int boxA[264]
.rdata:000000018003CC00 boxA dd 0 ; DATA XREF: BlockPrepXOR+5FC↑r
.rdata:000000018003CC04 db 0Eh
.rdata:000000018003CC05 db 0Bh
.rdata:000000018003CC06 db 0Dh
.rdata:000000018003CC07 db 9
.rdata:000000018003CC08 db 1Ch
.rdata:000000018003CC09 db 16h
.rdata:000000018003CC0A db 1Ah
.rdata:000000018003CC0B db 12h
.rdata:000000018003CC0C db 12h
.rdata:000000018003CC0D db 1Dh
.rdata:000000018003CC0E db 17h
.rdata:000000018003CC0F db 1Bh
我可以将数据解释为
000000h, E0B0D09h, 1C161A12h, ..
或
0, 90D0B0Eh, 121A161Ch, ...
或
00h,00h,00h,00h, 0Eh, 0Bh, ..
?
根据评论(来自 IDA),您能否确认该数组以 CC00h + 253*4 = D01Fh
结尾?我还有另一个数组,从 D020h
开始:
.rdata:000000018003D01D db 0F9h ; ù
.rdata:000000018003D01E db 0A2h ; ¢
.rdata:000000018003D01F db 3Fh ; ?
.rdata:000000018003D020 array4_1248 db 1 ; DATA XREF: BlockPrepXOR+39A↑o
.rdata:000000018003D021 db 2
.rdata:000000018003D022 db 4
.rdata:000000018003D023 db 8
【问题讨论】:
【参考方案1】:这只是this paper 中描述的 AES 解密的 T8 矩阵。 您可以通过在 Google 上查找 DWORD 值轻松识别它(例如 this is one of the results)。
所以这只是 AES 解密函数的数据。
另请注意,将字节序列解释为多字节数据序列(WORD、DWORD、QWORD 等)取决于架构。
对于 x86,只有 little-endian 解释是正确的(这是您的情况 2),但数据可能会进行任意操作(例如,它可以是 bswap
ped),因此,在 Google 上查找时,请始终同时使用 little 和 big-数据的字节序版本。
另外值得注意的是,IDA 可以将字节解释为 DWORD(输入两次d
或使用上下文菜单),根据反汇编二进制的体系结构显示正确的值。
【讨论】:
感谢 T8 提示。但是哪种解释是正确的? 1/2/3 ?此外,不清楚 1/2 中的哪一个是小端(我正在研究 x86)。 @Soleil:你的第二个问题是 little-endian。 @Soleil 哎呀,对不起,我以为你想知道那个向量是什么。正如 ecm 礼貌地指出的那样,这是您的情况 2。 @MargaretBloom 谢谢。我可以将数据更改为数组,但它是字节数组;我找不到让它成为一个 uint 数组(4 个字节)。当我使用d
更改类型时,它仅适用于作为数据的第一个元素,而不适用于数组。
@Soleil 定义第一个 DWORD,然后使用数组命令 (*
)。有很多 IDA 教程(包括官方文档)可以让它做你想做的事。如果你每次遇到(小)问题就放弃,逆向工程会把你活活吃掉:)以上是关于这个反汇编的数组的开始和结束是啥?的主要内容,如果未能解决你的问题,请参考以下文章