CTFをやろう...!と思い立ちやり始めたものの、いつも通り脱線に脱線を重ねいつのまにか違うことを始めてしまいました(´;ω;`)ので、かな~り久しぶりのCTFでした!開催当日に気が付いて参加したためドタバタでしたが楽しかったです!
最近はマルウェア解析のためにリバースエンジニアリングの勉強をしていたため、今回はreversing問題を中心に解いていきました。(解けたのは結局reversing問題だけでした!!!ヘケッ!!)
自分が解けた問題
・Half
・Three
Writeup
Half
Stringsで見てみるとそのまま書いてありました。
Three
IDAに頼りました。いつもありがとうおばさん...
flag0~flag2を一文字ずつ順番にflagに入れてflag完成という感じだったので、flag0~flag2に書いてあった文字をlist0~2としてリストを作り、そのまま順番通りに並び替えました。
↓やつが書いたやつです。汚いです。
# coding: utf-8
import random
import math
#import os#解けたはいいけどこれちゃんと出力されないから注意!!!
#flag = b"ctf4b{xxx___censored___xxx}"# Please remove here if you wanna test this code in your environment :)
#flag = os.getenv("FLAG").encode()cipher = [4396, 22819, 47998, 47995, 40007, 9235, 21625, 25006, 4397, 51534, 46680, 44129, 38055, 18513, 24368, 38451, 46240, 20758, 37257, 40830, 25293, 38845, 22503, 44535, 22210, 39632, 38046, 43687, 48413, 47525, 23718, 51567, 23115, 42461, 26272, 28933, 23726, 48845, 21924, 46225, 20488, 27579, 21636]
#for i in range(len(flag)-1):
# c = *1:
print(flag[j])print(flag)
#random.shuffle(cipher)
#print(f"cipher = {cipher}")
.....悲しいかなWriteupは以上になります。
pwnの問題たちはアアアアア˝ア˝ア˝ア˝....こ、これ....!前やったことあるやつと似てるやつやん...!でも解法が分からない!!!!c(,Д、と⌒c)つ彡 ジタバタ てなてました。悔しかったでござる...
これを機にまたCTFをやっていこうかなと思いました!!~~完~~
___________________
回答中も平常運転(脱線しまくる)だったため、その時に学んだやつとかを蛇足としてまとめておきます。
追記:↑のやつは終わってすぐに書いたものでしたが結局放置したままだったのでとりあえずこのまま投稿しました(遅い)
*1:flag[i] + flag[i+1]) ** 2 + i)
# cipher.append(c)
flag = []
# 逆計算して文字列を復元する
for i in range(len(cipher)-1):
# 逆計算式に基づいて元の値を求める
c = int((cipher[i] - i)** 0.5 )
#c2=math.sqrt(c)
# 文字列リストに変換した値を追加
flag.append(c)
# リストから文字列に変換して表示
#flag_str = ''.join(flag)
#print(flag_str)
for j in range(len(flag