-
-
[原创]签到题 拜师学艺WriteUp
-
发表于: 2021-5-10 16:00 2115
-
题目描述
看雪.深信服2021KCTF春季赛
此题是一道Windows 32位逆向题。
本题实例涉及到一些外壳用到的技术,会被杀毒软件误报为病毒或木马。读者见到这些报告,可以不必慌张。
看来有壳,或者内部自解密
寻找关键位置
运行程序,提示Please input your flag:
x64dbg运行程序,搜索字符串
IDA打开程序,跳转到004011E7,发现下面不是代码,猜测0040125C处的调用为解密代码
在x64dbg中00401261地址下断点,输入字符串,后面的代码发生改变,那么dump,修复IAT,用IDA打开修复后的程序,并F5
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 | v3 = 0 ; j_memset(&v4, 0 , 255 ); j_memset(&v2, 0 , 255 ); sub_4014F0(&unk_403108); sub_4014F0( "http://bbs.pediy.com\n" ); sub_4014F0( "Please input your flag: " ); sub_4014A0( "%s" , &v3, 256 ); sub_401470( 1 ); / / 字符串长度 if ( strlen(&v3) = = 12 ) { / / 比较字符 if ( v3 ! = 'f' || v4 ! = 'l' || v5 ! = 'a' || v6 ! = 'g' || v7 ! = '{' || v10 ! = '}' ) goto LABEL_16; v11 = v8; v12 = v9; sub_401000(); / / 比较字符串 v1 = strcmp((const char * )(( int (__fastcall * )(char * , signed int ))loc_401050)(&v3, 12 ), "ZmxhZ3trYW54dWV9" ); if ( v1 ) v1 = - (v1 < 0 ) | 1 ; if ( v1 ) { LABEL_16: sub_4014F0( "Try again!\n" ); result = - 1 ; } else { sub_4014F0( "You are winner!\n" ); result = 0 ; } } |
先判断字符串长度是否为12,然后检查格式flag{xxxxxx},然后将字符串放到loc_401050返回值跟ZmxhZ3trYW54dWV9对比
关键分析
loc_401050一开始都在检查,核心算法位于loc_401087
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 | .text: 00401087 loc_401087: .text: 00401087 dec ebx .text: 00401088 cmp esi, 1FFBh .text: 0040108E jnb short loc_4010F8 .text: 00401090 movzx eax, byte ptr [ecx] .text: 00401093 inc edx .text: 00401094 inc ecx .text: 00401095 add edi, eax .text: 00401097 cmp edx, 3 .text: 0040109A jnz short loc_4010F1;将 3 个字符的ASCII放到edi中 .text: 0040109C mov eax, edi .text: 0040109E sar eax, 12h .text: 004010A1 movzx eax, ds:byte_403188[eax];Byte_403188存放的为 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' .text: 004010A8 mov byte_404788[esi], al .text: 004010AE mov eax, edi .text: 004010B0 sar eax, 0Ch .text: 004010B3 and eax, 3Fh .text: 004010B6 movzx eax, ds:byte_403188[eax] .text: 004010BD mov byte_404789[esi], al .text: 004010C3 mov eax, edi .text: 004010C5 sar eax, 6 .text: 004010C8 and edi, 3Fh .text: 004010CB and eax, 3Fh .text: 004010CE movzx eax, ds:byte_403188[eax] .text: 004010D5 mov byte ptr word_40478A[esi], al .text: 004010DB movzx eax, ds:byte_403188[edi] .text: 004010E2 xor edi, edi .text: 004010E4 mov byte ptr (word_40478A + 1 )[esi], al .text: 004010EA add esi, 4 .text: 004010ED xor edx, edx .text: 004010EF jmp short loc_4010F4 |
这个乍一看,通过右移,将3个字符变成四个字符,很像base64,直接解密ZmxhZ3trYW54dWV9就出答案了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
看原图
赞赏
雪币:
留言: