Jump to content

Misc

署名の問題

ネットワークセキュリティにおける8つの複数選択の質問、Baiduは回答を検索できます。ここでいくつかの質問に対する回答のみを知っている場合は、列挙を使用してファズの回答をテストしてフラグを取得できます

1049983-20220829111934840-398261753.jpg

flag3360

フラグ{A236B34B-8040-4EA5-9E1C-97169AA3F43A}

re

re693

添付ファイルを直接ダウンロードして、Golangで開きます

主な関数を見ると、2つの文が印刷され、6つのパラメーターを持つ関数の入力が必要であり、3つはGlihrであることがわかります。

6つのパラメーターと3番目の名前がglihr:を持つ最初の関数を入力します

最初の関数を入力すると、6つのパラメーターがあり、3つ目はGlihrと呼ばれます。

3つの呼び出しがあり、chzv5op8romlakb6:という名前の関数を呼び出す2番目の関数を入力します

3つの発信者がいる2番目の関数を入力し、chzv5op8romlakb6という名前の関数を呼び出します。

直接的なグローバル検索、最初の関数は、zlxdjkh3ozn4mayd、6つのパラメーターを備えています

1049983-20220829111935787-1852581138.jpg 2番目の関数は、最初にCHZV5OP8ROMLAKB6をグローバルに検索して、どの関数がこの関数を呼び出すかを確認し、さらに検索してシンボルが質問の意味を満たしているかどうかを確認します。対応する関数はUHNCM82SDGE0ZLYOです

1049983-20220829111936524-69971324.jpg 6、出かけて自分自身、そして次回の2つの繰り返しの判断があります。その後、3つの呼び出しがあります

1049983-20220829111937099-603256132.jpg次に、メイン関数を見てください

func main(){

var nfazj、cuskl string

jjxxf :=[] byte {

37、73、151、135、65、58、241、90、33、86、71、102、241、213、234、67、144、139、20、112、150、41、7、158、251、167、249、24、24、129、72、83、142、142、162、236、236、236、236、236、236、236、236、236、236、236、236、236、236、236、236、231 38, 83, 147, 40, 78, 239, 113, 232, 83, 227, 47, 192, 227, 70, 167, 201, 249, 156, 101, 216, 159, 116, 210, 152, 234, 38, 145, 198, 58, 24, 183, 72, 143, 136, 234, 246}

kdlah :=[] byte {

191、140、114、245、142、55、190、30、161、18、18、200、7、21、59、17、44、34、181、109、116、146、145、189、68、142、113、0、33、46、184、21、33、66、99、124、167、20、21、88、133、21、133、21、133、133、133、133 133, 250, 62, 28, 138, 229, 105, 102, 125, 124, 208, 180, 146, 67, 39, 55, 240, 239, 203, 230, 142, 20, 90, 205, 27, 128, 136, 151, 140, 222, 92, 152, 1, 222, 138, 254, 246, 223, 224, 236, 33、60、170、189、77、124、72、135、46、235、17、32、28、245}

fmt.print(mpyt9gwtrfafnvb1(jjxxf))

fmt.scanf( '%20s'、nfazj)

fmt.print(kz2bfvoxepd5aldr(kdlah))

fmt.scanf( '%20s'、cuskl)

vnvuo :=gwsqnhq7dpxpig64(nfazj)

yjcya :=''

mvoxk :=yi3z8zxokhflmtpc(cuskl)

mvoxk!=nil {

yjcya=mvoxk()

}

if yjcya!='' vnvuo!='' {

fmt.printf( 'flag {%s%s} \ n'、vnvuo、yjcya)

}

}

フラグは2つのセクションに分かれています。最初のセクションはvnvuo、2番目のセクションはyjcyaです

最初の関数

func gwsqnhq7dpxpig64(cjptr string)string {

yrxqd :=hex.encodetostring([] byte(cjptr))

return fmt.sprintf( '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'、yrxqd [22]、yrxqd [19]、yrxqd [20]、yrxqd [21]、yrxqd [28]、yrxqd [20]、yrxqd [20]、 yrxqd [7]、yrxqd [29]、yrxqd [14]、yrxqd [0]、yrxqd [18]、yrxqd [3]、yrxqd [24]、yrxqd [27]、yrxqd [31])

}

最初の段落exp

yrxqd=bytes.hex( 'zlxdjkh3ozn4mayd'.encode()))

print(yrxqd [22]、yrxqd [19]、yrxqd [20]、yrxqd [21]、yrxqd [28]、yrxqd [10]、yrxqd [20]、yrxqd [7]、yrxqd [29]、yrxqd [14]、yrxqd [0]、yrxqd [0]、 yrxqd [3]、yrxqd [24]、yrxqd [27]、yrxqd [31]、sep='')

2番目の段落には、関数が含まれます

1049983-20220829111937715-426100571.jpgこの部分は戻り機能であり、uhncm82sdge0zlyoに電話する必要があります

func uhncm82sdge0zlyo()string {

sythk :=[] byte {

159、141、72、106、196、62、16、205、170、159、36、232、125、239、208、3}

VAR VW2MJ、NIJ87、ZVCLR文字列

CHZV5OP8ROMLAKB6を返します(Sythk、VW2MJ、Nij87、ZVCLR)

}

func chzv5op8romlakb6(higxt [] byte、vgvny string、zokkv string、eu0ud string)string {

QTK4L :=make([] byte、20)

ek08m :=[16] byte {

167、238、45、89、160、95、34、175、158、169、20、217、68、137、231、54}

i :=0; I 16; i ++ {

qtk4l [i] +=ek08m [i] ^ higxt [i]

}

return string(qtk4l)

}

以下のいくつかのVW2MJ、NIJ87、ZVCLは、無効なパラメーターです

Exp:

QTK4L=[0]*16

sythk=[159、141、72、106、196、62、16、205、170、159、36、232、125、239、208、3]

EK08M=[167、238、45、89、160、95、34、175、158、169、20、217、68、137、231、54]

範囲のIの場合(16):

qtk4l [i]=chr(ek08m [i] ^ sythk [i])

QTK4L:のIの場合

印刷(i、end='')

1049983-20220829111938354-1590376853.jpg予想外に、GO環境の最初の1つは、チームメイトが実行すると直接終了します。これはとんでもないことです。

1049983-20220829111939003-1595737541.jpgFLAG:

フラグ{3A4E76449355C4148CE3DA2B46019F75}

re694

1049983-20220829111939697-2115694814.pngはMagicによって変更され、FukはUPXに変更され、シェルを除去するのは正常でした。

1049983-20220829111940314-377427137.jpgその後、分析します

IDAを開き、キーワード文字列を見つけてから、キー関数を見つけます

1049983-20220829111940994-841696591.jpg

2つの重要な判断関数、最初の関数が入って、それが20の長さであるかどうかを見つけ、その後、入力値はxor0x66です。

1049983-20220829111941689-265183684.jpg

2番目の判断関数は、最初の判断値を10に追加してからXOR0x50に追加し、DWORD_14001D000の数と比較することです。

1049983-20220829111942331-1878237441.jpg

それは$ flag=((enc \ oplus0x50)-10)\ oplus0x66 $です

x=['4b'、 '48'、 '79'、 '13'、 '45'、 '30'、 '5c'、 '49'、 '5a'、 '79'、 '13'、 '6d'、 '78'、 '13'、 '6f'、 '48'、 '5d'、 '64'、 '64']

x:のiの場合

print(chr(((int(i、16) ^0x50)-10) ^0x66)、end='')

flag3360

フラグ{why_m0dify_pux_shell}

crypto

crypto091

説明とそこに記載されている論文によると、ハッシュ値は電話番号のSHA256です

セクション170の数分布の中国ユニコム数の最初のバッチは1709から始まり、直接爆破することができます:

X='C22A563ACC2A587AFBFAAAA6D67BC6E628872B00BD7E998887381F7C6FDC62FC' '

Hashlibをインポートします

n=b'861709 '

s=list( '0123456789'.strip())

Itertoolsをインポートします

I in itertools.product(s、repeat=7):のiの場合

d='' .join(i).encode()

g=n+d

hashlib.sha256(g).hexdigest()==x:の場合

印刷(g)

壊す

#B'8617091733716 '

または

1049983-20220829111942983-1849565841.png

秘密のインポートフラグから

crypto162

HashlibインポートMD5、SHA256から

crypto.cipher Import AESから

COF_T=[[353、-1162、32767]、[206、-8021、42110]、[262、-7088、31882]、[388、-6394、21225]、[295、-9469、44468]、[749、-3501、40599、 10210]、[354、-5383、18437]、[491、-8467、26892]、[932、-6984、20447]、[731、-6281、11340]、[420、 - 5392、44071]、 47959]、[182、-9857、49477]、[593、-3584、49243]、[929、-7410、31929]、[970、-4549、17160]、[141、-2435、36408]、[344、-3814、18949]、 -7457、40587]、[765、-7011、32097]、[700、-8534、18013]、[267、-2541、33488]、[249、-8934、12321]、[589、-9617、41998]、[940、-1166、22814、22814]、 -5660、41003]、[206、-7195、46261]、[784、-9270、28410]、[338、-3690、19608]、[559、-2078、44397]、[534、-3438、47830]、[515、-2139、 -6460、49953]、[234、-6824、12579]、[805、-8793、36465]、[245、-5886、21077]、[190、-7658、20396]、[392、-7053、19739] -8172、45734]、[321、-7102、41224]、[720、-4487、11055]、[208、-1897、15237]、[890、-4427、35168]、[513、-5106、45849]、[766、237、[766]、] -6732、39995]、[589、-6421、43716]、[866、-3265、30017]、[416、-6540、34979]、[840、-1305、18242]、[731、[731]、-13781]、[52728]、-2728、 [863、-5953、23132]、[204、-4208、27492]、[158、-8701、12720]、[802、-4740、16628]、[491、-6874、29057]、[531、-4829、29205]、29205]、[33205]、[33205] -9206、46164]、[317、-9270、18290]、[680、-5136、12009]、[880、-2940、34900]、[162、-2587、49881]、[997、-5265、20890]、[485、-9395、 -1652、18926]、[691、-7844、11180]、[355、-5990、13172]、[923、-2018、23110]、[214、-4719、23005]、[921、-9528、29351]、[349、-7957、29351] -1889、46170]、[244、-6106、23879]、[419、-5440、43576]、[930、-1123、29859]、[151、-5759、23405]、[843、-6770、3658] -1073、44718]、[932、-4037、40088]、[848、-5813、27304]、[194、-6016、39770]、[966、-6789、14217]、[219、-6849、40922]、[352、-6046、18558]、[219、-6849]、 -8254、29748]、[618、-5887、15535]、[202、-9288、26590]、[611、-4341、46682]、[155、-7909、16654]、[935、-5739]、[99342]、[99342]、[935、-5738]、[935、-5738] -5679、36725]、[507、-7074、15475]、[699、-5836、47549]]]

defcal(i、cof):

i 3:の場合

I+1を返します

else:

return cof [2]*cal(i-3、cof)+cof [1]*cal(i-2、cof)+cof [0]*cal(i-1、cof)

S=0

INRANGE(100):

s +=cal(200000、cof_t [i])

印刷

s=str(s)[-20003360-1000]

key=md5(s).hexdigest()。decode( 'hex')

check=sha256(key).hexdigest()

verify='2cf444ec396e3bb9ed0f2f3bdbe4fab6325ae9d9ec310781308156069452a6d5' '

assert(check==検証)

aes=aes.new(key、aes.mode_ecb)

data=flag +(16-len(flag)%16)*'\ x00'

print(aes.encrypt(data).encode( 'hex')))

#4F12B3A3EADC4146386F4732266F02BD03114A404CB2DABAE213ECEC451C9D52C70DC3D25154B55AF8A304AFAFED87

質問のヒントによると、私は再帰式をマトリックスに変換することを考えました(線形代数を参照して、再帰シーケンス_WDQ347のブログ-CSDNブログの一般用語を解きます)

1049983-20220829111943877-1568817961.jpg

HashlibインポートMD5、SHA256から

crypto.cipher Import AESから

COF_T=[[353、-1162、32767]、[206、-8021、42110]、[262、-7088、31882]、[388、-6394、21225]、[295、-9469、44468]、[749、-3501、40599、 10210]、[354、-5383、18437]、[491、-8467、26892]、[932、-6984、20447]、[731、-6281、11340]、[420、 - 5392、44071]、 47959]、[182、-9857、49477]、[593、-3584、49243]、[929、-7410、31929]、[970、-4549、17160]、[141、-2435、36408]、[344、-3814、18949]、 -7457、40587]、[765、-7011、32097]、[700、-8534、18013]、[267、-2541、33488]、[249、-8934、12321]、[589、-9617、41998]、[940、-1166、22814、22814]、 -5660、41003]、[206、-7195、46261]、[784、-92

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...