实验吧 逆向工程 逆向观察

知识点

C语言中整型数据和字符串的存储方式;
整型数据:低位在低地址,高位在高地址;
字符串:串首在低地址,串尾在高地址。

解题步骤

将文件丢道ida中,得到main函数的C代码。
实验吧 逆向工程 逆向观察_第1张图片选中src的值按r键,得到对应的字符串:
实验吧 逆向工程 逆向观察_第2张图片由于整型数据和字符串存储方式的差异,需要将字符串倒置,mercedes即为flag。

PS:

可以通过以下C代码理解字符串和整型数据存储方式的差异:

#include
#include

int main()
{
    long long a = 8315162673632404845;  //即a = 0x736564656372656d
    char s[10];
    unsigned char *p = (unsigned char *)&a;

    //整数的保存方式是:低位在低地址,高位在高地址
    for (int i=7; i>=0; i--) printf("%.2X", p[i]);
    printf("\n");

    //r键转换后得到的字符串依然是高位在前,低位在后
    for (int i=7; i>=0; i--) printf("%c", p[i]);
    printf("\n");

    //转换为字符串后,低地址在前,高地址在后
    memcpy(s, p, 8);
    s[8] = 0;
    printf("%s\n", s);

    //以16进制的形式输出字符串和a的值比对
    for (int i=0; i<8; i++) printf("%.2X", s[i]);
}

运行结果:

736564656372656D
sedecrem
mercedes
6D65726365646573

你可能感兴趣的:(CTF)