CTFlearn: Lost Password

题目来源:https://ctflearn.com/index.php?action=find_problem_details&problem_id=380

原题:

Lost Password

I lost my password :( can you crack my program

https://mega.nz/#!caZxSBTT!qnrxeFvX5FOcSIngekCj4ZOO8R2EeuBhOryVieCumd0

Format Flag : flag{key/password}

下载题目中的文件,在kali中运行:


程序让我们输入密码,之后返回了一串字符。根据题意,正确的密码就是flag值。

将文件放入IDA pro中进行反编译,查看main函数源码:


可以看到main函数中只是判断密码是否符合一些条件,并没有调用更多的函数。如果密码符合条件则打印出“Password Benar!”,否则打印“Password Salah!”。分析源码可以看到用户输入的密码存放在字符数组s中。之后一个for循环检查s中的每个字符是否与整型v4内存中所对应的字符相同。之后还判断了s的长度是否为12。所以我们可以得出密码的长度为12个字符,并且其字符与v4中的相同。

我写了一个c程序来计算v4所对应的字符串:


运行结果为:


前8个字符看起来很像正确的字符,但是后面的字符却溢出了。这是因为一个长整型没有足够的空间来储存12byte长度的字符串,所以程序中还在v4之后定义了v5。我们以同样的方式来计算v5所对应的字符串可以得到:


字符串:“1N1_P455W0RD”的长度正好是12,将其输入到程序中:


程序显示密码正确!安装题目给出的flag的格式,flag就是:flag{1N1_P455W0RD}

你可能感兴趣的:(CTFlearn: Lost Password)