Misc
署名の問題
ネットワークセキュリティにおける8つの複数選択の質問、Baiduは回答を検索できます。ここでいくつかの質問に対する回答のみを知っている場合は、列挙を使用してファズの回答をテストしてフラグを取得できます
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つのパラメーターを備えています
2番目の関数は、最初にCHZV5OP8ROMLAKB6をグローバルに検索して、どの関数がこの関数を呼び出すかを確認し、さらに検索してシンボルが質問の意味を満たしているかどうかを確認します。対応する関数はUHNCM82SDGE0ZLYOです
6、出かけて自分自身、そして次回の2つの繰り返しの判断があります。その後、3つの呼び出しがあります
次に、メイン関数を見てください
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番目の段落には、関数が含まれます
この部分は戻り機能であり、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='')
予想外に、GO環境の最初の1つは、チームメイトが実行すると直接終了します。これはとんでもないことです。
FLAG:
フラグ{3A4E76449355C4148CE3DA2B46019F75}
re694
はMagicによって変更され、FukはUPXに変更され、シェルを除去するのは正常でした。
その後、分析します
IDAを開き、キーワード文字列を見つけてから、キー関数を見つけます
2つの重要な判断関数、最初の関数が入って、それが20の長さであるかどうかを見つけ、その後、入力値はxor0x66です。
2番目の判断関数は、最初の判断値を10に追加してからXOR0x50に追加し、DWORD_14001D000の数と比較することです。
それは$ 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 '
または
秘密のインポートフラグから
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ブログの一般用語を解きます)
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
Recommended Comments