使用切割器的简单反向工程

问题描述 投票:0回答:1

我目前正在学习使用Cutter对二进制文件进行一些基本的反向工程。我正在测试的程序是否为参数输入的密码正确,否则返回错误消息。我在组装时有严重的差距,我无法弄清楚该密码。我已经为此工作了一段时间,并到达了我被卡住的位置。

这里是带有一些注释的反编译代码:

__x86.get_pc_thunk.bx();
stack0xffffffec = 0;
if (*extraout_ECX == 2) {   //test if nb_args == 2
    uStack33 = 0x776f7264;   // used later (important)
    var_19h = 0x70617373; 
    iVar1 = *(int32_t *)(extraout_ECX[1] + 4);   //the password I pass as an argument
    uVar3 = strlen(iVar1);   // size of the argument
    if (uVar3 < 8) {   // if size < 8 
        uVar2 = 0xffffffff;   // return value = -1
    } else {   //size of argument is correct
        while (stack0xffffffec < 8) {   // don't understand this part at all /!\
            if ((int32_t)*(char *)(iVar1 + stack0xffffffec) + 1 !=
                (int32_t)*(char *)((int32_t)&uStack33 + stack0xffffffec)) {   //if idk exit with an error
                puts(unaff_EBX + 0x168);
                return 0xffffffff;
            }
            unique0x00000f40 = stack0xffffffec + 1; // increment the iterator value
        }
        puts(unaff_EBX + 0x17f); // success message
        uVar2 = 0; // return value = 0
    }
} else { // if nb_args != 2
    puts(unaff_EBX + 0x14c); // error message
    uVar2 = 0xffffffff;   //return -1
}
return uVar2;    // return 1 or 0

所以,据我所知,程序首先尝试查看args ==2。如果是,它将测试密码的大小是否至少为8。如果是,它将在一段时间内输入密码有点失落。似乎它可以测试我输入的密码的每个字符,并将其与var uStack33(单词作为字符串)进行比较]

我提供的代码似乎有问题。这是我想要理解的汇编代码:

The assembly code of the while/if section我不想得到答案(找到密码),而只是想了解本节中发生的事情。

如果我对问题的解释不力,我将深表歉意,并将竭尽所能回答有关我的帖子的任何问题。

非常感谢,祝您有愉快的一天!

我目前正在学习使用Cutter对二进制文件进行一些基本的反向工程。我正在测试该程序,如果输入的密码正确无误,则返回错误...

assembly reverse-engineering
1个回答
0
投票

我继续进行研究,这是我要理解的部分(if / while)的汇编代码。我试图在每一行中添加我认为的功能,但是我还没有找到密码:(

首先,这里是使用的变量:

© www.soinside.com 2019 - 2024. All rights reserved.