-
-
[原创] 看雪.京东 2018CTF 第一题 helloctf
-
发表于: 2018-6-16 13:36 2158
-
int __cdecl main(int argc, const char **argv, const char **envp) { signed int v3; // ebx char v4; // al int result; // eax int v6; // [esp+0h] [ebp-70h] int v7; // [esp+0h] [ebp-70h] char v8; // [esp+12h] [ebp-5Eh] char v9[20]; // [esp+14h] [ebp-5Ch] char v10; // [esp+28h] [ebp-48h] __int16 v11; // [esp+48h] [ebp-28h] char v12; // [esp+4Ah] [ebp-26h] char v13; // [esp+4Ch] [ebp-24h] strcpy(&v13, "437261636b4d654a757374466f7246756e"); while ( 1 ) { memset(&v10, 0, 0x20u); v11 = 0; v12 = 0; printf((int)aPleaseInputYou, v6); // printf scanf(aS, v9); if ( strlen(v9) > 0x11 ) // 输入长度必须为17个字节 break; v3 = 0; do { v4 = v9[v3]; if ( !v4 ) break; sprintf(&v8, asc_408044, v4); // 字节进行16进制转换 strcat(&v10, &v8); ++v3; } while ( v3 < 17 ); // 循环17次 if ( !strcmp(&v10, &v13) ) // 字符串比较,相等则显示成功。 printf((int)aSuccess, v7); else printf((int)aWrong, v7); } printf((int)aWrong, v7); result = stru_408090._cnt-- - 1; if ( stru_408090._cnt < 0 ) return _filbuf(&stru_408090); ++stru_408090._ptr; return result; }
通过上面关键点分析可知,对输入17个字节进行16进制转换,转换后的字符串和字符串常量("437261636b4d654a757374466f7246756e")相同则成功。
这样只要把字符串常量("437261636b4d654a757374466f7246756e")通过binhex转成ASCII即可。
解密代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- import binascii def decode(data): print binascii.a2b_hex(data) if __name__ == '__main__': decode('437261636b4d654a757374466f7246756e')
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-6-16 13:43
被hacklang编辑
,原因: 添加解密代码
赞赏
他的文章
看原图
赞赏
雪币:
留言: