我目前正在学习使用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对二进制文件进行一些基本的反向工程。我正在测试该程序,如果输入的密码正确无误,则返回错误...
我继续进行研究,这是我要理解的部分(if / while)的汇编代码。我试图在每一行中添加我认为的功能,但是我还没有找到密码:(
首先,这里是使用的变量: