2021强网杯青少赛(qwtac)楼上大佬ddw WriteUp
楼上大佬ddw战队WRITEUP
- 战队信息
战队名称:楼上大佬ddw
战队排名:24
- 解题情况
- 解题过程
01 签到
操作内容:
下载附件,打开运行拿到flag
如该题使用自己编写的脚本代码请详细写出,不允许截图
flag值:flag{鲸鱼带你进入鲸奇世界}
02 Lihua's for
操作内容:
RE 扔进IDA
下断点,动态调试,然后取a数组的数据
写解密代码
如该题使用自己编写的脚本代码请详细写出,不允许截图
less=[0x66,0x6D,0x63,0x64,0x7f,0x64,0x32,0x36,0x6a,0x6c,0x3e,0x3d,0x39,0x20,0x6f,0x3a,0x20,0x77,0x3f,0x27,0x25,0x27,0x22,0x3a,0x7a,0x2e,0x78,0x7a,0x31,0x2f,0x29,0x29,0x16,0x40,0x44,0x45,0x12,0x47,0x47,0x41,0x1a,0x54] |
flag值:flag{a41be465-a50f-4124-b7ba-2766aff6baf2}
02 Crypto2
操作内容:
两组数中e相同,n,c不同,求出n1与n2的最大公因数即为p,之后就可以得到q和d,从而求解m,该题中的flag为两部分,要依次求出再拼接。
如该题使用自己编写的脚本代码请详细写出,不允许截图
import gmpy2 import binascii e = 65537 n1 = 20663949646446787716947370247427064802032290773674573417491154934657966734874241036307633567695175131014840617208051931753476223149652427133485160771068994073566431652969243962290116898345337189704974833817335135391974497754670322430159624252007005736522065638860351992074099453212550475552692645688800084354832716662142860413158369020005830095049988807931794736876563293916525328174812726514626029103506607813186690909585870115364600969148482617083817273910020722354923244093624032174432568413187131385994452769295894606345768596899824635672699945050103814681553981019917552667794514804359500108947102234376726009329 c1 = 20522772249591436865905796103232542494211695376973377722875606678999899690405480809231671346489821878050354380591999935960795888483664473952207298504196203830543208477229162177648586683957831016664569242538775928728009699300145355818417233892295367828930893733774091897666206696635744262884229680137381841581000794056156842812583057103472764486608022028638288161256424936523444974815727764620634174112474612238992061186937613171878635903455700636894570504376153482600057655480654731180740098435209814585459376319844315388048636156465832997913885636776523217188604040216732137108997444787157007665652718553013424347649 n2 = 23260834024376640092536888922041147168387702014814910549469730354688848760379274203088716649609675449936234732528778557041701524981200368996310064584479657042098426164366286670115392015865853892816983885530312074073396422301009513106258655315791720535737587913264728919869055970993613641008348186263870234072422880033882864603438907070864271470483691729705421547143623305055532339107777314310976947392833395180922324243244784018964736826235018388498516438612962123562977736924674510730898077787055367234786519915374446506561992135856904927351307275140543635152771670410211235702283822782412971646092584646758107766061 c2 = 18715009944766815149492560645051626329204114049927707292306481018724323433701970253541495090244787378826569549885480491764057526828531429033378143426272248940256432423939977805246742287886281853484696625486522535042794403288199393432900065504766428665320682811338887618389589263597065738414638013423594446322359052784842619755053094028050245325637698678444632860097510081832077842610716042473697478416213915805481704537884611126069907812621750817901278803326304784057145916721693930579344441283586458621033705530309835431139751025999089707480829034535026967779441379062426254038310930863215188888662357133997908688736 p = gmpy2.gcd(n1,n2) q1 = n1// p q2 = n2//p phi1= (p-1)*(q1-1) phi2= (p-1)*(q2-1) d1= gmpy2.invert(e,phi1) d2= gmpy2.invert(e,phi2) m1= gmpy2.powmod(c1,d1,n1) m2= gmpy2.powmod(c2,d2,n2) print(binascii.unhexlify(hex(m1)[2:])) print(binascii.unhexlify(hex(m2)[2:])) |
flag值:flag{afb1e6f2-9acb-efde-ad7c-246a99d8f1fd}
04 Crypto1
操作内容:
e1=49
e2=35
首先想到了共模攻击,但是不满足gcd条件(e1,e2互质)想到可以将49,35同时除以7,然后进行低加密指数攻击即可
如该题使用自己编写的脚本代码请详细写出,不允许截图
import gmpy2 from Crypto.Util.number import long_to_bytes n=96722669749951212913756678234358651184134068407812470434435916603156818917545841439779031943800634250032106764154804309935557678512858630048212204696471487762160744924838010746445510979202735123140536599975731157563069594497905809587369126155476201977830809090473053692189364335223367147692962090288185113654598050169422517553085833257142179937154768657039042632343562454149914801329414293361879935460883633117988279426277638667508115319494914342600199690237441851088350726869553691992122821267990343643644523989413546160765907845604067031798179773495433134648132709349683621175243064236059479837244518879574919017301667066698329442453248971033564328161407342561250703168154214939772631586519304164853651 c1=66738113223447221430009739914948303261002811553064307532926788024694319846909340806982708347904688420671656410554852340732395818007063648478593071665936277836988050526188064146099581039172667768507259894363266310279948729552649788129953872816024709989260060633285022337107662251504618369065597018450927041881262189584381809106166042131798086882746986243210896131714227544235843922107304728228549916171484199199612243776469423359120753888158616202476325705252715374109256790899923317253605743212561589807498078080069511918514647943399566630574192829185904868376879831247378819590121286186417825591746918495311372015707767009078229770450338244309693800180936418605756818618708750868807720566288044943952844 c2=88330949146651042517337653740810385187361689012501792799900873279978736035790659211001047937337215121948527017022967642906632732136313750277237761910710915459733551421653259986088596828049455592613225962133163865584111828012197112528645520371075411167515961263199635568730334149461654340122507778194391601956023625429418297129608911450200836427221311442323768087256798964844787274408624548839536279704401007441198390922847003287643673183230633728790263593607595427088882078742699027563601046309308221108391158848644822374865676056755011459026909057983805069264236657111115914570543103494726584296335044897998794251877515750910330960179539465060133592380802344398038815679281272098815068185059127533110716 e1=7 e2=5 def ext_euclid(a,b): if b == 0: return 1,0,a else: x,y,q = ext_euclid(b, a % b) #gcd(a,b)=gcd(b,a%b) x,y = y, (x-(a//b)*y) return x,y,q def same_mod(n,e1,e2,c1,c2): s,t,q = ext_euclid(e1,e2) m=(gmpy2.powmod(c1,s,n)*gmpy2.powmod(c2,t,n)) % n # 大数运算 flag = m # 爆破 i = 0 while 1: if gmpy2.iroot(m + i * n,7)[1]==True: print(long_to_bytes(gmpy2.iroot(m+i*n,7)[0])) break i += 1 return flag if __name__ == '__main__': same_mod(n,e1,e2,c1,c2) |
flag值:
flag{8ac9f9e3-82ba-ff7e-ac7b-235a02d891ef}
06 拼图
操作内容:
拿到附件先解压,原图先不用看,直接看分割后的。
因为分割图片,所以我们可以通过时间排列 (分割文件的保存的时间排序。)
可以看到分割的顺序是从左到右依次分割。整理含字符串的图片。
整理出来有如下片段:
能拼成这样子,提交该flag: flag{Hamsters_are_so_cute} 都提示不对。
发现了这个东西,可能是个感叹号什么的?还是i呢?我想了一下,按照英语语法,i有点不合适。
可能是感叹号,那就交了试试flag{Hamsters_are_so_cute!} 发现不对
但是我发现文件中还有很多没有拼接,比如
试试多加几个!吧,提交发现3个!就对了得到flag