| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 一……二……开门!(CTFshow挑战题) -> 正文阅读 |
|
[Python知识库]一……二……开门!(CTFshow挑战题) |
这是在CSDN上的第一篇文章,本来准备发在知乎上的,不过想了想知乎还是放理论性的文章吧(理论带师),先在CSDN上放篇文章试试水。 作为学了近两个月的密码学大一弱鸡(现在应该升级为大二弱鸡了),第二次写挑战题,没想到给我写出来了。题目来源于CTFshow上最新的一道挑战题,昨天刚出的本周挑战题。昨天yj巨佬叫我来写这道题,我看了两分钟就知道该怎么去做了(小吹一手),佩尔方程直接干就完事了,事实证明也确实是这么个东西,而且还是最简单的一类佩尔方程,佩尔方程详见等风(本人)的知乎。要解佩尔方程,关键就在于找到它的一组基本解,如果d比较小的时候暴力去解就行了,以前解过的佩尔方程d都比较小,而昨天的这道题目d达到了39352。由于我的错误判断,我错误的认为这个d暴力去找基本解也用不了太久(实际原因其实是我不想花时间写二次根式的连分数展开计算的脚本,当时吴哥找我打球doge),然后写了个脚本暴力去找。本以为最多一个小时就能跑完,结果事实是我从晚上八点跑到第二天早上十点起床还没跑出来(啊这),于是丢掉了拿一血的机会(本来一血十拿九稳),无奈只好写了个连分数展开的脚本去找基本解了。 题目如下:
图一为题目描述,图二为task.py里面的内容,首先我们一看这个题目需要连接虚拟机上的端口,但这不是重点,task里面的东西才是重点。 分析如下:door_sum函数给了介绍,是求等差数列的数项和,其中l,d,n参数分别代表首项,公差,项数,然后题目要去找一组n1,n2满足n1>2**0x1337,且n2>2**0x1337,并且还要求door_sum(1,1,n1)==0x1337*door_sum(1,2,n2),由等差数列求和公式,不难得到: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 两边同乘4并配方得: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 令2n1+1=x,n2=y,得: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 标准的佩尔方程 为了找它的基本解,首先我暴力去跑了,跑了14个小时都没出(麻了),暴力脚本如下:
与此同时还有yj的电脑去跑:
同时去跑,因为有,所以x在模d的剩余系下有1和-1两个解。 事实证明这还是不行,所以今天还是去写了连分数求解基本解的脚本,脚本如下(Python还是爽):
运行结果如下: ?于是得到x0=2662019309411216232806345449321879270495478346383, y0=13419236180444562206941613278603693768762410762 下面的步骤就随心所欲了,严谨的话用矩阵快速幂跑跑,像我这种比较懒,不想写快速幂的菜鸡就递推吧,不把所有的项都考虑,只要找到一个就OK,求得一组满足条件的解: x=86833700586376516456658084395568955558341195849330843437290243943433685582766187840375858252210187345259800549272487238934577083568752437187617662098181754495075281250131821716251733817147332846402906297424592418285902019756902324672317442322524112732994577163267082831296415472729766517925315817401314480929828509601608585744532858031984268463110633085136387648024814370626718954301394545784438898206086544081834091734286315786256695053535379374673806866244693343668079563272494972269536714511170482023517803868922152562345195454956008001647260527245922933196686086999500184505430243498535060316292085767447852616873123329289774398435954269820997449955307494326829275252383025841325816317692892824162659577350508400045934490431632235190460549786918710374565221592688808116023820553436665037362924366410029576788433346469810240393555723980886010788885622963733966368850968194302918071030482441523960813917820046688022678735104317197604897348123674277644014182770875920834695400612296311924763644886263620917325164182350649646441081380911846495072251331880092467404679199814209399642000934350331668435845236846475332527206538251403295936486101218504731986957606951756215164378679804203757336905988601971816872742685933232282803376534048365300554095535810116951870810327994361864819207035544826639136297347820463121132858680322402698795165424804679705167190793355415172852624711118005382368778393373331664343235550614095357385626663082879314920059902311931327057404579235637413326436611289952165300767084159715742615846668676510896992541470470086537258582654977 y=437728581633888083858367708039402756852498450186346504287722745899153032175779500808848091558764833771169119679115212554825697413030945023488837698382386967940864893879412228700594064548210078856172139547833235593433623616688362493444913792921648804702573282835418230296000408139179746088624888318482906160498108665924314585699958049437764499638149841476435645577101983286191278391160407094500616138025000175456844226099999033374234681531858016611100810921938392423128216297046747192551275204072364252078277571581274905065508718492837730442584268519681924118338446004556316836129940397748419559881614152973377746555141808764702747159920326844368385784704080323477358881772508871339145032544583444571293688936609843751507863552892576772497249081692913534461081970619431934383086765847740311292143030313634923461678760283790360347600671319569610127023812773184017905938569649904698501326523072573744306454272283590816590801002940408812876020068645981185363631818918606191899175312518465368170838189037599964523441562176102935185563310228042500243230933439128271816229498171417596704624509953680212342916187683448393839058416988090110870447197681608420719687753758226190932683407130755479603553467981551844338325495066313986660337619634949075523130805868399920303791099750919777263143810170383413035808597258448621121177970762877122582564518596064644675361859064651795644608669190087229267761249645779050067172167506433696941258142174063657680752820232826728374450141823859534725454998696358188243228630624847723887424493071837795193327664135694772817931788992 然后n1=(x-1)//2,n2=y,把这两个值输入端口,得到实时更新的flag: 完美谢幕 。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/25 14:21:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |