getit

getit

难度系数: ⭐⭐⭐
题目来源: SharifCTF 2016
题目描述:菜鸡发现这个程序偷偷摸摸在自己的机器上搞事情,它决定一探究竟
题目场景: 暂无
 

拿到手,查一下是否有壳

 

无壳,ELF,64位

直接ida打开,啊好复杂,直接f5看伪代码,main函数的伪代码

 

 

 哇,看我看见了什么,flag.的气息,十有八九就分析这部分内容就okk啦。

第一部分是定义了一些变量,然后是一个循环,再往下就是写一个文件,往文件内写一些目前还不知道的东西。

最后还有一个remove,是不是不删除就可以最后看到文件里的内容,我觉得还行,那我就先看看往文件里写了什么

以我不深厚的代码功底,粗略扫一下,v5,u,t,p,这几个都比较可疑

v5是在开头定义的,__int64类型,还是从零开始,排除。

找u的值

 

 

 看我发现了什么,u,t,p,s的值都有了,经过我慎重的思考,这个t的值的这个大括号是不是很想flag的样子

t的值是啥子呦,怎么还有个53h,作为一个逆向小萌新,肯定是不知道怎么解决的啦,但是我偶然,看见了题目来源是 SharifCTF 2016 是不是和辣个harifCTF一样,53h代表着S?

这是什么神秘的转换,我查查,最后发现ASCLL码的16进制53是S,好像恍然大悟,嗯??~~!!!

继续看我们的代码,在while循环里有t的值,现在就需要让那一串问号现形了。

开始着手写代码啦

多余的变量统统删掉,把报错的地方修修改改

 1 #include <stdio.h>
 2 #include<string.h> 
 3 int main()
 4 {
 5   char v3; // al
 6   long long v5=0; // [rsp+0h] [rbp-40h]
 7   char s[] = "c61b68366edeb7bdce3c6820314b7498";
 8   char t[] = "SharifCTF{????????????????????????????????}";
 9   
10   while ( (signed int)v5 < strlen(s) )
11   {
12     if ( v5 & 1 )
13       v3 = 1;
14     else
15       v3 = -1;
16     *(t + (signed int)v5 + 10) = s[(signed int)v5] + v3;
17     v5++;
18   }
19   printf("%s",t);
20   return 0;
21   
22 }

哈!成功!

 

 敲开心!!

年轻的我还是太年轻啦,看大佬的评论才知道,原来用文本打开可以直接看到t的值

收获满满!!!

 

 

加油!未来可期

 

posted @ 2020-06-04 21:00  非凡的静静  阅读(461)  评论(0编辑  收藏  举报