Nctf wp
RE
打开exe文件后,放进dbg以及ida中,进行检索
进行操作后找到主函数,来进行分析操作
可以看一下主函数的功能,进行分析
可以看出来v25,v27,v28,v29,v30,v31在数据内存中的字符串检索
1 2 3 4 5 6 7 8
| v26 = 'gube' v24 = 'uC\TN swodniW\tf' v25 = 'DeA\noisreVtnerr' v27 = 0 v28 = '2346woW\ERAWTFOS' v29 = 'W\tfosorciM\edoN' v30 = 'tnerruC\TNswodni' v31 = 'gubeDeA\noisreV'
|
先是得到这些字符串但是不知道是干什么的往后面看,看看有什么用
看到后面有一句是
可以看到v6=v21的内容,返回来看,上面函数定义的时候是引用的类型的
定义了指针类型的v6和一个数组的v21,c语言中的地址指向是引用,相当于起了个别名
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
| do { switch ( v21[v9] ) { case 1: --v1; v12 -= '\a'; --v11; break; case 2: ++v1; v12 += '\a'; ++v11; break; case 3: --v2; --v8; --v10; break; default: if ( v21[v9] != 4 ) exit(0); ++v2; ++v8; ++v10; break; } if ( *(_DWORD *)&asc_140003350[4 * (v12 + v8)] == 1 ) { sub_140001020("You lost", v10, v11); exit(0); } if ( v11 > 6 || v10 > 6 ) { puts("illegal access"); exit(0); } ++v9; } while ( v9 < 26 ); if ( *(_DWORD *)&asc_140003350[4 * (v2 + 7i64 * v1)] != 99 ) _exit(0); puts("You win!"); sub_140001020("flag{", v13, v14);
|
代码中我们来分析功能
以可看到上面的switch case 进行的操作是对v2 v8 v10 v11 v12进行的改值的操作,我们又看到了asc的函数,应该不难分析这里是汇编的一个操作,后面有是个值,我们进去查看:
看到里面有值,我们进行记录:
1 2 3 4 5 6 7 8 9 10
| 8 1 0Eh 0Bh 7 10h 1 0Bh 0Fh 0Fh 1 1 9 1 1 1 1 1 1 0Bh 1 0Ch 0Ch 8 0Eh 1 8 1 8 1 1 0Ch 9 0Eh 1 0Dh 8 0Bh 1 1 1 1 1 1 9 0Ah 9 9 63h
|
int一个占用4个字节,所以可以得出来以上的字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| if ( *(_DWORD *)&asc_140003350[4 * (v12 + v8)] == 1 ) { sub_140001020("You lost", v10, v11); exit(0); } if ( v11 > 6 || v10 > 6 ) { puts("illegal access"); exit(0); } ++v9; } while ( v9 < 26 ); if ( *(_DWORD *)&asc_140003350[4 * (v2 + 7i64 * v1)] != 99 ) _exit(0); puts("You win!"); sub_140001020("flag{", v13, v14);
|
我们可以得出来4×(v12+v8)的位置不能等于1 4×(v2+7×v1)位置等于99
可以看出来最后面的位置,的63h在10进制的位置等于99,所以就是48的位置
根据switch里面的case可以得到我们输入的东西为‘1 2 3 4’我们去看规律:
1 2 3 4
| 1:是v1-- v12-7 2: 是v1++ v12+7 3: 是v2-- v8-- 4: 是v2++ v8++
|
我们v1 v2 v12 v8的初值为0,v2+7×v1=12,不难分析出来v1等于1,v2等于5
不可以为1 6 10 11 13 14 15 16 17 18 20 25 27 29 30 34 38 39 40 41 42 43
可以为0 2 3 4 5 7 8 9 12 19 21 22 23 24 26 28 31 32 33 35 36 37 44 45 46 47 48
得出来v1 v2序列244444
2 44 1 444 2222 33 1333 22 4424444
检查一下得出来了flag:
cacosmia
首先我们打开以后我们发现了一个cap一个文件我们直接放进wirshark中进行分析
我们去看一下查看wifi那一套套路:
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
| root@kali:~/Desktop Opening cacosmia.cap Read 4276 packets. 1 1A:D7:17:98:D0:51 mamawoxiangwantiequan WPA (1 handshake) Choosing first network as target. Aircrack-ng 1.3 Passphrase not in dictionary Please specify a 151/235 keys tested w). Time left: 0 seconds 64.26% Quitting aircrack-ng...
root@kali:~/Desktop Opening cacosmia.cap Read 4276 packets. [00:00:00] 16/688 keys tested (1029.20 k/s) Time left: 0 seconds 2.33% KEY FOUND! [ 12345678 ]
Master Key : B4 2C 77 C0 A8 F4 E6 E9 9F 85 1B ED 7B 3F 5A 91 3C AA D4 42 B9 6D 5C D2 A1 90 E3 F9 75 B3 6D 9F Transient Key : 8B D7 4A 1F 2A 0D B7 40 C1 3B BC C9 13 60 46 E5 49 4E 9B 9A AF BD E3 89 33 5A 73 C8 95 AC 53 94 AF 92 D1 D9 ED E4 B2 AF 40 C1 03 D8 98 2D 8A 90 00 58 39 CF C2 9E B9 80 A2 D5 86 57 9A 00 00 00 EAPOL HMAC : D8 97 A1 FD CF F2 87 89 6A 19 EF 14 44 33 E0 3C
root@kali:~/Desktop Total number of packets read 4276 Total number of WEP data packets 0 Total number of WPA data packets 685 Number of plaintext data packets 0 Number of decrypted WEP packets 0 Number of corrupted WEP packets 0 Number of decrypted WPA packets 538
|
我们把解密之后的流量包放进wirshark
我们去追踪tcp流向分析
发现里面有一个png图片我们把这里面的信息放进winhex中去掉放进去的http首部信息
得到一个图片
找到了一个加密的压缩包,在原来的数据里面的cookie里面是一个base64加密过来的
告诉我们密码是一个网站自己ping过的一个网站,我们首先会想到ICMP,UDP,TCP,DNS等协议我们在里面进行DNS的检索
密码得到打开压缩包