复现一下2022TAMUctf

Crypto

Take a Byte (rsa爆破m)

1
2
3
4
N = 142340601329766635770777206868142025827135648303906321521767950463359821968347786484195570468286189226989358219855587259388045702266863705647272136227951246915219010211812867670881597286343297521061070264928021561647069809027686627213745350820280726089198348218787227379658142796612755695608708166251723918573
e = 65537
gigem{ 20051828644545482229736628106141244640599101529879885105710784481396775912918792507483557891429556884620407940642293639975351089356719043660923842126057955226821006981159497594255367990437808428738966466323561013853912103206228977372401699483483780984788644775884227931090699231710824156773590615893131558850 83854283495787275735120594010627089167261415561903905351771023881392119205149149996712721903995141303223259322733171979229792652773426096860777717945754070980584019228373140857713986765572016036475658456042955927590405614234701804222801317429142025509797703330789265419562141374229727994168837095409036338568 78904501193718450241150044086151978641373210178931228666755925416616937391520262776603032001573248789105989232189683980140752923337223916839724076158142673130469883146293937489870287627936877909351412530215816324887169760023203892122852725894323142185537520826861102859602179425272481969545119988517864383564 47961603526461820206373269231442662243699573437286707816155792929114872724623413781363451789360584067207761975567708191934626179977752601193951267893009944570285082164961608159621113177642183659229110807063045551397256883594417774681050422815616651040698560706966132185534126489503623440803081090985977432213 20051828644545482229736628106141244640599101529879885105710784481396775912918792507483557891429556884620407940642293639975351089356719043660923842126057955226821006981159497594255367990437808428738966466323561013853912103206228977372401699483483780984788644775884227931090699231710824156773590615893131558850 50342105347948345611627592249986702671018845467339751873680689284434037397828309425943485577838862603242724702261411453665542915889037086395252349130557964941605887279611677289199815775718410345602278454276070794003809988713918612327660789198880325185440589681685437854774193273238050212903991357887642097119 37252146374472726164921719652578798621226025146855762979550162219630912866900335490489201719691924302305340263499768691390122878112296947529489110921062793686813580786870192120206330034119855831790098956530717687094958916807286984557539790337570554750791706656454847999237464594117450042991072036154679689731 112818630895695330237558305617577608808491509986969200732069951955929932251364558874104191763303450912805007823456809169120010063128101002215135179032019286263896832070761297466440614775868579566194612528194624091277783915479380009610098973715998676163821768538643334255796018687667236622186895735849089889361 125715069946507780366144878808809224300212960551274879605010482052408758349134723717258128261703755090407531363495393681389781003273832525367919174375688554585181633993270716293180563076928876409243577749893885941402821261253580990806839485615883313684525545246860277249798935689432769907778357156479876894908 20051828644545482229736628106141244640599101529879885105710784481396775912918792507483557891429556884620407940642293639975351089356719043660923842126057955226821006981159497594255367990437808428738966466323561013853912103206228977372401699483483780984788644775884227931090699231710824156773590615893131558850 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917 51031363059758405089193348160463680989730341656858001814265143574015792821480761711624131983817195398718296062083806343690857667956418649255305897470096904740514896704079255967071366423466408861234017128184898577130152263270742505678507954658936067263618599633496818184446289877020571051229161033454627784562 20051828644545482229736628106141244640599101529879885105710784481396775912918792507483557891429556884620407940642293639975351089356719043660923842126057955226821006981159497594255367990437808428738966466323561013853912103206228977372401699483483780984788644775884227931090699231710824156773590615893131558850 94353374555656679140432492892107777072224010951222839428792394552259349901419711075369544716435688802053471212467218767126427152075974695359186732893927279647288306899749863952520762661851437845697512463124069255934788006797785751896586752330563101877525452643958979838662446804754770114461350964612505415979 50342105347948345611627592249986702671018845467339751873680689284434037397828309425943485577838862603242724702261411453665542915889037086395252349130557964941605887279611677289199815775718410345602278454276070794003809988713918612327660789198880325185440589681685437854774193273238050212903991357887642097119 101206936084089077861965565696116970981936043266235415161975679933992218583886515638642681194112143326493125541648525120207299034644593411665089444250305428891364760164249251330524245466146094987103162707712325308046143410030961826258822676430515442383147672767969593475412877254888647114762098272180931811572 67254646129628315330821461895276282788182808170272492052462924759872150117675855768088908334049065156928537508456326255769374456035182061190105147651242112798644629078961344343013294536015861099527417631431775600866834327770400754918005905068152860008163068937864512592394006154376043034942481137861018914868 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917 51031363059758405089193348160463680989730341656858001814265143574015792821480761711624131983817195398718296062083806343690857667956418649255305897470096904740514896704079255967071366423466408861234017128184898577130152263270742505678507954658936067263618599633496818184446289877020571051229161033454627784562 53262097898950169907895963200320421578604241263216375519866779556598589300898376353430890201387074809416791075570528807591652216505658980520277593129830919546499789539018672202351149469485087689428260693344587313500424077358279055359319369172385906651221827739298273593636368029277589942466676028675579890107 94353374555656679140432492892107777072224010951222839428792394552259349901419711075369544716435688802053471212467218767126427152075974695359186732893927279647288306899749863952520762661851437845697512463124069255934788006797785751896586752330563101877525452643958979838662446804754770114461350964612505415979 2430438645616574386696425574245374470598549810182175274551885652214527208374526562861228820867373638935782365215708377955921551330618659890583825272558060186500141770859102311920988673134333917490079432864388177046497387985911947044281858191450072948162930628670906708128321904679157636703063571130790364883 13796177393828527291744511404416839769863259510413728685992376248599162441202291886439660675677653622901648405574058000123496322178999157790425090095832457176589064382002099304938815001660778620620528228883879875536592951049928308283418117379668761286572354085616852536841259829272184591287578895980689843232 59958730350511228075150752532926434417208614146375879843497364275996730125058747804093584516572137497546625055300915380594242596934257985470532219238262131908875715873418938586007930498091987319190839378667242853492885435289215932820339252655227021838981712704743786062855761031574884243559007082267312838239 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917 27960058358668029177815036370645008893703736742708799416106479224069084997819345835966184033549093960085114854835973085749253176716922081556372971473056427863766489276998454055480915171947454956293697647039913742958823362234949670623183245204065440198028964059125044566382318231717851158568653882570232170263 25206543252630958930205925877353547253213958041378586272609603156964586339334901058688724721157586114563529911187329090718119219731718576639754373696098676525209345072282128320977894346339696285763748066024535274855649989445916531649347273210797084517367608205734881845557704134028187681267780369376102696278 25342224089170333100306636803914920787189896347551816444387863311931649080923604315800499204237579498631810096631611071973123874056830102805021489922223497107987745847833710079309739908231834336962548381665274377394507547508429219479200092693502822925641820838339696968606391364116752304286396140315393313151 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917 50500757958059566553948452213430677739062133399154230720526776946121679105666884743587180344391543571369500170810892276571666391607876552785346564660804897850738768097497754740736049331354148247545753252373564222927453167732844869576441864192773810563228412282917327450262466712149402999810508187299217077832 13796177393828527291744511404416839769863259510413728685992376248599162441202291886439660675677653622901648405574058000123496322178999157790425090095832457176589064382002099304938815001660778620620528228883879875536592951049928308283418117379668761286572354085616852536841259829272184591287578895980689843232 94353374555656679140432492892107777072224010951222839428792394552259349901419711075369544716435688802053471212467218767126427152075974695359186732893927279647288306899749863952520762661851437845697512463124069255934788006797785751896586752330563101877525452643958979838662446804754770114461350964612505415979 75403769027329350048620079509960404012355117276850882699629857341112844373540933281523245700946105940872664118746361742614088673265525390243790774806272940237616738760424986011201067641954814019309748633751600764659128139503810407425513199105360353232273028636433129952154780253752026868651612197071477654436 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917 132626448970956079864817158619972124077866198096038483761244821801251762948349253320315389306441383314870810646607706848421198329468403474363598378085192068048313691157122281578064651045742564142127919930992854999417980884496353697566372619597176562463683238483309005689504377616794496119531246611799864265667 71172913413922329935704979207403580627225536795166420260725980069894246080693948091921089785863354903571127888879798538591171644685134274362332443155858850844647978416058522545267218109418365744589915489600473283739992336005065450027809122832659400353025763460136538927760513760032470665030322553524317349882 139051834424787691049301940425084534822187931529013926536160702324482018355993996420233169577748099338600092666916418143391043318980547087119772370765825748591946164469050568118691659775385719962347326442442457009607621890207791156024683174801577222772673456164324766475796565471824420028882736280853171851210 13796177393828527291744511404416839769863259510413728685992376248599162441202291886439660675677653622901648405574058000123496322178999157790425090095832457176589064382002099304938815001660778620620528228883879875536592951049928308283418117379668761286572354085616852536841259829272184591287578895980689843232 13796177393828527291744511404416839769863259510413728685992376248599162441202291886439660675677653622901648405574058000123496322178999157790425090095832457176589064382002099304938815001660778620620528228883879875536592951049928308283418117379668761286572354085616852536841259829272184591287578895980689843232 134752619714462687351938675521714746356213171731334621316047457372412420997884436167327770486316487173787538789339647763416762962633745005587016969211340594744711181749296753379714833676503693412716926903519765645254871337654447077737150451789441976908325540991854789258165643777934613328888504424141998253253 }

给我们的是是很多段经过加密后的数字,刚开始还往共模啥啥啥的地方想,后面想通了……

单个字符加密,m很小,所以可以直接爆破,代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Crypto.Util.number import*
import gmpy2

N = 142340601329766635770777206868142025827135648303906321521767950463359821968347786484195570468286189226989358219855587259388045702266863705647272136227951246915219010211812867670881597286343297521061070264928021561647069809027686627213745350820280726089198348218787227379658142796612755695608708166251723918573
e = 65537

# gigem{enumerable_SeArCh_SpAcEs_4R3_WEAK_0xBEEF}
a = []
flag = []
cn = [20051828644545482229736628106141244640599101529879885105710784481396775912918792507483557891429556884620407940642293639975351089356719043660923842126057955226821006981159497594255367990437808428738966466323561013853912103206228977372401699483483780984788644775884227931090699231710824156773590615893131558850 ,83854283495787275735120594010627089167261415561903905351771023881392119205149149996712721903995141303223259322733171979229792652773426096860777717945754070980584019228373140857713986765572016036475658456042955927590405614234701804222801317429142025509797703330789265419562141374229727994168837095409036338568, 78904501193718450241150044086151978641373210178931228666755925416616937391520262776603032001573248789105989232189683980140752923337223916839724076158142673130469883146293937489870287627936877909351412530215816324887169760023203892122852725894323142185537520826861102859602179425272481969545119988517864383564, 47961603526461820206373269231442662243699573437286707816155792929114872724623413781363451789360584067207761975567708191934626179977752601193951267893009944570285082164961608159621113177642183659229110807063045551397256883594417774681050422815616651040698560706966132185534126489503623440803081090985977432213, 20051828644545482229736628106141244640599101529879885105710784481396775912918792507483557891429556884620407940642293639975351089356719043660923842126057955226821006981159497594255367990437808428738966466323561013853912103206228977372401699483483780984788644775884227931090699231710824156773590615893131558850, 50342105347948345611627592249986702671018845467339751873680689284434037397828309425943485577838862603242724702261411453665542915889037086395252349130557964941605887279611677289199815775718410345602278454276070794003809988713918612327660789198880325185440589681685437854774193273238050212903991357887642097119, 37252146374472726164921719652578798621226025146855762979550162219630912866900335490489201719691924302305340263499768691390122878112296947529489110921062793686813580786870192120206330034119855831790098956530717687094958916807286984557539790337570554750791706656454847999237464594117450042991072036154679689731, 112818630895695330237558305617577608808491509986969200732069951955929932251364558874104191763303450912805007823456809169120010063128101002215135179032019286263896832070761297466440614775868579566194612528194624091277783915479380009610098973715998676163821768538643334255796018687667236622186895735849089889361, 125715069946507780366144878808809224300212960551274879605010482052408758349134723717258128261703755090407531363495393681389781003273832525367919174375688554585181633993270716293180563076928876409243577749893885941402821261253580990806839485615883313684525545246860277249798935689432769907778357156479876894908, 20051828644545482229736628106141244640599101529879885105710784481396775912918792507483557891429556884620407940642293639975351089356719043660923842126057955226821006981159497594255367990437808428738966466323561013853912103206228977372401699483483780984788644775884227931090699231710824156773590615893131558850, 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917, 51031363059758405089193348160463680989730341656858001814265143574015792821480761711624131983817195398718296062083806343690857667956418649255305897470096904740514896704079255967071366423466408861234017128184898577130152263270742505678507954658936067263618599633496818184446289877020571051229161033454627784562, 20051828644545482229736628106141244640599101529879885105710784481396775912918792507483557891429556884620407940642293639975351089356719043660923842126057955226821006981159497594255367990437808428738966466323561013853912103206228977372401699483483780984788644775884227931090699231710824156773590615893131558850, 94353374555656679140432492892107777072224010951222839428792394552259349901419711075369544716435688802053471212467218767126427152075974695359186732893927279647288306899749863952520762661851437845697512463124069255934788006797785751896586752330563101877525452643958979838662446804754770114461350964612505415979, 50342105347948345611627592249986702671018845467339751873680689284434037397828309425943485577838862603242724702261411453665542915889037086395252349130557964941605887279611677289199815775718410345602278454276070794003809988713918612327660789198880325185440589681685437854774193273238050212903991357887642097119, 101206936084089077861965565696116970981936043266235415161975679933992218583886515638642681194112143326493125541648525120207299034644593411665089444250305428891364760164249251330524245466146094987103162707712325308046143410030961826258822676430515442383147672767969593475412877254888647114762098272180931811572, 67254646129628315330821461895276282788182808170272492052462924759872150117675855768088908334049065156928537508456326255769374456035182061190105147651242112798644629078961344343013294536015861099527417631431775600866834327770400754918005905068152860008163068937864512592394006154376043034942481137861018914868, 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917, 51031363059758405089193348160463680989730341656858001814265143574015792821480761711624131983817195398718296062083806343690857667956418649255305897470096904740514896704079255967071366423466408861234017128184898577130152263270742505678507954658936067263618599633496818184446289877020571051229161033454627784562, 53262097898950169907895963200320421578604241263216375519866779556598589300898376353430890201387074809416791075570528807591652216505658980520277593129830919546499789539018672202351149469485087689428260693344587313500424077358279055359319369172385906651221827739298273593636368029277589942466676028675579890107, 94353374555656679140432492892107777072224010951222839428792394552259349901419711075369544716435688802053471212467218767126427152075974695359186732893927279647288306899749863952520762661851437845697512463124069255934788006797785751896586752330563101877525452643958979838662446804754770114461350964612505415979, 2430438645616574386696425574245374470598549810182175274551885652214527208374526562861228820867373638935782365215708377955921551330618659890583825272558060186500141770859102311920988673134333917490079432864388177046497387985911947044281858191450072948162930628670906708128321904679157636703063571130790364883, 13796177393828527291744511404416839769863259510413728685992376248599162441202291886439660675677653622901648405574058000123496322178999157790425090095832457176589064382002099304938815001660778620620528228883879875536592951049928308283418117379668761286572354085616852536841259829272184591287578895980689843232, 59958730350511228075150752532926434417208614146375879843497364275996730125058747804093584516572137497546625055300915380594242596934257985470532219238262131908875715873418938586007930498091987319190839378667242853492885435289215932820339252655227021838981712704743786062855761031574884243559007082267312838239, 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917, 27960058358668029177815036370645008893703736742708799416106479224069084997819345835966184033549093960085114854835973085749253176716922081556372971473056427863766489276998454055480915171947454956293697647039913742958823362234949670623183245204065440198028964059125044566382318231717851158568653882570232170263, 25206543252630958930205925877353547253213958041378586272609603156964586339334901058688724721157586114563529911187329090718119219731718576639754373696098676525209345072282128320977894346339696285763748066024535274855649989445916531649347273210797084517367608205734881845557704134028187681267780369376102696278, 25342224089170333100306636803914920787189896347551816444387863311931649080923604315800499204237579498631810096631611071973123874056830102805021489922223497107987745847833710079309739908231834336962548381665274377394507547508429219479200092693502822925641820838339696968606391364116752304286396140315393313151, 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917, 50500757958059566553948452213430677739062133399154230720526776946121679105666884743587180344391543571369500170810892276571666391607876552785346564660804897850738768097497754740736049331354148247545753252373564222927453167732844869576441864192773810563228412282917327450262466712149402999810508187299217077832, 13796177393828527291744511404416839769863259510413728685992376248599162441202291886439660675677653622901648405574058000123496322178999157790425090095832457176589064382002099304938815001660778620620528228883879875536592951049928308283418117379668761286572354085616852536841259829272184591287578895980689843232, 94353374555656679140432492892107777072224010951222839428792394552259349901419711075369544716435688802053471212467218767126427152075974695359186732893927279647288306899749863952520762661851437845697512463124069255934788006797785751896586752330563101877525452643958979838662446804754770114461350964612505415979, 75403769027329350048620079509960404012355117276850882699629857341112844373540933281523245700946105940872664118746361742614088673265525390243790774806272940237616738760424986011201067641954814019309748633751600764659128139503810407425513199105360353232273028636433129952154780253752026868651612197071477654436, 11219660713789204202742696989216077354370568013452048147955373063444762584289531563384783613041048421333474174641298599132215025075661404347086073623827597677669183657195329521851165904770403553075208924844122371098662329185683345513780968553777905403400451650306775485483662325950970846860754141892029127917, 132626448970956079864817158619972124077866198096038483761244821801251762948349253320315389306441383314870810646607706848421198329468403474363598378085192068048313691157122281578064651045742564142127919930992854999417980884496353697566372619597176562463683238483309005689504377616794496119531246611799864265667, 71172913413922329935704979207403580627225536795166420260725980069894246080693948091921089785863354903571127888879798538591171644685134274362332443155858850844647978416058522545267218109418365744589915489600473283739992336005065450027809122832659400353025763460136538927760513760032470665030322553524317349882, 139051834424787691049301940425084534822187931529013926536160702324482018355993996420233169577748099338600092666916418143391043318980547087119772370765825748591946164469050568118691659775385719962347326442442457009607621890207791156024683174801577222772673456164324766475796565471824420028882736280853171851210, 13796177393828527291744511404416839769863259510413728685992376248599162441202291886439660675677653622901648405574058000123496322178999157790425090095832457176589064382002099304938815001660778620620528228883879875536592951049928308283418117379668761286572354085616852536841259829272184591287578895980689843232, 13796177393828527291744511404416839769863259510413728685992376248599162441202291886439660675677653622901648405574058000123496322178999157790425090095832457176589064382002099304938815001660778620620528228883879875536592951049928308283418117379668761286572354085616852536841259829272184591287578895980689843232, 134752619714462687351938675521714746356213171731334621316047457372412420997884436167327770486316487173787538789339647763416762962633745005587016969211340594744711181749296753379714833676503693412716926903519765645254871337654447077737150451789441976908325540991854789258165643777934613328888504424141998253253]
for i in range(len(cn)):
for j in range(1,128):
if (pow(j,e,N) == cn[i]):
flag.append(j)
a.append(i)
for i in flag:
print(chr(i),end = "")
# gigem{enumerable_SeArCh_SpAcEs_4R3_WEAK_0xBEEF}

reverse

Covfefe

题目给出了.class文件,在网上下载jad,然后在当前目录中新建class和src文件夹,class文件夹中存放反汇编文件,运行以下代码后,src文件夹会自动生成逆向后的文件。

1
jad -o -r -s java -d src class/**/*.class

鼠标右键查看源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: Covfefe.java


public class Covfefe
{

public Covfefe()
{
}

public static void main(String args[])
{
byte byte0 = 35;
int ai[] = new int[byte0];
for(int i = 0; i < byte0; i++)
ai[i] = 0;

ai[0] = 103;
ai[1] = ai[0] + 2;
ai[2] = ai[0];
for(int j = 3; j < 8; j++)
switch(j)
{
case 3: // '\003'
ai[j] = 101;
break;

case 4: // '\004'
ai[6] = 99;
break;

case 5: // '\005'
ai[5] = 123;
break;

case 6: // '\006'
ai[j + 1] = 48;
break;

case 7: // '\007'
ai[4] = 109;
break;
}

ai[8] = 102;
ai[9] = ai[8];
ai[24] = ai[25] = ai[28] = ai[7];
ai[10] = 51;
ai[11] = (ai[10] + 12) - 4 - 4 - 4;
ai[12] = ai[15] = ai[22] = ai[27] = ai[0] - (int)Math.pow(2D, 3D);
ai[13] = 49;
ai[14] = 115;
for(int k = 16; k < 22; k++)
switch(k)
{
case 16: // '\020'
ai[k + 1] = 108;
break;

case 17: // '\021'
ai[k - 1] = 52;
break;

case 18: // '\022'
ai[k + 1] = 52;
break;

case 19: // '\023'
ai[k - 1] = 119;
break;

case 20: // '\024'
ai[k + 1] = 115;
break;

case 21: // '\025'
ai[k - 1] = 121;
break;
}

ai[23] = 103;
ai[26] = ai[23] - 3;
ai[29] = ai[26] + 20;
ai[30] = ai[29] % 53 + 53;
ai[31] = ai[0] - 18;
ai[32] = 80;
ai[33] = 83;
ai[byte0 - 1] = (int)Math.pow(5D, 3D);
}
}

写点python小代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
ai = [0]*35
ai[0] = 103;
ai[1] = ai[0] + 2
ai[2] = ai[0]
ai[3] = 101
ai[6] = 99
ai[5] = 123
ai[7] = 48
ai[4] = 109
ai[8] = 102
ai[9] = ai[8]
ai[24] = ai[25] = ai[28] = ai[7]
ai[10] = 51;
ai[11] = (ai[10] + 12) - 4 - 4 - 4
ai[12] = ai[15] = ai[22] = ai[27] = ai[0] - pow(2, 3);
ai[13] = 49
ai[14] = 115
ai[17] = 108
ai[16] = 52
ai[19] = 52
ai[18] = 119
ai[21] = 115
ai[20] = 121
ai[23] = 103;
ai[26] = ai[23] - 3
ai[29] = ai[26] + 20
ai[30] = ai[29] % 53 + 53
ai[31] = ai[0] - 18
ai[32] = 80
ai[33] = 83
ai[34] = pow(5, 3)
for i in ai:
print(chr(i),end = "")
#gigem{c0ff33_1s_4lw4ys_g00d_0xCUPS}

Existing Tooling (elf动调)

文件在运行过程中就会产生flag,并且最后会输出长度。

动调obj数组即可

shift+e提取数据

1
gigem{im_curious_did_you_statically_or_dynamically_reverse_ping_addison}

Redo1 (C指针逆向)

幸好前几天刚把C指针学完,不然就凉透了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <string.h>

#define STR_LEN 34

#define EXIT printf("Sorry that's not the flag\n"); return 1;
#define SUCCESS printf("THAT'S THE FLAG!\n"); return 0;
#define PARAMS printf("Usage: ./code <flag>\n"); return 1;
#define POINTER char* flag = (char*)(&a);

int main(int argc, char** argv)
{
int a[] = {0x65676967,0x00000000,0x34427b6d,0x5f433153,0x616c5f43,0x00000000,0x4175476e,0x525f4567,0x00000000,0x78305f45,0x53414c47,0x00007d53};
if(argc != 2){ PARAMS }
if(strlen(argv[1]) != STR_LEN){ EXIT }

POINTER

for(int i = 0; i < STR_LEN; i++)
{
int idx = i;
if(i >= 4 && i <= 15){ idx += 4; }
if(i >= 16 && i <= 23){ idx += 8; }
if(i > 23){ idx += 12; }

if(argv[1][i] != flag[idx]){ EXIT }
}

SUCCESS
}

argc是传入参数的个数,argv[]是传入的参数,参数长度需要等于34

被定义成char * 类型的指针flag,指向了从int * 类型转换成a数组,那么当flag指针++的时候,应当是+1(char类型的数据宽度为1),所以px遍历a数组,则是按照0x67->0x69->0x67-0x65的顺序遍历。

比赛的时候,题目都没看全,就试了试,flag就出来了,去掉数组a中的0x00000000,就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(int argc,char** argv){
int a[] = {0x65676967,0x00000000,0x34427b6d,0x5f433153,0x616c5f43,0x00000000,0x4175476e,0x525f4567,0x00000000,0x78305f45,0x53414c47,0x00007d53};
char *px;
px = (char*)a;
char flag[50] = {0};
for(int i = 0;i<48;i++)
{
flag[i] = *px;
px++;
}
for(int i = 0;i<48;i++){

printf("%c",flag[i]);
}
getchar();
return 0;
}
// gigem{B4S1C_C_lanGuAgE_RE_0xGLASS}

Redo2 (gcc生成汇编代码)

给我们整上了Intel的汇编,这题真的困扰了我很久,我头铁,还想着手动还原的,还画了堆栈图,没往生成汇编代码这块想……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
.intel_syntax noprefix
main:
lea ecx, [esp+4]
and esp, -16
push DWORD PTR [ecx-4]
push ebp
mov ebp, esp
push ebx
push ecx
sub esp, 32
mov ebx, ecx
cmp DWORD PTR [ebx], 2
je .L2
mov eax, 1
jmp .L3
.L2:
mov DWORD PTR [ebp-12], 0
jmp .L4
.L6:
mov eax, DWORD PTR [ebx+4]
add eax, 4
mov edx, DWORD PTR [eax]
mov eax, DWORD PTR [ebp-12]
add eax, edx
movzx eax, BYTE PTR [eax]
test al, al
jne .L5
mov eax, 1
jmp .L3
.L5:
add DWORD PTR [ebp-12], 1
.L4:
cmp DWORD PTR [ebp-12], 28
jle .L6
sub esp, 12
push 29
call malloc
add esp, 16
mov DWORD PTR [ebp-32], eax
mov DWORD PTR [ebp-16], 0
jmp .L7
.L8:
mov eax, DWORD PTR [ebx+4]
add eax, 4
mov edx, DWORD PTR [eax]
mov eax, DWORD PTR [ebp-16]
add eax, edx
mov ecx, DWORD PTR [ebp-16]
mov edx, DWORD PTR [ebp-32]
add edx, ecx
movzx eax, BYTE PTR [eax]
mov BYTE PTR [edx], al
mov edx, DWORD PTR [ebp-16]
mov eax, DWORD PTR [ebp-32]
add eax, edx
movzx eax, BYTE PTR [eax]
lea ecx, [eax-49]
mov edx, DWORD PTR [ebp-16]
mov eax, DWORD PTR [ebp-32]
add eax, edx
mov edx, ecx
mov BYTE PTR [eax], dl
add DWORD PTR [ebp-16], 1
.L7:
cmp DWORD PTR [ebp-16], 28
jle .L8
mov eax, DWORD PTR [ebp-32]
movzx edx, BYTE PTR [eax]
mov eax, DWORD PTR [ebp-32]
add eax, 2
movzx eax, BYTE PTR [eax]
cmp dl, al
je .L9
mov eax, 1
jmp .L3
.L9:
mov eax, DWORD PTR [ebp-32]
add eax, 1
movzx eax, BYTE PTR [eax]
cmp al, 56
je .L10
mov eax, 1
jmp .L3
.L10:
mov eax, DWORD PTR [ebp-32]
movzx eax, BYTE PTR [eax]
cmp al, 54
je .L11
mov eax, 1
jmp .L3
.L11:
mov eax, DWORD PTR [ebp-32]
add eax, 3
movzx eax, BYTE PTR [eax]
cmp al, 52
je .L12
mov eax, 1
jmp .L3
.L12:
mov eax, DWORD PTR [ebp-32]
add eax, 28
movzx eax, BYTE PTR [eax]
movsx eax, al
mov edx, DWORD PTR [ebp-32]
add edx, 5
movzx edx, BYTE PTR [edx]
movsx edx, dl
add edx, 2
cmp eax, edx
je .L13
mov eax, 1
jmp .L3
.L13:
mov eax, DWORD PTR [ebp-32]
add eax, 5
movzx eax, BYTE PTR [eax]
cmp al, 74
je .L14
mov eax, 1
jmp .L3
.L14:
mov eax, DWORD PTR [ebp-32]
add eax, 4
movzx eax, BYTE PTR [eax]
cmp al, 60
je .L15
mov eax, 1
jmp .L3
.L15:
mov DWORD PTR [ebp-20], 0
jmp .L16
.L18:
mov eax, DWORD PTR [ebp-20]
lea edx, [eax+6]
mov eax, DWORD PTR [ebp-32]
add eax, edx
movzx eax, BYTE PTR [eax]
cmp al, 48
je .L17
mov eax, 1
jmp .L3
.L17:
add DWORD PTR [ebp-20], 1
.L16:
cmp DWORD PTR [ebp-20], 2
jle .L18
mov DWORD PTR [ebp-24], 0
jmp .L19
.L21:
mov eax, DWORD PTR [ebp-24]
lea edx, [eax+10]
mov eax, DWORD PTR [ebp-32]
add eax, edx
movzx eax, BYTE PTR [eax]
cmp al, 49
je .L20
mov eax, 1
jmp .L3
.L20:
add DWORD PTR [ebp-24], 1
.L19:
cmp DWORD PTR [ebp-24], 3
jle .L21
mov DWORD PTR [ebp-28], 0
jmp .L22
.L24:
mov eax, DWORD PTR [ebp-28]
lea edx, [eax+15]
mov eax, DWORD PTR [ebp-32]
add eax, edx
movzx eax, BYTE PTR [eax]
cmp al, 50
je .L23
mov eax, 1
jmp .L3
.L23:
add DWORD PTR [ebp-28], 1
.L22:
cmp DWORD PTR [ebp-28], 4
jle .L24
mov eax, DWORD PTR [ebp-32]
add eax, 21
movzx eax, BYTE PTR [eax]
movsx eax, al
mov edx, DWORD PTR [ebp-32]
add edx, 15
movzx edx, BYTE PTR [edx]
movsx edx, dl
add edx, 1
cmp eax, edx
je .L25
mov eax, 1
jmp .L3
.L25:
mov eax, DWORD PTR [ebp-32]
add eax, 9
movzx edx, BYTE PTR [eax]
mov eax, DWORD PTR [ebp-32]
add eax, 14
movzx eax, BYTE PTR [eax]
cmp dl, al
je .L26
mov eax, 1
jmp .L3
.L26:
mov eax, DWORD PTR [ebp-32]
add eax, 9
movzx edx, BYTE PTR [eax]
mov eax, DWORD PTR [ebp-32]
add eax, 20
movzx eax, BYTE PTR [eax]
cmp dl, al
je .L27
mov eax, 1
jmp .L3
.L27:
mov eax, DWORD PTR [ebp-32]
add eax, 9
movzx edx, BYTE PTR [eax]
mov eax, DWORD PTR [ebp-32]
add eax, 22
movzx eax, BYTE PTR [eax]
cmp dl, al
je .L28
mov eax, 1
jmp .L3
.L28:
mov eax, DWORD PTR [ebp-32]
add eax, 9
movzx eax, BYTE PTR [eax]
cmp al, 46
je .L29
mov eax, 1
jmp .L3
.L29:
mov eax, DWORD PTR [ebp-32]
add eax, 27
movzx eax, BYTE PTR [eax]
cmp al, 1
je .L30
mov eax, 1
jmp .L3
.L30:
mov eax, DWORD PTR [ebp-32]
add eax, 26
movzx eax, BYTE PTR [eax]
cmp al, 2
je .L31
mov eax, 1
jmp .L3
.L31:
mov eax, DWORD PTR [ebp-32]
add eax, 23
movzx eax, BYTE PTR [eax]
cmp al, 3
je .L32
mov eax, 1
jmp .L3
.L32:
mov eax, DWORD PTR [ebp-32]
add eax, 24
movzx eax, BYTE PTR [eax]
cmp al, 4
je .L33
mov eax, 1
jmp .L3
.L33:
mov eax, DWORD PTR [ebp-32]
add eax, 25
movzx eax, BYTE PTR [eax]
movsx eax, al
.L3:
lea esp, [ebp-8]
pop ecx
pop ebx
pop ebp
lea esp, [ecx-4]
ret

需要在头部加上At&t 语法,然后运行下面的代码:

1
gcc -g -m32 -c redo2.s -o redo2

wp上使用的是Binary Ninja,我使用的是逆向界的瑞士军刀——IDA

注意输入的时候,v4所有元素都被减去了49,所以写脚本的时候需要加上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
int __cdecl main(int argc, const char **argv, const char **envp)
{
_BYTE *v4; // [esp+0h] [ebp-20h]
int n; // [esp+4h] [ebp-1Ch]
int m; // [esp+8h] [ebp-18h]
int k; // [esp+Ch] [ebp-14h]
int j; // [esp+10h] [ebp-10h]
int i; // [esp+14h] [ebp-Ch]

if ( argc != 2 )
return 1;
for ( i = 0; i <= 28; ++i )
{
if ( !argv[1][i] )
return 1;
}
v4 = malloc(0x1Du);
for ( j = 0; j <= 28; ++j )
{
v4[j] = argv[1][j];
v4[j] -= 49;
}
if ( *v4 != v4[2] )
return 1;
if ( v4[1] != 56 )
return 1;
if ( *v4 != 54 )
return 1;
if ( v4[3] != 52 )
return 1;
if ( (char)v4[28] != (char)v4[5] + 2 )
return 1;
if ( v4[5] != 74 )
return 1;
if ( v4[4] != 60 )
return 1;
for ( k = 0; k <= 2; ++k )
{
if ( v4[k + 6] != 48 )
return 1;
}
for ( m = 0; m <= 3; ++m )
{
if ( v4[m + 10] != 49 )
return 1;
}
for ( n = 0; n <= 4; ++n )
{
if ( v4[n + 15] != 50 )
return 1;
}
if ( (char)v4[21] != (char)v4[15] + 1 )
return 1;
if ( v4[9] != v4[14] )
return 1;
if ( v4[9] != v4[20] )
return 1;
if ( v4[9] != v4[22] )
return 1;
if ( v4[9] != 46 )
return 1;
if ( v4[27] != 1 )
return 1;
if ( v4[26] != 2 )
return 1;
if ( v4[23] != 3 )
return 1;
if ( v4[24] == 4 )
return (char)v4[25];
return 1;
}

脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
v4 = [0]*29
v4[1] = 56
v4[0] = 54
v4[2] = v4[0]
v4[3] = 52
v4[5] = 74
v4[28] = v4[5] + 2
v4[4] = 60
v4[6] = 48
v4[7] = 48
v4[8] = 48
v4[10] = 49
v4[11] = 49
v4[12] = 49
v4[13] = 49
v4[15] = 50
v4[16] = 50
v4[17] = 50
v4[18] = 50
v4[19] = 50
v4[21] = v4[15] + 1
v4[9] = v4[14]
v4[9] = v4[20]
v4[9] = v4[22]
v4[9] = 46
v4[27] = 1
v4[26] = 2
v4[23] = 3
v4[24] = 4
v4[25] = 1
for i in v4:
print(chr(i+49),end = "")
# gigem{aaa_bbbb1ccccc1d145232}