IOLI 破解版输入的长度要求

逆向工程 x86 linux 快手
2021-06-21 12:21:33

所以我刚刚开始学习逆向工程和二进制开发,并通过 RPI 课程,其中第一个实验集是从Github 上可用的 IOLI 破解程序中提取的如果有帮助,我可以在这里发布所有的反汇编。

我正在做第 5 项工作,但我在一个方面感到困惑。我了解如何获取解决方案并正确获取密码,但是输入的长度似乎无法追溯到任何程序集。

数字加起来可以超过 10h,最后一个可以是奇数,但是一旦输入超过 9 个字符,它就不会被接受。

在此处输入图片说明

我正在使用 gdb 和 ida 以及任何其他看起来有用的工具,但特定工具对我来说并不重要。如果需要,请发布带有雷达输出的解释。

1个回答

您观察的原因是 sscanf 调用中的溢出,该调用是在检查数字是偶数还是奇数的函数中完成的。虽然对 9 个字符的密码的检查成功,但 10 个字符的密码会产生溢出并且检查失败。

要验证、编译并运行以下 C 代码:

#include <stdio.h>
#include <stdlib.h>


int main ( ) 
{
    int number;

    sscanf ( "222222222", "%d", &number );
    printf ( "Number (9 digits): %d\n", number ); 

    sscanf ( "2222222222", "%d", &number );
    printf ( "Number (10 digits): %d\n", number );

    if ( number & 0x01 == 0 ) {
        printf ( "Even!\n" );
    }
    else {
        printf ( "Odd!\n" );
    }
    return 0;
}