bugkuCTF file

bugkuCTF file
先进ida,看check函数
for ( k = 0; k < n; ++k )
{
if ( *flllag != (k ^ input[k] ^ v13[k]) )
{
printf(“Your file is wrong!! try again”, v5);
return 0;
}
好的,是个两次异或操作,异或可逆,看v13是什么东西。
这边有对v13的操作
for ( j = 0; j <= 63; j += 2 )
{
v3 = (const char *)(unsigned int)sttr_home[j + 1];
v13[n++] = sub_400EB9(sttr_home[j], sttr_home[j + 1]);
}
追进那个函数
{
int v2; // ebx

v2 = 16 * (unsigned __int64)sub_400E6A(a1);
return v2 + (unsigned int)sub_400E6A(a2);
}
进那个sub函数
{
if ( a1 > 0x2F && a1 <= 0x39 )
return (unsigned int)(a1 - ‘0’);
if ( a1 > 0x40 && a1 <= 0x46 )
return (unsigned int)(a1 - 0x37);
if ( a1 <= 0x60 || a1 > ‘f’ )
return 0xFFFFFFFFLL;
return (unsigned int)(a1 - ‘W’);
}
是个对字符串的改变,然后是对sttr_home这个里面的字符串中的一个变换,到时候直接模拟就可以了
if ( (unsigned int)__isoc99_fscanf(v10, “%c”, &input[i]) == -1 )// 读取文件中的数据直到eof
break;
}
n = 0;
v11 = base64(flllag);
v12 = base64(sttr_home);
这边是个base64加密的函数,不过进去看了之后发现它并没有对flllag跟sttr_home这俩字符串并没有做出改变,所以这俩函数就没有什么用,那这样这个文件的逻辑就很清晰了。
上python://注意解出来要md5加密下,并且一开始没有md5加密的那个字符串有不可显示内容。
import hashlib
sttr_home=‘664e06226625425d562e766e042d422c072c45692d125c7e6552606954646643’
i=0
index=0
v13=’’
def sub(a1,a2):
return chr(16*(sub1(a1))+(sub1(a2)))
def sub1(a1):
a=ord(a1)
if 47 return a-48
elif 64 return a-55
# elif 96<=a<102:
# return 0xFFFFFFFF
return a-87

while i<64:
sttrj1=sttr_home[i+1]
sttrj0=sttr_home[i]
v13+=sub(sttrj0,sttrj1)
index=index+1
i=i+2

i=0
v14=’’
while i flllag=‘flag{hello_player_come_on_hahah}’
v14+=chr(ord(flllag[i])iord(v13[i]))
i=i+1
print(v14)
flag=hashlib.md5(v14.encode(‘utf-8’)).hexdigest()
print(‘flag{’,flag,’}’)

你可能感兴趣的:(ctf,re)