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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame
; int __cdecl main(int argc, const char **argv, const char **envp) public main main proc near ; DATA XREF: _start+1D↑o
s = byte ptr -1E0h ; s[480] var_F0 = byte ptr -0F0h ; var_fo[240],存放scanf输入参数
; __unwind { push rbp mov rbp, rsp sub rsp, 1E0h lea rax, [rbp+s] mov edx, 1Eh ; n mov esi, 0 ; c mov rdi, rax ; s call _memset ; memset(s, 0, 0x1EuLL); lea rdi, format ; "Please Input Key: " mov eax, 0 call _printf lea rax, [rbp+var_F0] mov rsi, rax lea rdi, aS ; "%s" mov eax, 0 call ___isoc99_scanf lea rdx, [rbp+s] lea rax, [rbp+var_F0] mov rsi, rdx mov rdi, rax call encode ;关键函数,这里对输入字符进行了加密 lea rax, [rbp+var_F0] mov rdi, rax ; s call _strlen mov rdx, rax mov eax, cs:key cdqe cmp rdx, rax jnz short loc_138D lea rax, [rbp+s] lea rsi, enflag ; "izwhroz\"\"w\"v.K\".Ni" mov rdi, rax ; s1 call _strcmp test eax, eax jnz short loc_1381 lea rdi, aYouAreRight ; "You are Right" call _puts jmp short loc_138D ; ---------------------------------------------------------------------------
loc_1381: ; CODE XREF: main+A0↑j lea rdi, aFlagThis1sF4ck ; "flag{This_1s_f4cker_flag}" call _puts
loc_138D: ; CODE XREF: main+86↑j ; main+AE↑j mov eax, 0 leave retn ; } // starts at 12D1 main endp
|