CTFlearn: Lost Password
2018-07-25 本文已影响3人
SEVEN_9e53
题目来源: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}