攻防世界|攻防世界 reverse 进阶 1-4

1.dmd-50 suctf-2016
攻防世界|攻防世界 reverse 进阶 1-4
文章图片


md5后比较,在线解md5得到:
攻防世界|攻防世界 reverse 进阶 1-4
文章图片

【攻防世界|攻防世界 reverse 进阶 1-4】
md5(md5($pass)),所以将grape再进行MD5
攻防世界|攻防世界 reverse 进阶 1-4
文章图片

b781cbb29054db12f88f08c6e161c199
2.Shuffle SECCON-CTF-2014
攻防世界|攻防世界 reverse 进阶 1-4
文章图片


硬编码:
SECCON{Welcome to the SECCON 2014 CTF!}
3.re2-cpp-is-awesome alexctf-2017
攻防世界|攻防世界 reverse 进阶 1-4
文章图片
攻防世界|攻防世界 reverse 进阶 1-4
文章图片

1 __int64 __fastcall main(int a1, char **a2, char **a3) 2 { 3char *v3; // rbx 4__int64 v4; // rax 5__int64 v5; // rdx 6__int64 v6; // rax 7__int64 v7; // rdx 8__int64 v8; // rdx 9__int64 char_1; // rdx 10__int64 s_char; // [rsp+10h] [rbp-60h] 11char v12; // [rsp+20h] [rbp-50h] 12char v13; // [rsp+4Fh] [rbp-21h] 13__int64 v14; // [rsp+50h] [rbp-20h] 14int k; // [rsp+5Ch] [rbp-14h] 15 16if ( a1 != 2 ) 17{ 18v3 = *a2; 19v4 = std::operator<>(&std::cout, "Usage: ", a3); 20v6 = std::operator<>(v4, v3, v5); 21std::operator<>(v6, " flag\n", v7); 22exit(0); 23} 24std::allocator::allocator(&v13, a2, a3); 25std::__cxx11::basic_string,std::allocator>::basic_string(&v12, a2[1], &v13); 26std::allocator::~allocator(&v13); 27k = 0; 28for ( s_char = std::__cxx11::basic_string,std::allocator>::begin(&v12); 29; 30sub_400D7A(&s_char) ) 31{ 32v14 = std::__cxx11::basic_string,std::allocator>::end(&v12); 33if ( !cmp_400D3D((__int64)&s_char, (__int64)&v14) ) 34break; 35char_1 = *(unsigned __int8 *)sub_400D9A((__int64)&s_char); 36if ( (_BYTE)char_1 != str_6020A0[dword_6020C0[k]] )// 关键比较处 37error_400B56((__int64)&s_char, (__int64)&v14, char_1); // 输出失败 38++k; 39} 40success_400B73((__int64)&s_char, (__int64)&v14, v8); // 成功 41std::__cxx11::basic_string,std::allocator>::~basic_string(&v12); 42return 0LL; 43 }

View Code 关键处,在一个字符串中取特定顺序的字符进行与输入比较
攻防世界|攻防世界 reverse 进阶 1-4
文章图片
攻防世界|攻防世界 reverse 进阶 1-4
文章图片
1 x='L3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t' 2 x=list(x) 3 y=[ 36, 40, 55, 654, 7101, 87, 939, 1038, 1145, 121, 133, 140, 1513, 1686, 171, 183, 19101, 203, 2145, 2222, 232, 2421, 253, 26101, 270, 2841, 2968, 3068, 311, 3268, 3343] 34 t=[] 35 for i in range(len(y)): 36t.append(x[y[i]]) 37 38 print(''.join(t))

View Code ALEXCTF{W3_L0v3_C_W1th_CL45535}
4.crackme SHCTF-2017
查壳:
攻防世界|攻防世界 reverse 进阶 1-4
文章图片


脱壳:
esp脱壳法:
单步执行pushfd后,转到esp
攻防世界|攻防世界 reverse 进阶 1-4
文章图片


运行,断在一jmp处,单步来到一call,来到oep,在此处脱壳
攻防世界|攻防世界 reverse 进阶 1-4
文章图片


攻防世界|攻防世界 reverse 进阶 1-4
文章图片


脱壳成功,可以在ida中直接分析,这里我直接在od中跟一下程序,通过定位提示字符串,发现程序流程很简单,就是一个简单的异或攻防世界|攻防世界 reverse 进阶 1-4
文章图片


脚本:
攻防世界|攻防世界 reverse 进阶 1-4
文章图片
攻防世界|攻防世界 reverse 进阶 1-4
文章图片
1 x=[18, 24, 38, 420, 536, 692, 774, 861, 986, 1010, 1116, 12103, 130, 1465, 150, 161, 1770, 1890, 1968, 2066, 21110, 2212, 2368, 24114, 2512, 2613, 2764, 2862, 2975, 3095, 312, 321, 3376, 3494, 3591, 3623, 37110, 3812, 3922, 40104, 4191, 4218] 43 s=list('this_is_not_flag') 44 t=[] 45 for i in range(42): 46t.append(chr(ord(s[i%16])^x[i])) 47 print(''.join(t))

View Code flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}

转载于:https://www.cnblogs.com/DirWang/p/11431895.html

    推荐阅读