生活随笔
收集整理的這篇文章主要介紹了
REVERSE-PRACTICE-CTFSHOW-3
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
REVERSE-PRACTICE-CTFSHOW-3
簽退
.pyc文件,uncompyle6反編譯,得到python源碼,分析寫在源碼注釋中 先變表base64,再凱撒加密,向后移動2位
import string
c_charset
= string
. ascii_uppercase
+ string
. ascii_lowercase
+ string
. digits
+ '()'
flag
= 'BozjB3vlZ3ThBn9bZ2jhOH93ZaH9'
def encode ( origin_bytes
) : c_bytes
= [ ( '{:0>8}' ) . format ( str ( bin ( b
) ) . replace
( '0b' , '' ) ) for b
in origin_bytes
] resp
= '' nums
= len ( c_bytes
) // 3 remain
= len ( c_bytes
) % 3 integral_part
= c_bytes
[ 0 : 3 * nums
] while integral_part
: tmp_unit
= ( '' ) . join
( integral_part
[ 0 : 3 ] ) tmp_unit
= [ int ( tmp_unit
[ x
: x
+ 6 ] , 2 ) for x
in [ 0 , 6 , 12 , 18 ] ] resp
+= ( '' ) . join
( [ c_charset
[ i
] for i
in tmp_unit
] ) integral_part
= integral_part
[ 3 : ] if remain
: remain_part
= ( '' ) . join
( c_bytes
[ 3 * nums
: ] ) + ( 3 - remain
) * '0' * 8 tmp_unit
= [ int ( remain_part
[ x
: x
+ 6 ] , 2 ) for x
in [ 0 , 6 , 12 , 18 ] ] [ : remain
+ 1 ] resp
+= ( '' ) . join
( [ c_charset
[ i
] for i
in tmp_unit
] ) + ( 3 - remain
) * '.' return rend
( resp
)
def rend ( s
) : def encodeCh ( ch
) : f
= lambda x
: chr ( ( ord ( ch
) - x
+ 2 ) % 26 + x
) if ch
. islower
( ) : return f
( 97 ) if ch
. isupper
( ) : return f
( 65 ) return ch
return ( '' ) . join
( encodeCh
( c
) for c
in s
)
用工具CTFCrackToolsKt-3.2.4.jar得到凱撒加密前的字符串 再用工具加密解密小玩具解base64,即可得到flag
神光
exe程序,運行后輸入key,ida分析 main函數,獲取輸入后check 跟進check,簡單的將輸入和明文字符串"wangzherongyao"比較 運行exe,輸入"wangzherongyao",打印出一段不明意義的中文字符 繼續向下走,在彈窗MessageBoxA后,sub_4113CF->sub_415770 input已知是"wangzherongyao",兩段運算,然后打印 調試一下,如圖所示,在call ds:MessageBoxA指令處下斷點,因為程序有反調試,執行這條指令時會直接退出 執行流斷在這里后,在ida中選中lea eax, [ebp+input]這條指令,右鍵->Set IP,將該指令設置為下一跳即將執行的指令,即可繞過反調試 繞過反調試后,在打印完成返回的地方下斷點,F9運行到此處,在黑窗即可看到flag
簽到
elf文件,ida分析 main函數,重點是第49行,輸入與下標以及已知的v9數組進行運算 最后要求v6==0,由異或運算的特性可知,input=index ^ (index + (index ^ v9[index])) 取出v9元素,寫腳本即可得到flag
v9
= [ 102 , 109 , 99 , 98 , 127 , 58 , 85 , 106 , 57 , 82 , 122 , 55 , 81 , 19 , 51 , 35 , 67 , 70 , 41 , 61 , 41 , 32 , 127 , 28 , 38 , 77 , 49 , 20 , 80 , 94 , - 24 ]
flag
= ""
for i
in range ( len ( v9
) ) : flag
+= chr ( i
^ ( i
+ ( i
^ v9
[ i
] ) ) )
print ( flag
)
baby_gay
elf文件,ida分析 main函數,verifyPwd函數驗證輸入是否為"ZGFuaXU=",驗證成功后會打印另一段字符串 然后就沒有其他邏輯了,看了網上其他師傅的wp,說是解RC4,不過沒看出來要解,比較迷惑
總結
以上是生活随笔 為你收集整理的REVERSE-PRACTICE-CTFSHOW-3 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。