ログイン
編集不可のページディスカッション情報添付ファイル
"CTF/Writeup/tkbctf4/rcrypto"の差分

MMA
2と5のリビジョン間の差分 (その間の編集: 3回)
2014-11-03 21:44:58時点のリビジョン2
サイズ: 4763
編集者: nomeaning
コメント:
2014-11-04 01:39:33時点のリビジョン5
サイズ: 4768
編集者: nomeaning
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 2: 行 2:
= rcrypto(crypto 200) = = rcrypto (cryptography 200) =
行 14: 行 14:

rcrypto (cryptography 200)

encrypt.pyflag * (flag + tkbctf[0]) % N及びflag * (flag + tkbctf[1]) % Nを出力する。

flagに関して知ることは出来ないが、tkbctfは実際に生成部を実行することで取得出来る。

$ python
>>> import struct
>>> struct.unpack('<2I', 'tkbctf4\0')
(1667394420, 3434100)

2つの出力の差を考えると、flag * (tkbctf[0] - tkbctf[1]) % Nになるため、これに(tkbctf[0] - tkbctf[1]mod Nにおける逆数を書けるとフラグを復元出来る。

$ gp
? n = Mod(1,25946495250192522047576724511816819759544198048953915995733684949549494827910738050623246897611498241348117781192973416882683927675203016916787056490077799743127524408790979660707704232472351148473764416886881020773481071252863645514573241144492769950926006958612979716016471041875737797336676606168731806362829973930887569121612066003113606576944978373664046398235489658440466297946801827709346404779321914934204023234420152449441680689637366210872452878668055446377201346707149889555295348112732562435803363609530404732421993373521081751061496986978105660905458444206478770727089084410107781991574247759682791306197)
? output1 = n * 2302864379938375384787522457289953058762346515694717964988017701221632252068998721016780659512789645178039929483162432085291148128875938650563974652974607897108753247761759018159346471819526717450317624121005691577913298753406802656066710989103644069541226797561238591832001786871030959032526532824897381416113004865029523158041337929652792421367459253385313006702525506606665513325657107841851439410104118856833250549528309345600994438901026890993789031255524302387252820866177521016309668779564405438776186649089481716393902512049059686799788362854701624870108840227739233423565617147635810535089953364777452765391
? output2 = n * 869821841437664579273841208702057334636310328092375384661895122870843280009327763942775667106913326453781559554453279690395959752854296081023254897131426262762124201024166059200347755016000992120349762030587256929453375758557293418778029046615012379759165445526510048231152939113590563355048407714266168812177988203610092674509339069396233061882191910214456155546393848777696938097852335164090584476493820466258280954729469300306911409684786367255431603152145902151223834708442564731418184393252984714050882676106734102146980036229108895568198263271905480015122766218776429803994468521463000793677542363327966917714
? diff_tkbctf = (1667394420 - 3434100) * n
? (output1 - output2) / diff_tkbctf
%5 = Mod(8874284088105576854948238238614457044505028639011349374021861498995036023097152049555857239549350287166006347100199983957544356840501980854784901113821946197380611177705292212987004478484951309819182405098846767765333862409425926812573611864910204824928321142829182839508679805462040296761411851272619037561124670207800113160725445151643233355853069817035845548582628939322952705418085312089629008831113802005771457751200233715401850140367028206001736592528758851066145310031045563613680644635600425736132514865977264503188118025685603053077990165729300195014737832785024786331903041102248425142311946913492026078519, 25946495250192522047576724511816819759544198048953915995733684949549494827910738050623246897611498241348117781192973416882683927675203016916787056490077799743127524408790979660707704232472351148473764416886881020773481071252863645514573241144492769950926006958612979716016471041875737797336676606168731806362829973930887569121612066003113606576944978373664046398235489658440466297946801827709346404779321914934204023234420152449441680689637366210872452878668055446377201346707149889555295348112732562435803363609530404732421993373521081751061496986978105660905458444206478770727089084410107781991574247759682791306197)
? quit

$ pry
[1] pry(main)> [8874284088105576854948238238614457044505028639011349374021861498995036023097152049555857239549350287166006347100199983957544356840501980854784901113821946197380611177705292212987004478484951309819182405098846767765333862409425926812573611864910204824928321142829182839508679805462040296761411851272619037561124670207800113160725445151643233355853069817035845548582628939322952705418085312089629008831113802005771457751200233715401850140367028206001736592528758851066145310031045563613680644635600425736132514865977264503188118025685603053077990165729300195014737832785024786331903041102248425142311946913492026078519.to_s(16)].pack("H*")
=> "FLAG{R4b1n cryp705y573m 15 v3ry 1n73r3571ng!!!}FLAG{R4b1n cryp705y573m 15 v3ry 1n73r3571ng!!!}FLAG{R4b1n cryp705y573m 15 v3ry 1n73r3571ng!!!}FLAG{R4b1n cryp705y573m 15 v3ry 1n73r3571ng!!!}FLAG{R4b1n cryp705y573m 15 v3ry 1n73r3571ng!!!}FLAG{R4b1n cryp705y57"

CTF/Writeup/tkbctf4/rcrypto (最終更新日時 2014-11-04 01:39:33 更新者 nomeaning)