어렵지 않은 리버싱 문제
crypto 문제가 아니라고 문제 제목에서부터 강력하게 어필하고 있다.
문제에서 주어지는 것은 checker.pyc 파일이다.
.pyc 파일을 파이썬 코드로 복구하는데는 uncompyle6 라는 도구를 사용한다.
pip install uncompyle6 라고 입력하면 다운로드 받을 수 있다.
uncompyle6 <pyc 파일> 이라고 입력하면
아래쪽에 디컴파일된 결과가 출력된다.
from random import randint
def make_correct_array(s):
from itertools import accumulate
s = map(ord, s)
s = accumulate(s)
return [x * 69684751861829721459380039 for x in s]
def validate(a, xs):
def poly(a, x):
value = 0
for ai in a:
value *= x
value += ai
return value
if len(a) != len(xs) + 1:
return False
else:
for x in xs:
value = poly(a, x)
if value != 24196561:
return False
return True
if __name__ == '__main__':
a = ['1',
'-12036995612853156936286011036665',
'70761097437137270936102167471287642036368358112612482078746420',
'-270760577526471416726990241906082418991632930940814915432624543436128198171540530830459237956',
'758322670537213986632051073398213029056006764596691972083294378230604396150245020345345578151884326691815883061644661233566',
'-1657421720674295825624009196807881201156538425172549952934830837304308795987504067118576756384156695624672734346081929437648667598699921926783270422521766',
'2943390021186099695792268081013270881974196667794829319170473858847667993098751630233061218881909160771117031173382926124852410895503366161910086019204972875909440113347847703082692528',
'-4366383100467886811542338093572967906195986358001996645996577053050559284502186031169919156795228805003943383975970397387941387036889498492298331723942560238222112799249196225360410737774072015110348020353373827960',
'5520657464469375535085168005278119107452847156728963520071940150709637476374831684702730463162156797567804625424109791905935911485938940718675728473180762771955765250450118860586403306394732944683432805471041311503536936944211189737460455924147',
'-6040409639368566992709126213554806987805371061694777329555656706760189034740223003993705173076964844299286729470874869893022046365061841748296008630479942340847091453888484451104939876908871692943720179628918429033381977815457948153865807902121350090290570804279375193602547',
'5787710311953879633285309790297805038175576804393314204803650513323659377622042796125454467459097599180897540599672003687739070502385355827172336967661574794985226309399549992624547488182752884937579198351198689666699458701951885339136849427145623150163832591611182849332003464485162869766637587885478556',
'-4902642856751823968634429878262494576942716632047065846096770707728050182094968891567439863034907111831499802965078214716310298694040760316078813885901640406177102504706129153849665291022873031931149397522636563766789644071503388892322207399310201965746021340442189643918290923656823709309501519938717556707108603909365045056709662756',
'3699850006647501865381238611561204533954703596513977828245676687318619534759718394402547485705860055527499878494128302401350380880223847931293923712337830237696802484457727414040654050267719407523721753192192954325214018213886396819789763444724570129624497191387288297104476948209378314234137858016046265182331424030004663522013416916037839106625218484426766132660',
'-2503381664562615076035240043312725911469170509539322500963060841759565879950256432694328993012308199988929777908992648969277299854107452845160410508674734438149484603725126661607768709388709681121690616031411940270274531444374238202577182185377277536890746626118460104352336855579280862046594281695818828156430816693314911283123811829026498147207443379081851667392858117124554747617261592816308',
'1526711982649832550855518449178503829029850196353340802722606457634130620564821108469779499400756261224981382277459193658070861730121981192168711122342705299717814974832514426062327116393221946424916651023156518640300146832579990080903602768066190773540657708137665151529506088591181435588751034797257100353999653716239281224498714495869886616227365969999573784940771441781206939655753850520913539801350776211377271513357088',
'-842953984658658292309510977293251848508894609669997128814435442870981935530742340510532805223877368384282567696998286537095818935371349496091992146132001033224513854255752104540729586337863508063208122715111541501301144174827858857132680974685504851575251455307682302858944583075290460443600124166839500924896625206798501918127708303976904999741341695577320396134799421842795506409025615990094842987072821320651683929011822064975685462916516303634902384',
'422957456346049692341260179325895120684306237587214440494060245900277276657408824422711669420970014541252470333424859299500683275627006833534458868099396756712403692034269278482475139778970259928098027505102261561696249081523441920369791104913855327063145952604829043400103949464549772274121285034631499395728985827459374299870918290675603992428269671561018421791865147604740385306434431638468274562549300037932417098966321238908971362894129002412253266375766405005679438286791278839',
'-193471049395738297286458805008441710818481314825008770802571970679921027956585779537146446202478826950609736190194807825172632108912451882150093367246069044488762341087789876850505036332625451817014469037252491095338851035060715916393889488131974277346811552813523419091870330932321700273143277767115554985119661796352126474690109938223183938799977355475441400344426820861005586283940508501077301414068231586227057423191408340604559735999951401257465421030330286465966325054077255711362180689566758233710057894255',
'80897019154522265075962219548924972222636436750698695412227806781614120103433659745650075545971461672119108220868471749255613126082873507542167152903323879673774863333921546276134550254063787772245388823054886425980368342500816004573653666051201586676337846219409626502611514116162491663176124149268640462530074761560644187346420467797168402893384721587821312088473414828712930545669393960307822395265305548522184928090121229933916770534435506273872305818497882747209394943156010257351777286125488091273714057213582845077500529261868638114252',
'-30991157300659239962382379273689587220093781503633603852641077964766598209918780899862581405249841849580419484848937380799010280118110445100888261399985637695322985763319508483665087943432580280248542847142296516292494400706795213127260840340509645626416202896383350832440622296307920492870297868526862473426648809989495535621102471769488591980750103724888710559056880674173904556134782648406165369372034571096268617505069957968083950883339999122107567730333404604514354389945203159871211134432651406540338255858951994880308146641090354413931223004687783989063555851812332',
'10898530321547862643030259948967335811934203133929192367904890755259294271163493443682870574846517241924967062455138765967329006707910465682333449349018835562602309248817129871747335083073891193148294035699570875945352432067866706606239164851406421462058420332552965055414571465939437934392338438084667282993998949249796333219837811302814971298203468153586251416698554237173187673308562671125010808183536298638986822018942577788091825897904881920744165279001531298651176433961621534597834724217263194654167077985702947958677282348353458897390629629764004013036336330880093494331011464289634037017059214',
'-3523891268719178617759391809696923916578965284368737518166062248827788805300611865357813506341470316533643980951649555395173184508027745014830255418990900729340065218020240066600234292691672294001222463962574343779827770240884946876825398129369449011728342610668390522641632065198956770679949718117639126401069096207516245707091485711900287586853920592094560440500466802097357798144178495254141758895862331325870996171907708591091005766433147632894475782971686761833660787599005566476381551522935129751766549571289862929785293475659486103842879638568779437560167848869297989189727248020161597283822916679478127348097455219687020246',
'1049009395230525946835204327548745660156382103007727038340730605980146773881703526297708742302344392073696822402637984418028824535544901991033420144943360862855744087273191157069965996576985065241424052402265664038379601376920784084651410568081046823376484750182911675376670592592771684011619580226595658630220330126011121106217256782282379027503421884340258486872321433471543280048339959424917173848371112774255068385431165707257285264232385125302656416873392160285571621178003766451490132529708902899674064109724216053072604708836227110013896479251077665577991703057909122183611797152552009819156835684806785365708050958996985688682378524937123437113458794800',
'-287810500492151548704834586633173910345516524879889477620674537190071503503969609698127410745501217046444634733043868178114301412834111030692746464558172261410990112508955801860598602133422753742672612529928573095791568079235190936246876814895150614004510736735152739120657011389172288819540144717236381642829677520679733583800061927794000695383881260491154467723614815557782051558785579254134658030800198262855045952024611446314567918327599163858607698407896819819204117370134035811842960931529124425186496190056990123089220803115260188054910949673201587132528301941935571927957866486255847354681260531046431612165489961862452805031601912597827112293802459202999946017946157963701655642776',
'72840318775523772116121505571723194500864654508297281644035338196315714347706564858121752344175267740057471861924492906827371905580196416981558219725458068759767367613231287267276009431156938141451038364085993554531012918027557882908586474941671885608288696599907767591415770050593926179331528859532069108277391018847050018627360239651375231529713021740867660844960443186281913821951530782331193426282652133390091334505577047329661354861141452136808769623993046940515597706687313752959732361880320118662945891674094728822609014144417184889570853661896640972097678624262109845060262858334075199394582752449557111385061948748069431267873951357429685102744784262058549954007654241063166381981051660360611756484304170176501',
'-17015681558771486155991007955035116076916512293462793673073407338981064531587665371425793544798973639832840416528082008366412403683725263295689004989181740798880208077137794154071759428250102191888377308958606373274224612850521767606720959505007813580866156156201686562664735461061092174619782430311775336027983211559779031600313037713975778935175652360701138102690020160409221296951380222517370044659713252826142337434715993710821121572661660190646046721128592648492458845822598408305251233127433350640998788686337395104295986523640915799392273941815347211960667381140265313967220495404639746907765103117552471119949192461455676214101535861346059114627017679625753522782636018574909447911019663571364150056373926806128745937931845622487846513916357',
'3670505643698807770496066549426487543044433524593104400967542140123349295207658297244298273345531843471130079868055038715113362271938898428021857083393078228958671136583691637859204161146716774861750866178209789574618404882196694017123685798554854657596785758770974107278226533128136181405670440021690889385703391488781866709126016548106939070579747117576098992359377394228220706779447361475376460634779182153078870817436657882843994806316089044877371156374764956933108009686399110354159952801071877914638008129468833129910897809624784655634766612578004309484519800013003991085235735139951451635119639008813704432054380393531786554450622153409865850256897448948031152704170233538304141312860022713268817207516719861091291449152357142927278885744260319551877513554838149764316708',
'-731315297214901799139202226642962186173776982258102506692316932763795032743292377175890156601824196328936745458544624900647832095161663496247587791976430523643899796449952629749116002156959020968317780510578493400432452293359722025285359196367572082185313124359138787551913136635287208128868743941436782673187963177174300058482024530962694729576411128199111690887381708540666199323867911914607653836035391796042056384719339544441615296482897832207995788092952960885600835804283408893971607314409051092575924442423451556806111817424915752871597371184293880821660039396769305892714235730696644882917103959109487994369840515373474703535192631359911662003579518759973386703911657782084238830285947420510116743089010517439974565215592656374774187712404786259152981895785366773522843906165969941852247976278940140',
'134588528415837658971047490199075666835983514159390616681971680164426317794252868732531422532794593330820045723106606802769644664837947203224317121164306807029000447752334411176404631986731015901307373679874408259122541902499565332320416372409756172044589603356069972918336468104222848469569332044171922438768606893049886354059429438450092278088448540986615736961184575742243334957502069493588758963135543678872507263849640682527958179823194776330017218145694418493002516852248007743753481985830130689353474387451295435005293382566297602196352356393211628524787947139580665041989232538881406837165019870948901349858097327606819982116039073752567514780339585704870050505509505256216218426474073520589165338095570821431112177942187984453099693299866831437635621848517302748465288485887387181042050531984919565966314039326910947728329217408',
'-22875957473830912158559251349753119246246028439796802316189907676257055443164950327490301280655070370706400884237611026797386817741222030981528483512198474831291362720520009743010823019749778972913806276343563388644805865738647488132609026766722479817157773855452724391231191095182981857349503286673006225897318947019340122022447099210550952673020554821684145040812316573357274661887067747296688932259213795508240113558452300792402515996550037064993418610627398498300456256150668739383384872747120275221990446608522768652036044536618045251875249988718794874912625102101906638310050673947622263770603322155777161417005867653440423144342108575510122918652004346881066456070847132919979266397792337083466690636480187634224063775252238228709568987308169158240158897515505856720403103771596160205646444883300697213872820817251033080576927509135697321215233329106330789808',
'3589904214789285404480068384761918869315288025031643288153057532554843931071447074908086375777364597702678619183887538332288430847470452127647273778012444791469468409474451624494740160128549964698187914675061260752136238626554900744382507017799761805307779682225136113403649594489191570757212667376997014713445701475742689005593760736255290065757769807448625355293886110432977294990407478106332258662633198134700047936979088736590113162886959370847964675936389208698875967627192927493287173549157788028702937490448050270980996250906060464800657700349234992558996788220044197097125909813953778354228644265668860678027657675211666863791322466803827732883569606916094015371239906736135812007615890817631618375310069832835493824353168053212807350860174519962686268038993947445302401334982305900192811360380608647169876351836071213350870612123317150854229830866789504543395008833625678886029992122944',
'-519880960318731666430752170899676999687923011737328772277171012154760408617709494489651643230230317134795813643458165671280798409467487764568260337834609879875388857280998705324361399939693570241389572752134220032855092067154745695401524070896550104999507083873790541672997884277476374108790678607914813688796265864916310482243621295926385845431074911305632755546516597507265144364486330773094771717722561193128006945058747657129516864738139958764953525270585988072193132182627105015267511014105405260622791006682971059348191231980276260514252684694437137414057994772094561461123223503768270104000134107269404230155327425764606525187765761456558872254546763623783499429014442184982711860102302038560964398967793136357782335828049076815522816586286609875139235961963707678414779338620479718331603957843322541895929561698036486356350864694867528799591755031057961849031951739529713694163603138812177986133157686015726651573824',
'69429884713385519751805503088403128841373124204648141141369557369850368626425749871309239763674129324203007485411393556740669800827041173826537358213240252978295767322831541724495231484909646017525557000915257754872590949816397791527668736709816688906128564173745358473501683791937201430965764436743805593715745195102707507491011418927738183297757701941722461003975971280206503094157086640339571802861568004509369817621968821258295937724890951314316626018408950261505815353708750916096943936090291423627820548696325157411543577774295382498366355705624347323018207984850068691801434427828466555080972199328155206204411299968928310320217415104792594608789293567566561950268093599804012282939811790029753693443241547221052604690652349153683419052611666910656948458241685482318354190774781749082096213552882969802531327789566361113175227055805942995304709347132709499451464685081831301778561849204505086398426513624087039399886290697740323118572639119921920',
'-8543394068815432991763301895204730377441561924064714761176087433415828187835828401957576566087962793744084441592642899522687675485297774268406707441844139345241926863597925100301493126461304582808193960154836831369920793072140462182730468702677668350691731033390662890450516780149634126188249753495279547823312695621054370210296296728468272959404280263030990486358925055833048336380628212992119351863937949121897311911182483670369328719059780568504856282334160434756704790900663433087715578780003018360761437438381068669811113988048911671665720416602428753820726002339833066009638607502954162251961838883804012146937019312826891273583407556902837524593671107565519084447405218842440182065641098520045668390585430020730818486725980179752178345492643732570960987728634272499990501876057731522386499062725301899266798590899663300664566445120663392552116765497862659401508620519647961225734325537451545861625438398505542059060021597382826088641647311379804097918646714609880944784256512',
'967581803550262158817935482164955136811949811524635447888347031169952727906372415527240136382291215289000434424776953388613932905490841789159652902076532524359709368803379807613404304433948716228506367021414788038155641810842356360867118461941087114325113320634236383483784306911108158042070956518697216591869161548475842987308114297120134346935509187423252488005387861165813608871165904875168924047936707163985567709604945376639246514184286633306136675521555599525862672982677230166014025232977783243089473647741874208594579084196163472874095851579200595790078948643950170916722206884845269885305716972876161098901162821790959020629419969019231951721210187359242977069077103149436431720427976051505461591513448614280827125606000321850488501711683961615922476319278142325438391009310435552202267619024958179442902293717475010767009234583199963324562799945703700689018917421300635423382707209344210975760279417669273969445271468967684121897570827045551198545121214210375660602307505320953850733500713837402028032',
'-100729401944560042968662403788161784328711120909365913662918082847787894281339591308004463475314174951192206568542399211905459633821927934410154953493019848279814461375941354231327650274343193876824539291174507790701547797761152980589416139519943258696989004480414390217542117839298720510449759239781224769103374136668394886115486939557712150814050817879966130191832802508934776540607332752870919649165358711935076270079122622421392739311787342888778377353633658029661776700540843792246404323445605147691524159271971172124033473381675466322494228394610259965787361660966938435176395344982147544728869114983482951336147065552430213998661140246713013075013990229018738036773939477628764039571656484266117812419888486241846157872248265382135567140427587825581805632560382459109325379223795244330555939470874299371611688785145489582815090316369663927406723813171281425171485709962690836826189682829097472498416111946924420015387733929223167312166445286521371714987896926589106790881992944774879802795804826772644994247261621645258958721350793216',
'9624391485665381620062003905925383858202059841614400276309628554208329968294066038142455973352511508185137796886221532601140792267497719577984290252693998764962878667726919466688085558544972875470883938831589941755036939614988496722581705039382719838502180981836514849717188677862771906224282717369780313244099458775614116495884990831026224323545753736052243919418041836107503867881344356736832391919574962524425784148394054423208444735239251403585546813070694601107220243103260584884996569307050853101493898759071106677138005963842635522409131897304479544446653761852978305129719974111559538844363974540765529172156217602706197243538565388357751724042939397905543464705139724154001242348094194170046945662384916258467706799521345632881280213524581293833496013981663445627929206770004742070975200579585344768730311788309886393834757240915239106805461725233846211051047917977639986126841271623651712673863539710981983209150974245828162132183716939475567697488281754170583353897297832680457108454412989870213540210333811434286735136137314970738552841947829387411042861056',
'-842492404626008202685319651978703524968535073885071398410419159861240869586642440539225248124224511521907172711800016984963600137199181988633107294911875912120260005015246691432361172554584819048707646136122248580162322520572746608789302989723498414737007672350147360019821312195497608343782508117815638927480027996092446667043269627852639021945145086975502630961122291921114957594542304192654666690843122076482066879573860278984351542517100147902984691032331485486348004235293968748901975358132669803180566696120863753308823809290593889373424936044813996869199804401311673361775577022817521697609162717332479288977618975264112176728661055437977771565445010309563372970595729169439495990491543574167965927591071875216493272223431598541263599435634027336365555864551872631551720258952467260781636711310327223848949805936283820428234996715477274066449157482715624374843181705444861922403799930885796437333357334418322356890504567436395379730767291497946871048337011309931082869853253739245531052661564747098296018352804417568682470998452641235722507779290076828097405133136327080632735521080965488640',
'67428024051081025925591476245915116672250518150516973741195533592281467551421485671097277700858741205095135112305648303857667018703733429216695721170757172504046315741034247094892324585188168512303931897603893342194104248514308147827527627461635056254515462642086613025038995821855526262114684371370854550443138828641381788022075434615364549597707352160350502137769784421209476085023901585775658784900209961846003234382358641149609131656852549983919010305909734772253837669487653799897740050051174257339584923095683150842090867487892050045150671143216477209891718291171092107350875437510220426311887233906513846747496502611017497551120008708664211560340552829090094255603845983533954267640938719639732716226817586766089646280315880236899473338901331129758327947908156008730096874129398308975074363744722809648716832902087049519613272638253660861524814197467763097655827179058895307228051531509404114929209526099035553896613687028796600501526245139208098418741187399499542114536918525722146057084976571872324487851375916146895335581854707635445886315884400684813873059159878187108405638401637874140607969333369323247945279766528',
'-4922292712232938264415179659464215370662711186447138425768198910030247121483908029882072055004011433976767098100059890647944529852298117601419732200032097424682192387405740406894198187920668491464621437393392891598873264668633861747789169891349134032953800795538573013156442268988900912520059500455536681162589415177296088649517794165998420636963289333446670774444146277712213720321011003242744612419123756176407637446138672858993718737850966389017732963748590744740085759179587505596534350992775130956934570094412325408058799400882668923132955060293225528852174345022305835042908880809435016692397099949056390534302548468712906792996143279259466722156845705596297223069359854714796506957214913101539973056110869430503475525888185542270940114557118860984119925177978935431895926475986669969137975754791956459436212100236925700154856698136153589133756914365450711180871094336927270341057213630888377919852900470311828485161573220784203525792104757861703527234978027851447377829854349964752576238255020757939829540794613891088029049857718719163321862163423073539963526927071471956581566465764182726646232313958522615838172067203185247844493669071017940123648',
'326862606953864243994493025571134183097005580822780665287071298443081452327938333305778294923037001048438114660846596409742529713392301897806894061265193635779528089549402883874711344165100632690980298793665147524103829415796304244737716583196489483916837646803947818365190608720226847790741849622165416960809546915823920897193659908383134985352827192072351013882126550670892040214634785767443490039675852627166097531693483669590126562310503573755513520132020598619973038320272032263539657727164546914087012099048929266257641343101555013302444544895835106936485579405990499293798698470344993537167549040994937014314157849695375247301011405414174918655019370056616128978782846799001460977274870686964948775750888536510308562913346421648132415655826398062271703664893729458073768599043232542509149429694669615401791073133350641637773170871728686027861722152104523706417394682646168856499176640549300500065095819378543943745831390812727880073391522186051220628185357000978071473952555876171101920744358523392352209875425765525843590677684939171097587062333410080731740812032283150820709437778431302084852208517279195742515252856625029333181007323666501063338993576249490385616362958684160',
'-19682387035211213376268717697596140497614877189167082614733127831934324570394405258989922416860683584536005682033669989287038178625524894503320821890768870715206162943270433905346330508212859609327521614319152979870578673868396679536205235437822587056805455938795571774651221022091758594861018067247339506032472645954149058865571209565183478642556252818177860385014727648223802030912253092284265336920379638050823223266015860719202316169187469292688078005492396279190841933920496129607288530503447126215551758467717541385666331403857069861886434654786393449205627350759445157856448608818623658216995073590007215954804254039161069877899821784190232111689738307708735026967410876100674313173828646976587680347980091053242397435225847949830410457558089691809535094405647526489373110788230979215943821142612077101128534145808110206605888000435066417917668089916668221660767875340564771757275331429557679680641720939730206657217449356154205932389369571237701004926883003166910951594087824677351974181096803598132521166375417042084428112636119358375837460531060765885259384213020828911889933371668135278800378252609635107431685796476922066486810191997741282284344241550357281661270805108535270573961646896367695988588544',
'1070896196191616316015303680542550811956468685944427279147752959700207089917239467886512325543721643587527791346056577110912090205465000338177188460206621242639700877805778391085639245027051751962578067609608064838883028145504609525149289746972047127656761492941897795020736704894189641664797500678370126521965409324351790800114498025443782175111584199138727858249334752047341368010493951409842323016676088546544793991689474544756634091541230122258607778547261020335299984724548057500336277237260048904835941603556605672655689857650228255043854665375870984289931244853156989495403955569821592574946641100063970774905280171080907471528875126203409227292007826708163452462771169695414317844882862870655701282496065187804622567500636477620236729687323288912483784380858170572808671335289416972483447428956611253614785915339766882950545554862575330994051225365318894378682856999999354232475777971260770549399842068476931010699445859573421500745202380684293064207666342069523158323552720275394062426032864783927425455942853749921648124192386697705752956368294567641004375612155549067325365942065165797146894509085566721427622373093162968167454785964097673804587221024719458421724474617577409129057409806924433004663554030358993633767616709280399360',
'-52430059743679409140676659634909812852390092094873523945855130079540208603100124764050667675099313709260138385071061185114320558001251012120505715107071166824365758539501001403178863550736750237891884813660843505882703016207987043286357156229311730033375817598336876864434515030987676154164886683762916691855328399295747666584067664532141361423157477435373821695814284089387126564933841690228449683368442396831794734594483593577310926886058161836249855118231437436455481994257071614393100018349937137181259879255514176869034252699327419860291616419754327314287400569477750039558231525298966665477015818056335710672583745829738107419558800256997628339395257921060853593232920709469076143786356306800487914547734032743358292336231324383220668604384663161930390786401257347184707660291774874293129828898450485876106212862305861283925802208659858551111895632479646232402028708952412596280056348008195418624011103914693785519747951804988282189606816419956822289634969145085721919238843836260140506046929612163627105571981450705891322328921498910093903791871600508496656039850118610420895023546271932574701958310668628346303757871656294501495833030435897959102405496357639688026053549112999373321384745256886902677570202276121782751159405161672040265376070220244756090932953088',
'2298808146237704162775202991841285877160968181269526479374190907804941917180230543235021092521412498867773867942874746516770655419397130112830454586681343448935813945935165405113807216361513255297271660852922609827373622168396392720875260605868556391334645535680959894150210630362295697494246192759052502278366332379359528977680747909852125295551196165365312670756913949745430856607248958875535770920440407867526308288783071913205162739209031358353108979950233165611262860485950149570532891962359788071268167391244916091854376717802428845605830278381486735142680827536856553047056851026000350124601048578023353228623629583518737721484612315933761498854304768312975738200612975454537672388015840777856922184871082260904384860224777194978994859428951241034398298226454314844198908619766352258525565193568811261330462000396955217130745377898223574887918140876535002483748312675074046204627575379596394249762715387636673501140888218630838424182978461143922841942672073471216774140856732909291109039943348436873688422664560438187824237183127231118504281386440712365865492849216438790191331882453906875784656976896776339339154040632428033832352990203446071023604867611045787298006536806066846512480154804723381712301663633108328784160960383304977443452224900548647662677738675890124050796868693322448764928',
'-89764146965055102531318689704130078645810100017924833554149986473785572689334408873779717673364397304584584363147500954468368007417137789542706489044506947045364009270066572399951524985318311158892430931882643516308468369682391152755238525006501661710301723999194568382314286440067994644411796872821935744987150522746995926694976867695429860277136925196871176537890811914108016080332580278200149021624815269175634541656644156351255033627460492903953040121686704923438127395963791947152241022433810149859121533141696812548822111229653769709666583071230040829532070716526804326762032792306926418825948921307006410184215690107594231221778738853375659142790616490144618201811277699914669703496507924445001840211241893198526686582040515441438279803639294019911781332800654832503396840836677009513208278160820377063302464621856828929884826658395251279496283523137610388680551676476777991448223247060184111666240549087714994640107523591332178745040634679165757616116024947162774373984684575436581915662181383565221413340783408981815284787995664282614507514434355344920962994741421721055699354893226523523921307511533094991974412986961584346996806893388994416087909522502146079704955442230192139265497335728923862066278325126685157644572386616710747172479278201537503373960766928340877690606264603725663444327264878983829050807892836352',
'3101387055850394045886286320963937312378767626799094961097275328813194368212460091987291623787465836519314060715623192018490441096629567986191654941721352766943593085918900769028976217307776069361193139639745681191802731761631450741024287613424647244176521348933611778655346588628080157610500342501530977220712021229861230921920489082248646255278655826783342849449437833655937445135679155302011883372107182393774086005651958648791440273627786779440135132988510710343194837059737131589792196284069422239481908208308503871767820354752493489450610541635448252328543631349218188851524349650451229639201708175907855549930282302966784945293114800775568695088724659466135558609225247887859065343384200448169419443209233228523570616920954484906651982653567375530587125978592375493339801144992009754458298591888515542916516319262682303174340969569875819855015406226486371875397014699879682360905015205426949366452558874582194092243141422276674528546573840716118866724308340224191959551000537832193053768339074981963186882125871123306236622710483491653349947215715245386050530456788136174057283726329003175069330595525798189282726925523621969970576675833716673399723268365115311126766318555667484439643229339562913715347243739142487430186288743474825492310836280112994329479683173386846140284782371028520865347071910185644604081809266694056245502699549121852194422784',
'-94085298232023991026638561342778912826007708853142917439390345384600757153694694775943461215262588417335977403099092701246157086023365289455092181751316912962604322686318604099401340243893813205825077092078001964972301366083930602589257655026291101116302588908507904352208253060331719080549918939011782203526254472525470455055093649120214015556700743310083109366277825364236772025093199237585322787664773343114281014638626853911445340510910080984285996554425030288960399038270123873922581021059947198671786498253169010918227014541736862334454799037014369562794236814457128133505109869590744531343796129613973544529953664287892896340633036198061836511978049018855854881902682545081391653106743972798232813483444858096768695018689617306677062892300303135825984283944149874746746244105085880987084920016285616737825893384065629416121944449329635131573275305247092738867061691465261627215003301249687401046436505703101940760055441599225812028087167914886349745544238589033353575050592347440837463921977889872136171996292972465624064692666561776912559624179260940083516841304541534744676678028677211051427575887867274257191971875176435355659001134980303988313457159000068656612466927523113502714259104279461300571665384528418285186197707793509073520124910603179132963342724164860658695630024187460441694734380851202239693993264584432383013338204684907769269228199034183391473017163266129920',
'2483159303428308030255798857519401003465923207250121542635261914104083305026932466539561230121664756724696369976685604055426706516403336059811117270535206328837302012608161192985632890627328884465858555440832811294764359506417516438882674945352044369888539430765640881965662602288338594665599298600185802514371596273456512476849397969429177038110681136849390338237656020726029989216322592905382950008530239746556747875776407100934852728410975294073431099868792784557169015028736213386821687678289560322926907402046491802490079552711448610830730000661590967169328766527928428109728218686937284657221752300087163283666228634002491770563779241827073242367597258158846486876867517307326932184640083245762963792594063977290484794328480429731999511467117498930217342626059706957135901018670655019394256619766035850251935095921944242288812081782879442354085654793310634205482986215793233959315873601118586610465988137331532741112486705454005764175420944176529667676794084457617577261688005854455357311664475486745295720581285538447323610346085104477115004729327630249300946701563030469137516701022927284978316442809657664943341669404761394343261609309469469637121538836363538136777457716645757515853870562797650500498787644577169151312304813272876938975139656519840728309042102597748360849175561774982682137868281261628014720723227162038287041341076132008229733978552572472247982833659509711764936692473486295669774745600',
'-56383806046529719497392395069368405368335079074375460036627488815914081771453582218090786630788151937744595768477116789346568569455772688441998290421018309800375924477715400044508822099881856818616791178697273998221458995248496739417706926670770306173022697981054513448163923507013658120330826580435428223480397277711069662606717805799800606121763453609654318953071590072773024016145710129349176140137679993990747703762909969407333640919904043414097038159981908135119922130691019972296207736476695425656771627966605477162412154123386042314645478599463773083426434855366069654054923823277803114973766877578434517976722620759363681976082621900195932887462229246120073419260972816009366439375566594144521111383145646544273997453372215293467297011588167570295863370934450132154002869588015963973307492599382045997635062931381740270975009297092732421698272992459024080250059470732719069835259012303656811020427669357440654578302803696707495094952987224130289689965552412720884454762082855262915801977675113343993058541683495309349258022641898885735097161824729982180896329577536044340638369476558343993576768194941151754019471891531705964325664601995671142855482672477747970178721281852126567569384910344637052747142352125110512565051217106418692460250233743745250618616548756468526676899389358190257957140992640020738964209392812142529008610226657929392304982912839981435584871823010976539956046911909942839007919214075844092340867086241759232000',
'1086365027808886102014589696005353914083579856369954148236557313039252502140171055400084359917543910779238965889757647791785535536343939562796453639996397838015616263695582657215072618792249888967918564010359155282389917530249466346840090170465263735483024030260844825339215129639322522329182506210832823400211685840471671016409381596916990485754277244565843367092175814316545635870786662789360168214936183470356890532060964630585779203640673500670879776498484186894185198699061245385901073028902964475787262733772893938867967623077284331755450480866082217027501886969275068032255179048014513012499420162871786017388890985042115846964028538652035520798559268621953994162744547404723663074457520522967109735095703333438379735776593749742810579542855026676866089305893352309258956289455303279193161353568788148895020167454857631241032320016335444414434022268533626214478549872887831630574647814741363124756990556501618237909682148068507279969424233375172420485809263802738451949875308655555378671573186215057614883813582324382736180655169261238190053487985372706589581380154536455613408282673776950761918507853061476632432839262258560907067733516041297963653157143567877857291245114677729404113721619166277174944822777037128576118014535447849137402049361304134350560490037515171622572349124214985644299032584270444619174908700201364088429894683808135932932733926017773050372363781145946739421149898858061386037391201206279061156076438083925599228994462189080970799349760000',
'-17453548902347080773532830854944826720012523672095589406550184448039517821886938862323204019049037930279193654740245465440362657014722075896879547950884515763389662868655628508645427188998279244385691099765948899335776005690882632406228422486866601653671223753388048773984689650179331204240743537894926189401489497226932313263772589077145925658298416209547698725477740126772433432910887423218615197346496745092524875343353112308284620618799314805877426705003947717708982593566429729094816980283919841589983328467205704752752105496239031209558272353724871847185271113905988808692327913670791549820856348449058162882108258259146342373496279605605607721276275834399873947654169960957132340549211285306347325804110491614150546418767684186653068747084959555194060437291422404165521947229305570922943902711172364431992271394553178315566079453436354750202433820953380068412501261327960232068204196981149385116347499851975258792071436634875105528662848511010429236085703958650441914344230089982051688894395805760011013527050879734573820536364566034616112568913604787061109766594456239268456487768590798682613716777737910147994212294517424048471466424595776032529685148203945816803450935220294179678878492336773115633410576149170458400748661225883674575666337268876737913862765668539325996377289003855387759513375902819197114145573726435293527283516895248087715175099630509802162954544871450886490246145222106558344703437015029237352265163635634942759844596193087978868254060936647259147372368226575974400000',
'228554439552547538793845767488064144178464811441640701194117533138183787958040830312254778889138326518431198713160701718188943070110608104690437142293867545697588227228971408937320531577068079733610634864563939499553030525765610347225084626662841210558103212505892740071833043207018086176703749314700389728186400123433747201657899831820301686794271561630031578011549287970011602447899701921474111882832795117107782030011074881928455591531892438409096689812362361759684143114759051193012336875163087613632029490154122175274869031796000849213551364299478028072182868962331629082206923303524084341548652451527600624236397714103295954392094384055936732251290904372532544033826019641455115555473620611358208607752583172108725414334314119650797042633182350911326595204064493523125683703645815990491106469968369266626477129481257262962944926159801160317182721754153056907639207102081699262085371288034839656132396984946562845066016136991097336872112164035446369563946604866694075548316302934128649664491625611216571996356377765819327793071831523023541836335548048082657734234944210469558017478229408061010827022866922824809834022757340041370211347744777061998016297159627890676395703874911202426796187720045579182995046989048144504711949075302571574714127634701051122065323481755595225273717648153672748534126806161994568552650432862555817636317666251235759835429853222075610931774793503047852737929199013894292193861628426807126205968148161829446857812751774391386961200245947566714893330865523031630839914735560047476693008384000000',
'-2365230749069050386183195943212625587253244627405605471938496621261957358153952871446831600497197043206074581355340739444000393575479372681779616275555600811069031650581155007160553803599458831892201926628249531571783627893171954591070754800822781383520013084463767617694371680096582096223272019311805659460744637224385449192062792160913025662401140903488647824836714083423020847532256236353544153280806089593262738424382816664976158829062490263842105923757836680157651315570988602434991751320397553430510721135786300234955423101511849016163177963954730496429707114837318075538056695470012409807881606768545489402769136583862919462363014234806396982394927468288116456205912188393247661213162625237166438594713217472488609523463609904808726365980934915499660598573205101837852497327308812258384804597775473214426819436932833782134834148443510677397556748228033457560305517103930302724785905666512263951042779019259938376144303721810797181202219808459500786573770134358984056161356205444572641836614438504598043182662283186173101604195431814860973390681745868577689678267042998948076919868407363239926022089992188721405386858465485138417165908019102712668590379331551302843027519644029398693453837326312613473169518189220634761582349425940018054469875140334926842870740031963163379090699604698730151637063518951656080129127942801683949057275226861744957448535538274660205730669168037757869100638004771196035810565099099057572692677519948927555892967462472331227447609496832531638469944861299580495407920397374991659545740972944818458735756973053050880000000',
'18504268060367545520156248241454152437208631807825182005805030829613581005388775481426159975440458222696584450294931162422307106415540842603149605194226013205634246197203433205204600727718868827717140561535046012446350593843794552212726509297025941615079073006165520140046738551994996335374694603136652452362983820068967682427863398809165516711886264493979843758652288450431902964719244470442319974896964996498307540326804914560432063251256312087295655375193820621380962214245075250456085226294391678582761152649164565962208941329145916382600021594769627147391265206630367063479070025330564698284954690109012370070235727971139834110159728308240683264011809230698296057789430387291736780250560252558137239845978682901847318680060256885027610042081378797294181496686122260580180384416147025296562737411061739049223693001417716277169383226377360900102845327098352466332987677252081521390317992864607298321546222956478634155199261760556249036888710817066095190814289130990203522027602224037398700655105105548352256265705954658978269632681722523524685256567208794043590190011648788489861480515925779227249332898871442225856750875743218985870129874693132386698442020534348416103919136857402734497622686356673649682513545834175474951504421735153617122761759762220467375362243303824773773470825015619990822664322528569334897892520585435842967548179595059900349236774659232367071612022575204549549838114608328889701644653737153174918664269323168216991405927885492465220224120987821760123567303202127510229471382014463382618058197052426213196807929971205461950222334672100236042698752000000000',
'-102121300755872360390208326811707090084335431604557899443506790316931626951749757797449761272784309063471713606828014498740289842211205757187905425703704061744988443406555063712463437005322126450199567186081982371706502151163754289775034047975819246470589143074462821608970127353892751214256246591867228717637962420547955741251833171663203326347982336417835621377390769522787339075983660540245492035190655425938973988765913847064078720962200163253305605114100919684472091839973220113684418720083297265401251182934507745510082647412397170022630591186038261050782328251661145146757379730320402314768260480401186118594336908979252733787412431686964899923860471616130579255885358700738930544443408173166236497698601229710438416168438425154633625784485923614123522114245893849576448338022972339633576717390586164578897016597435098541431642860383656423591427330021683383803533446194923813327186285271705421374451148644420579035462431976573303708726713981747400861155121165285591223730344569268843772554224527988022666553794184431316023760215145255346049989552443260073374417211020650993594935391173971371828348060343361674378235103961631597043616279026504493671028966229410557314854358963845071223755766001310269948822071830485295567029644522007420347742147833638112806209902490521955423494680722920418828712835218554396392781425068492015814462488967486048512951545141636722408435930317881315500913841984405777257113371671375212618719752492783947786665447073883989908185614727466602131041007494049733698882501158821854601665165210896734784406263133771450020976748859757745255138953237686880233217204445773824000000000',
'351111016475209195283766900843919440095624146556789122173523679349777966299643262946911486441519899595836313206665259188334489481386811669415613061633330336546462001623033550279766276811907910101756125184724147526962664068689856292543312405131873200144379159994702985482614164400601699293080559337858467655741887822809519560990775682686994365707247476706450961807632248346673489553887445267552391456241718215120101212961220576031121965284982741470353368709247378580638477508361005159120419979700644961410326722640681867856229412089253365822054781566178423062172588554088300864113585701738400052437208816988111981193546868281391860489532781363879032310591753437912409827015561050041957997206729821630894825811925444451854437113982292632688790960480604835195133628565655076586738546361711654366224700348047604614854859949188538174522057239370067864771855321705968996947970552064003410336336258240895534618017418772953674569392712141968876427185835028862214313429418848062095857874923854380237004131047921592299908449452430654881715883942437341771285024408919750090290109166202309575462048068748117628665727373204753592490198989184287908129443020777117583750057658261198289236874019529149447754905177113223302118360669904357619810322225390384715100689690639574952027705678871956881449393033655215738140965418231063202587266638122875867766138043116514847722041943522616825697504190117825457161727855692529260788226397711668588029479351373533996724814248169140806230517331199950259670563214321827185682789009620346593802377537571368034041415448770697066294697590423567593434009919942823123585140241166847349494120452006391879355596800000000000',
'-558796808323730669319556209635783295834885620059919926374094337704783159717074271411836333134523665196320389949347494772111894391675686207325966425834299960704067893587399438455588798256988677645323754039263287748208073986571463630315463528160656994318592529984130595009567451280996658400048531364622161695493916339147237654817684252769754893117909700442127196991419507042220993245901638767780155169618789002876156225189025005435074977599662688324284914356331507363920217213649363265471629867298901042969782051702048331205489077043036293034833278445116394956666071142647788227115267116515688528503660439942039494813585601143257498959633094600747201884245253213502219269954196213677360969825422781823842862748418879041080125872976097659234935939843831969071868329828198543934025101026210448471222980313395095525993255690522050851267688859400798423662402460712473293804031118694749895794657538247539078212884158148374742509871449405839026122122675224588400629340169111504042885900750205878286033379426390866888430718628034165311726393903801759108001438550475452538760373040235963885593125407487287825497248553858899433281347776274390966255070668382409772465963176385751904286316639716489828285928978635855355970747105034388038350319447352538261087880109718552603329805296866567042793649019459534848470724032360639799964633748905196867853384109201940701530483598626465550495679048159865753998874913787925000267970891083136549937685688617570022717038125536572098179693557126646776084768401508922196353445609647520847478177415121380238111178597227153627832257799928795216823511402005832836435952524795942215581962882377976384250201837108076812047801647103999999999995081']
a = [ai * 4919 for ai in a]
flag_str = input('flag: ').strip()
flag = make_correct_array(flag_str)
if validate(a, flag):
print('Yes, this is the flag!')
print(flag_str)
else:
print('Incorrect, sorry. :(')
이게 복원된 파이썬 코드이다.
뭔가 엄청나게 길지만.. 하나씩 살펴본다.
중간에 a 배열은 들어가 있는 숫자가 너무 많고 커서 앞으로는 짧게 생략해서 표현할 예정이다.
우선 코드를 실행시키면 이렇게 나온다.
flag : 라는 문자열이 출력되고 사용자 입력을 받는다.
틀린 값을 입력하면 저렇게 Incorretc, sorry 라는 문구가 출력된다.
main 함수부터 살펴보면
a 배열에 있는 값들을 4919와 곱한 뒤 다시 a 배열에 집어넣는다.
그리고 나서 사용자의 입력을 받아 그 입력값을 make_correct_array 함수로 전달한다.
make_correct_array 에서는 입력값을 ASCII 코드로 바꾸고 accumulate 로 누적합을 계산해준다.
그런다음 그 값을 69684751861829721459380039 와 곱해 엄청나게 큰 수로 만들어 리턴한다.
그런다음 a 배열과 큰 수를 validate 함수의 인수로 집어넣고,
이런저런 연산을 한 뒤에 그 결과값이 241965661 이 아니면 false 를 리턴하게 된다.
그러니까 다시말하면 flag 에 들어가 있는 값들은 a 배열과 poly 함수연산을 했을 때
24196561이 나와야 한다.
from random import randint
def make_correct_array(s):
from itertools import accumulate
s = map(ord, s)
s = accumulate(s)
return [x * 69684751861829721459380039 for x in s]
def validate(a, xs):
def poly(a, x):
value = 0
for ai in a:
value *= x
value += ai
return value
if len(a) != len(xs) + 1:
print("len no")
return False
else:
num = 0
for x in xs:
value = poly(a, x)
if value == 24196561:
num = num + 1
print("yes",x)
else:
print("no")
return num
return True
if __name__ == '__main__':
a = [배열이 너무커서 생략]
a = [ai * 4919 for ai in a]
print(len(a))
flag_tmp = [' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ']
for i in range(len(flag_tmp)):
for j in range(10,128):
flag_tmp[i] = chr(j)
print(flag_tmp)
flag_chk = ''.join(flag_tmp)
flag2 = make_correct_array(flag_chk)
if validate(a,flag2) == i+1:
break
print(''.join(flag_tmp))
코드를 이렇게 바꿔주었다.
먼저 a 배열의 길이를 확인한 뒤에, a 배열의 길이만큼
flag_tmp 배열을 빈 값으로 생성했다.
validate 함수에서 길이를 체크하는 부분을 통과하기 위해서이다.
그리고 flag_tmp 배열의 첫번째 인덱스부터 ASCII 값 범위인 10 ~ 127 사이의 값을 차례대로 넣어줬다.
validate 함수 부분에서는 value != 24196561로 되어있는 값을 value == 24196561로 바꾸고
num 변수를 선언해서 value 값이 24196561일때마다 num을 증가시키고, 아니면 false를 리턴하도록 했다.
플래그 포맷이 justCTF{ 이므로
만약 flag_tmp배열에 j 만 들어가있다면 1을 리턴하고, ju가 들어가있다면 2를 리턴할 것이다.
이런식으로 첫번째 글자부터 마지막 글자까지 차례대로 알아내는 방식으로 풀었다.
코드를 실행하면
플래그의 첫번째 글자부터 하나씩 계산해서 알맞은 ASCII 코드를 찾아주고
해당 값들을 모두 모은 값이 플래그가 된다.
'CTF > 리버싱' 카테고리의 다른 글
[DiceCTF] babymix - 리버싱 / IDA / Python (62) | 2023.03.05 |
---|---|
[LACTF] caterpillar - 리버싱 / 자바스크립트 (66) | 2023.02.23 |
[JISCTF] REV102 - 리버싱 / Uncompyle6 (60) | 2023.01.22 |
[JISCTF] Baby Reverse - 리버싱 / IDA (67) | 2023.01.17 |
[PoseidonCTF] The Large Cherries - 리버싱 / IDA / Pwntool (48) | 2022.11.12 |