-
-
[原创] 看雪.京东 2018CTF 第一题 helloctf
-
发表于: 2018-6-16 13:36 2255
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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即可。
解密代码:
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/env python # -*- coding: utf-8 -*- import binascii def decode(data): print binascii.a2b_hex(data) if __name__ = = '__main__' : decode( '437261636b4d654a757374466f7246756e' ) |
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-6-16 13:43
被hacklang编辑
,原因: 添加解密代码
赞赏
他的文章
赞赏
雪币:
留言: