5.re-用-50-PLZ-50 TU-CTF-2016
このプロセスは、比較的簡単ですXOR
1 X =リスト(' cbtcqLUBChERV [[NH @ _X ^ D] X_YPV [CJ ' ) 2、Y = 0x37は 3 Z = '' 4 のための T におけるX: 5 、Z + = CHR(ORD(T)^ Y) 6 プリント( Z)
TUCTF {but_really_whoisjohngalt}
6.keyのcsaw-CTF-2016-QUALS
?W?H?のTh?A?P?P?E?Nを印刷実行した後?終了します
=変更指示ファイルの読み出しをスキップし、出力= W = R = O = N = G = K = E = Y
キーポイントはsub_4020c0機能です
であれば、関係の比較
動的デバッグを直接フラグを得ることができます
V7ここでは、実際に第三のパラメータsub_4020c0の関数であり、
ウォッチメモリーは、その2つの治療サイクルを見つけました
スクリプト:
1 X = [0x74、0x68、0x65、0x6D、0x69の、0x64、の0x61、0x74、0x68、0x65 、 2 0x6D、0x69の、0x64、の0x61、0x74、0x68、0x65、0x6D、0x69の、0x64 、 3 0x6に] 4 Y = [0x3E、0x2D、0x2D、0x2D、0x2D、0x2Bを、0x2Bを、0x2Bを、0x2Bを、0x2E 、 5 0x2E、0x2E、0x2E、0x3cの、0x3cの、0x3cの、0x3cの、0x2E ] 6 #プリント(LEN(x))を 7 #プリント(LEN(Y)) 8、Z = [] 9 ための I における範囲(18 ): 10 z.append((X [I] ^ Y [I])+ + 9 22 ) 11 12 #印刷(」」.join(マップ(16進数、Z))) 13 プリント('' .join(マップ(CHR、Z)))
idg_cni〜bjbfi | gsxb
学校-CTF-冬-2015 7.simple-100をご確認ください
EXEファイルピット、苦い涙をいっぱい、解析ELFファイル
私たちは、直接出力フラグは、Linuxにすることができcheck_key()関数を失いました
分析:
1つの A1 [ 0 ] = 0xE37EC854 。 2つの A1 [ 1 ] = 0x9A16C764 。 3つの A1 [ 2 ] = 0x326511CD 。 4つの A1 [ 3 ] = 0x43D3E32D 。 5つの A1 [ 4 ] = 0xD29DA992 。 6つの A1 [ 5 ] = 0xD32C6DE6 。 7つの A1 [ 6 ] = 0x6AFEBDB6 。 8 V14 = 0x13に。 9 V3 =のalloca(32); 10 V15 =&V7。 11 のprintf(" キー:" ); 12 __isoc99_scanf((INT)" %sの"、(INT)V15、V5、V6、V7、V8、V9、(INT)V10、V11、V12、A1 [ 0 ]、A [ 1 ]、A [ 2 ]、 A1 [ 3 ]、A [ 4 ]、A [ 5 ])。 13 であれば(check_key((INT )V15)) 14 interesting_function(A1)。
1つの符号なし整数 * __ CDECL interesting_function(INT A1 [ 7 ]) 2 { 3 の符号なし整数 *結果。// EAX 4 符号なし整数の一時。// [ESP + 18時間] [EBP-20H] 5 int型 I; // [ESP +代一] [EBP-代一] 6 int型の J; // [ESP + 20H] [EBP-18時間] 7 のint * __属性__((__ org_arrdim(0、7)))V5。// [ESP + 24時間] [EBP-14H] 8 のchar * ptr_temp。// [ESP + 28H] [EBP-10H] 9 の符号なし整数 V7。// [ESP + 2歴] [EBP-章] 10 11 V7 = __readgsdword(0x14u )。 12 結果=(符号なし整数 * )A1。 13 V5 =のA1。 14 のために(i = 0 ; iは= < 6 ++; I) 15 { 16 [I] ^一時= V5を0xdeadbeefが。 17 結果=&TEMP。 18 ptr_temp =(チャー *)&TEMP。 19 用(J = 3、J> = 0 ; - j)を 20 結果=(符号なし整数 *)のputchar((CHAR)(ptr_temp [J] ^ flag_data [I] [J]))。 21 } 22 リターン結果。 23 }
スクリプト:
1つの勝利=〔が0x54、0xB8、0xFEの、の0x61、0x00に、0x13に、0x00で、0x00に、0x00に、の0x61、0x6A、0xFEの、0xBD、0xB6、0xD3、0x2C 、 2 0x6D、0xE6、0xD2、0x9D、0xA9、0x92、0x43この、0xD3、0xE3、0x2D、0x32の、0x65、0x11を、0xCD、0x9A、0x16は、 3 0xC7に、0x64、0xE3、0x7Eを、0xC8、0x30から取得したデバッグ】操作データを#windows 。4 WIN2 = 0x6A、0xFEの、0xBD、 0xB6、0xD3、0x2C 、 5 0x6D、0xE6、0xD2、0x9D、0xA9、0x92、0x43この、0xD3、0xE3、0x2D、0x32の、0x65、0x11を、0xCD、0x9A、0x16 、 6 0xC7に、0x64、0xE3、0x7Eを、0xC8、が0x54 ] 7。 WIN2 = WIN2 [:: - 1 ] 8。 9。 flag_date = [0xDC、0x17の、0xbfの、0x5B、は0xD4、は0x0A、0xD2、として0x1B、0x7D、0xDA、 10 0xA7、0x95、0xB5、0x32の、0x10を、0xF6、0x1cに、0x65、$ 53、$ 53 、 11 0x67、0xBA、0xEA、0x6E、0x78と、ただし0x22、0x72、0xD3 ] 12 13 14 A1 = [0 用 I における範囲(7 )] 15の A1 [0] = 0xE37EC854 。 16の A1 [1] = 0x9A16C764 。 17の A1 [2] = 0x326511CD 。 18の A1 [3] = 0x43D3E32D 。 19の A1 [4] = 0xD29DA992 。 20の A1 [5] = 0xD32C6DE6 。 21の A1 [6] = 0x6AFEBDB6 。 22 23 X = [0xEFという、0xbe、0xADの、0xde] 24個の 25 S = '' 26 のための I における範囲(7 :) 27 (TEMP =(A1 [I] ^ 0xdeadbeefが).to_bytes 4、' 少し' ) 28 のための J における範囲(3、-1、-1 ) : 29の S + = CHR(TEMP [J] ^ flag_date [I 4 + * j]を) 30 プリント(CHRを(^ flag_date [I * 4 + J] ^ X [J])、終了[I 4 + jは*]勝ちます= '') 31 # プリント(CHR(V8 [I * 4 + J] ^ flag_date [I * 4 + J] ^ X [J])、終了= '') 32 プリント() 33 プリント(S)
異なるレイアウトおよびLinuxでのスタック内のexeファイルの変数、
EXEファイル:愛が§; nはμ` - ????:!??? C、HI±= ?? C ???トン
ELFファイル:flag_is_you_know_cracking !!!
flag_is_you_know_cracking !!!