下载附件,先查看一下文件信息
Linux64位程序,带调试信息。
先随手运行一下看看
丢尽IDA64打开
printf("Input key : ");
memset(bufWrite, 0, sizeof(bufWrite));
gets(bufWrite);
v4 = strlen(bufWrite);
v5 = write(pParentWrite[1], bufWrite, v4);
if ( v5 != strlen(bufWrite) )
printf("parent - partial/failed write");
do
{
memset(bufParentRead, 0, sizeof(bufParentRead));
numReada = read(pParentRead[0], bufParentRead, 0xC8uLL);
v6 = bCheckPtrace || checkDebuggerProcessRunning();
if ( !v6 && checkStringIsNumber(bufParentRead) && atoi(bufParentRead) )
{
puts("True");
if ( close(pParentWrite[1]) == -1 )
exit(1);
exit(0);
}
puts("Wrong !!!\n");
}
while ( numReada == -1 );
看来利用debug有点麻烦,那就看静态分析
我们的原输入通过一个confuseKey函数混淆
这里的输入被分为了4个部分,
szPart1 = szKey[1:10]
szPart2 = szKey[11:20]
szPart3 = szKey[21:30]
szPart4 = szKey[31:40]
顺序是3、4、1、2,拆出来再按3、4、1、2的顺序排列就可以得到正常答案
szKey = '{daf29f59034938ae4efd53fc275d81053ed5be8c}'
szPart1 = szKey[1:11]
szPart2 = szKey[11:21]
szPart3 = szKey[21:31]
szPart4 = szKey[31:41]
flag = szPart3 + szPart4 + szPart1 + szPart2
print(flag)
"""output
53fc275d81053ed5be8cdaf29f59034938ae4efd
"""
加上头尾
{53fc275d81053ed5be8cdaf29f59034938ae4efd}
当然,提交的时候有个坑,不带花括号,提交时要提交 53fc275d81053ed5be8cdaf29f59034938ae4efd