richard_ljd 发表于 2024-4-21 09:26

x64dbg中内存窗口的疑问

起因是在看逆向教程时,老师提到了:有些时候在提示窗口的字符串旁边就是密码。我根据这个说法想要进行一个尝试,
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
        int Key = 0;
        printf("输入密码:");
        scanf("%d",&Key);

        if(Key == 123456)
                puts("Ture");
        else
                puts("Flase");
       
        system("pause");
        return 0;
}

这是小程序的代码,经过编译后运行无误之后用dbg打开,用户模块搜索字符串

这一步很轻松的就找到了,只是一个普通的程序,随后我转到内存窗口

内存窗口中没有找到字符串,我不太明白这是什么原因所以想要请问一下()

爱飞的猫 发表于 2024-4-21 17:38

因为你使用整型(int)来对比密码,而不是字符串。

通常进行字符串对比的时候,堆栈可以看到函数的变量值。因此出现错误弹窗的时候,如果没有清理该变量,就能看到。

64 位的程序又有点不同,因为寄存器多,可能会将变量存储到某个寄存器中。不过看你截图你编译的还是 32 位程序,和这个应该关系不大。

richard_ljd 发表于 2024-4-22 10:52

爱飞的猫 发表于 2024-4-21 17:38
因为你使用整型(int)来对比密码,而不是字符串。

通常进行字符串对比的时候,堆栈可以看到函数的变量 ...

感谢,不过似乎这个程序还是一个64位程序,至少默认打开的是x64dbg,我阅读了你的回复后了解到了因为我是使用int类型进行判断,所以导致引发的疑惑,随后我对代码进行了更改
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char const *argv[])
{
        char str;
        char key[] = "123456";
        char t[] = "Ture";
        char f[] = "Flase";

        printf("Key");
        scanf("%s",&str);

        if(!strcmp(str,key))
                        printf("%s\n",t );
        else
                printf("%s\n",f );

        system("pause");
        return 0;
}


编译成功以后我对这个程序进行了调试
(如果你说为什么我把Flase和Ture都写成变量的话,主要是第一次我没有意识到我输入的密码
也会写入。所以添加了这两个变量在printf调用之前读取的时候我能够找到位置)

搜索->所有用户模块->跨模块调用
我搜索printf的调用找到了判断点,然后下断点(如图)


随后向后跟进了几步,printf调用前读取了f字符串,我对f字符串转到内存窗口看到了

后续就是我设置的密码和t字符串的内容,我也发现了我输入的字符串12345在这个的后面,第二次修改我将ture和flase设为常量,
在判断点前暂停,在栈窗口中我发现了我输入的内容,

随后就是转到内存窗口,也看到了位于我输入字符串前设置的密码。

但是还有一个问题能问一下么?

在我使用ce的时候,一般对一个变量打开内存布局首位都是这个变量。但是在使用x64dbg时转到内存窗口开头并不是我选中的内容(就像上面内存窗口,
我是点击Flase转到内存窗口的,但是实际上Flase的内容在内存窗口的中间。对于这里我有一点疑惑。

sbwfnhn 发表于 2024-4-22 16:24

char t[] = "Ture";

ture ??? 不是true?????

richard_ljd 发表于 2024-4-22 17:22

sbwfnhn 发表于 2024-4-22 16:24
char t[] = "Ture";

ture ??? 不是true?????

az,记错了

爱飞的猫 发表于 2024-4-22 17:41

richard_ljd 发表于 2024-4-22 10:52
感谢,不过似乎这个程序还是一个64位程序,至少默认打开的是x64dbg,我阅读了你的回复后了解到了因为我是 ...

因为 x64dbg 的内存视图(memory dump)的地址是对齐到 0x10。ce 的这个地方可以不对齐。

我不清楚有没有选项可以改变这一行为。
页: [1]
查看完整版本: x64dbg中内存窗口的疑问