\xDA\x9Fb - 那是什么?

逆向工程 拆卸 ollydbg
2021-06-15 10:12:05

(警告:我是新来的)

我试图找出以下(反)程序集的作用:

MOV EAX,DWORD PTR SS:[EBP-54]     ; PTR to ASCII "\xDA\x9Fb"

我似乎明白地址 [EBP-54] 处的值被复制到 EAX。OllyDbg 发现该值是一个包含“\xDA\x9Fb”的 ascii 字符串。是对的吗?

有人可以向我解释这个 Ascii 字符串应该代表什么,以及它如何适合这个代码示例?

编辑:由于上述信息似乎不足以给出答案,我将尝试添加一些可能(或可能不会)阐明的说明。

在上面的指令之后不久,有多个 CMP,每个看起来像这样:

CMP DWORD PTR DS:[EAX+(different hex)],0
JE SHORT (position a few lines below)

此 CMP 以 true 退出,这不是所需的条件。左侧应该有另一个值而不是 0。

我无法弄清楚字符串的含义,但它被用作反汇编的许多内部(私有)函数中的多个参数之一,而其他参数将包含数据库的列名。

我打算做更多的挖掘,但我只是好奇这是否对任何人来说都很熟悉。

3个回答

正如 Ian Cook 所说,最可能的情况是这个“ASCII”根本不是一个字符串。

如果它以零结尾并且不包含过于疯狂的控制字符,像 OllyDbg 这样的反汇编器几乎会调用任何“ASCII”,但是扩展的 ASCII 解释“ÚŸb”和 UTF-8 解释“ڟb”(第一个字符是阿拉伯语)都不会使很有意义,所以很可能这是一个指向记录的指针,其中的第一个字段是指向 address 的指针0x00629FDA

有人可以向我解释这个 Ascii 字符串应该代表什么,以及它如何适合这个代码示例?

仅用一行代码作为上下文,不,没有人可以向您解释该 ASCII 字符串应该表示什么,以及它如何适合该代码示例。

\xdA\9FB = {0x0d,0x41,0x09,0x46,0x62}     

0x0d = CR 或回车
0x09 = tab
所以 ollldybg 将它们显示为 ascii 字符串的 ptr
假设地址401070包含一个字符串,
并且401130 contains 401070
在任何访问时401130 ollydbg 将取消引用该指针,401070
因为它包含一个 ascii 字符串(ollydbg 知道,因为它的分析数据)
它注释输出为 Ascii 数据的 PTR

CPU Disasm
Address   Hex dump     Command                  Comments
004010CD  B8 30114000  MOV EAX, msgbox.00401130 ; PTR to ASCII "A   Fb"

CPU Dump
Address   Hex dump                                ASCII
00401130  70 10 40 00|                            p@

CPU Dump
Address   Hex dump                                ASCII
00401070  0D 41 09 46|62 00                       A Fb

使用实际的 ascii 字符串

CPU Disasm
Address   Hex dump       Command                       Comments
004010CD    B8 30114000  MOV     EAX, msgbox.00401130  ; PTR to ASCII "Caption For A Simple "

CPU Dump
Address   Hex dump                                ASCII
00401130  70 10 40 00|                            p@

CPU Dump
Address   Hex dump                                         ASCII
00401070  43 61 70 74|69 6F 6E 20|46 6F 72 20|41 20 53 69| Caption For A Si

在此处输入图片说明