getit
查壳,elf文件,64位、
拖入ida,看main

后半部分不用看,就是创建文件然后将数据(FLAG)写入进去,所以重点是前半部分
v9 = __readfsqword(40u);
LODWORD(v5) = 0;
while ( (signed int)v5 < strlen(s) )
{
if ( v5 & 1 )
v3 = 1;
else
v3 = -1;
*(&t + (signed int)v5 + 10) = s[(signed int)v5] + v3; // s='c61b68366edeb7bdce3c6820314b7498'
LODWORD(v5) = v5 + 1; // t=SharifCTF{????????????????????????????????}
}
-
在循环中:
-
如果
v5是奇数,v3被设置为1;如果是偶数,v3被设置为-1。 -
然后,将
s[v5] + v3的结果存储到t[v5 + 10]中。 -
这段代码的作用是对字符串
s的每个字符进行简单的加1或减1操作,并将结果存储到t中
-
s是c61b68366edeb7bdce3c6820314b7498
t的一部分是harifCTF{????????????????????????????????}
那么过程就非常容易理解了
然后写脚本,由于非常简单,我就直接用c语言
#include <stdio.h>
#include <string.h>
int main()
{
char s[]="c61b68366edeb7bdce3c6820314b7498";
char t[]="SharifCTF{????????????????????????????????}";
int v5=0;
int v3=0;
while(v5<strlen(s))
{
if(v5&1)
v3=1;
else
v3=-1;
t[v5+10]=s[v5]+v3;
v5+=1;
}
printf("%s",t);
return 0;
}
SharifCTF{b70c59275fcfa8aebf2d5911223c6589}
还有一种方法是动态调试,有机会我再试试
2083

被折叠的 条评论
为什么被折叠?



