生活随笔
收集整理的這篇文章主要介紹了
REVERSE-PRACTICE-BUUCTF-11
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
REVERSE-PRACTICE-BUUCTF-11
- [FlareOn4]IgniteMe
- [MRCTF2020]Xor
- [GKCTF2020]BabyDriver
- [MRCTF2020]hello_world_go
[FlareOn4]IgniteMe
exe程序,運行后提示輸入flag,無殼,ida分析
主邏輯在start函數中,讀取輸入后check,驗證輸入成功則輸出“G00d j0b!”
分析sub_401050函數,input和v4異或后放入byte_403180,v4有一個初始值,且在循環中不斷變化,實際上的運算效果為
當i==input_len-1時,byte[i]=v4^input[i],
當i等于從input_len-2到0時,byte[i]=input[i]^input[i+1]
運算完畢后byte_403180數組和byte_403000數組比較,驗證輸入
寫腳本前需要先得到v4的那個初始值,直接查函數或者調試得到v4的初始值為4,寫腳本即可得到flag
[MRCTF2020]Xor
exe程序,運行后提示輸入flag,輸入錯誤打印“Wrong”,無殼,ida分析
字符串交叉引用來到主邏輯函數部分,不能F5反編譯,直接看匯編
主要就是將輸入與對應的下標異或,input[i]^i
寫腳本即可得到flag
[GKCTF2020]BabyDriver
sys文件,ida分析
字符串交叉引用來到sub_140001380函數,分析可知是個走迷宮的題目,map的長度為224,具體分析可知map為14x16,即14行16列的地圖,起始點為o,終止點為#,不能碰到*,23-上,37-下,36-左,38-右
__int64 __fastcall
sub_140001380(__int64 a1
, __int64 a2
)
{__int64 v2
; __int64 v3
; __int64 v4
; int v5
; __int16
*v6
; __int64 v7
; __int16 v8
; char v9
; CHAR
*v10
; v2
= a2
;if ( *(_DWORD
*)(a2
+ 48) >= 0 ){v3
= *(_QWORD
*)(a2
+ 24);v4
= *(_QWORD
*)(a2
+ 56) >> 3;if ( (_DWORD
)v4
){v5
= index
; v6
= (__int16
*)(v3
+ 2);v7
= (unsigned int)v4
;while ( *(_WORD
*)(v3
+ 4) ){
LABEL_28
:v6
+= 6;if ( !--v7
)goto LABEL_29
;}map
[v5
] = '.';v8
= *v6
;if ( *v6
== 23 ) {if ( v5
& 0xFFFFFFF0 ){v5
-= 16;goto LABEL_21
;}v5
+= 208;index
= v5
;}if ( v8
== 37 ) {if ( (v5
& 0xFFFFFFF0) != 208 ){v5
+= 16;goto LABEL_21
;}v5
-= 208;index
= v5
;}if ( v8
== 36 ) {if ( v5
& 0xF ){--v5
;goto LABEL_21
;}v5
+= 15;index
= v5
;}if ( v8
!= 38 ) goto LABEL_22
;if ( (v5
& 0xF) == 15 )v5
-= 15;else++v5
;
LABEL_21
:index
= v5
;
LABEL_22
:v9
= map
[v5
];if ( v9
== '*' ) {v10
= "failed!\n";}else{if ( v9
!= '#' ) {
LABEL_27
:map
[v5
] = 'o';goto LABEL_28
;}v10
= "success! flag is flag{md5(input)}\n";}index
= 16;DbgPrint(v10
);v5
= index
;goto LABEL_27
;}}
LABEL_29
:if ( *(_BYTE
*)(v2
+ 65) )*(_BYTE
*)(*(_QWORD
*)(v2
+ 184) + 3i64
) |= 1u;return *(unsigned int *)(v2
+ 48);
}
由于是sys文件,其使用的不是ascii碼,而是鍵盤碼,可知23-I-上,37-K-下,36-J-左,38-L-右
走完迷宮,再md5散列路線即可得到flag
[MRCTF2020]hello_world_go
elf文件,無殼,ida分析
左側函數窗最后一個main_main函數,內容很亂,在runtime_memequal函數的一個參數unk_4D3C58中找到了flag
__int64 __fastcall
main_main(__int64 a1
, __int64 a2
)
{__int64 v2
; __int64 v3
; __int64 v4
; __int64 v5
; __int64 v6
; __int64 v7
; __int64 v8
; __int64 v9
; __int64 v10
; signed __int64 v11
; __int64 result
; __int64 v13
; __int64
*v14
; char v15
; __int64
*v16
; __int128 v17
; __int128 v18
; __int128 v19
; __int128 v20
; if ( (unsigned __int64
)&v18
+ 8 <= *(_QWORD
*)(__readfsqword(0xFFFFFFF8) + 16) )runtime_morestack_noctxt();runtime_newobject(a1
, a2
);v16
= v14
;*(_QWORD
*)&v20
= &unk_4AC9C0
;*((_QWORD
*)&v20
+ 1) = &off_4EA530
;fmt_Fprint(a1
, a2
, (__int64
)&v20
, (__int64
)&unk_4AC9C0
, v2
, v3
, (__int64
)&go_itab__os_File_io_Writer
, os_Stdout
);*(_QWORD
*)&v19
= &unk_4A96A0
;*((_QWORD
*)&v19
+ 1) = v16
;fmt_Fscanf(a1
,a2
,(__int64
)&go_itab__os_File_io_Reader
,(__int64
)&v19
,v4
,v5
,(__int64
)&go_itab__os_File_io_Reader
,os_Stdin
,(__int64
)&unk_4D07C9
,2LL
);v8
= v16
[1];if ( v8
!= 24 )goto LABEL_3
;v13
= *v16
;runtime_memequal(a1
, a2
, v6
, (unsigned __int64
)&unk_4D3C58
);if ( !v15
){v8
= 24LL
;
LABEL_3
:runtime_cmpstring(a1
, a2
, (__int64
)&unk_4D3C58
, v8
, v7
);if ( (signed __int64
)&v19
>= 0 )v11
= 1LL
;elsev11
= -1LL
;goto LABEL_5
;}v11
= 0LL
;
LABEL_5
:if ( v11
){*(_QWORD
*)&v17
= &unk_4AC9C0
;*((_QWORD
*)&v17
+ 1) = &off_4EA550
; result
= fmt_Fprintln(a1
,a2
,v9
,(__int64
)&go_itab__os_File_io_Writer
,v7
,v10
,(__int64
)&go_itab__os_File_io_Writer
,os_Stdout
);}else{*(_QWORD
*)&v18
= &unk_4AC9C0
;*((_QWORD
*)&v18
+ 1) = &off_4EA540
; result
= fmt_Fprintln(a1
,a2
,v9
,(__int64
)&go_itab__os_File_io_Writer
,v7
,v10
,(__int64
)&go_itab__os_File_io_Writer
,os_Stdout
);}return result
;
}
總結
以上是生活随笔為你收集整理的REVERSE-PRACTICE-BUUCTF-11的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。