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
|