BUUCTF WP

WEEK 6

从0开始的re学习

  • BUUCTF WEEK 1 RE WP

几乎AK了,没什么好说的

  1. easy_Re

签到题,点击即送

Ida打开程序

即可找到flag

  1. KE

看到标题就知道应该和脱壳有关,这里先去使用万能的exeinfope查下是什么壳,查到是个很普通的upx壳,直接使用工具一把梭脱壳,脱完可丢进ida看一眼,发现这里的str1是程序进行判断的字符串,我们对于str1的操作只有加一,那么我们去前面找到str1的值再减一就能得到flag

  1. Segments

不想写了,直接shift+f7得到flag

  1. ELF

Elf文件粗浅理解了一下,大概是Linux系统能进行阅读操作的一种二进制文件,把他拖进kali里运行一下,发现是一个让我们给他flag的软件,那我们大概猜测就是这个文件就是让我们阅读伪代码找到判断值的一个用处,直接拖进IDA F5一下

从correct往上读,s1就是v6先encode了一下再base64编码后的字符串(base64_encode()函数需要编码字符串以及字符串的长度,所以会有v3)那么我们点进去看第一次encode是什么

发现他是将里面的字符串每一个和0x20异或再加16,那我们直接使用cipher——text解码base64,-0x10,和0x20再异或一边就能得到flag

  1. Endian

直接在IDA里找array的值进行异或即可得到flag

  • CRYPTO

这周时间有点赶,密码只做了一道格制约的题目,还是记录一下

  1. [羊城杯 2022]LRSA

import gmpy2

from pwn import *

from hashlib import sha256

import string

from Crypto.Util.number import *

from random import *

from Crypto.Util.number import *

import gmpy2

from flag import flag

m=bytes_to_long(flag)

def getPQ(p,q):

    P=getPrime(2048)

    Q=getPrime(2048)

    t=(p*P-58*P+q)%Q

    assert (isPrime(Q))

    return P,Q,t

B=getRandomNBitInteger(11)

p=getPrime(B)

q=getPrime(B)

n=p*q

e=65537

c=pow(m,e,n)

P,Q,t=getPQ(p,q)

print("B=",B)

print("P*P*Q=",P*P*Q)

print("P*Q*Q=",P*Q*Q)

print("t=",t)

print("c=",c)

题目如上,引用了一堆库看似很吓人,其实就是我们常见的RSA,其中多了两个2048位的素数P,Q,满足p*P-58*P+q=kQ+t,h1=P*P*Q,h2=P*Q*Q,这里我们通过gcd(h1,h2)就可以求出P和Q的值,又因为p,q的值只有1023位,我们不妨考虑构造格[1,P]从而使得[p-58 , k]*格=[p-58,t-q]

                  [0,Q]

解出p,q按正常RSA解决即可

Wp:B=1023

h1=17550772391048142376662352375650397168226219900284185133945819378595084615279414529115194246625188015626268312188291451580718399491413731583962229337205180301248556893326419027312533686033888462669675100382278716791450615542537581657011200868911872550652311318486382920999726120813916439522474691195194557657267042628374572411645371485995174777885120394234154274071083542059010253657420242098856699109476857347677270860654429688935924519805555787949683144015873225388396740487817155358042797286990338440987035608851331840925854381286767024584195081004360635842976624747610461507795755042915965483135990495921912997789567020652729777216671481467049291624343256152446367091568361258918212012737611001009003078023715854575413979603297947011959023398306612437250872299406744778763429172689675430968886613391356192380152315042387148665654062576525633130546454743040442444227245763939134967515614637300940642555367668537324892890004459521919887178391559206373513466653484926149453481758790663522317898916616435463486824881406198956479504970446076256447830689197409184703931842169195650953917594642601134810084247402051464584676932882503143409428970896718980446185114397748313655630266379123438583315809104543663538494519415242569480492899140190587129956835218417371308642212037424611690324353109931657289337536406499314388951678319136343913551598851601805737870217800009086551022197432448461112330252097447894028786035069710260561955740514091976513928307284531381150606428802334767412638213776730300093872457594524254858721551285338651364457529927871215183857169772407595348187949014442596356406144157105062291018215254440382214000573515515859668018846789551567310531570458316720877172632139481792680258388798439064221051325274383331521717987420093245521230610073103811158660291643007279940393509663374960353315388446956868294358252276964954745551655711981

h2=17632503734712698604217167790453868045296303200715867263641257955056721075502316035280716025016839471684329988600978978424661087892466132185482035374940487837109552684763339574491378951189521258328752145077889261805000262141719400516584216130899437363088936913664419705248701787497332582188063869114908628807937049986360525010012039863210179017248132893824655341728382780250878156526086594253092249935304259986328308203344932540888448163430113818706295806406535364433801544858874357459282988110371175948011077595778123265914357153104206808258347815853145593128831233094769191889153762451880396333921190835200889266000562699392602082643298040136498839726733129090381507278582253125509943696419087708429546384313035073010683709744463087794325058122495375333875728593383803489271258323466068830034394348582326189840226236821974979834541554188673335151333713605570214286605391522582123096490317734786072061052604324131559447145448500381240146742679889154145555389449773359530020107821711994953950072547113428811855524572017820861579995449831880269151834230607863568992929328355995768974532894288752369127771516710199600449849031992434777962666440682129817924824151147427747882725858977273856311911431085373396551436319200582072164015150896425482384248479071434032953021738952688256364397405939276917210952583838731888536160866721278250628482428975748118973182256529453045184370543766401320261730361611365906347736001225775255350554164449014831203472238042057456969218316231699556466298168668958678855382462970622819417830000343573014265235688391542452769592096406400900187933156352226983897249981036555748543606676736274049188713348408983072484516372145496924391146241282884948724825393087105077360952770212959517318021248639012476095670769959011548699960423508352158455979906789927951812368185987838359200354730654103428077770839008773864604836807261909

t=44

c=4364802217291010807437827526073499188746160856656033054696031258814848127341094853323797303333741617649819892633013549917144139975939225893749114460910089509552261297408649636515368831194227006310835137628421405558641056278574098849091436284763725120659865442243245486345692476515256604820175726649516152356765363753262839864657243662645981385763738120585801720865252694204286145009527172990713740098977714337038793323846801300955225503801654258983911473974238212956519721447805792992654110642511482243273775873164502478594971816554268730722314333969932527553109979814408613177186842539860073028659812891580301154746

N=gcd(h1,h2)

P=h1//N

Q=h2//N

M = Matrix(ZZ, [[1, P],

           [0, Q]])

v=M.LLL()[0]

p,q=-v

p=p+58

q=t-q

e=65537

d = inverse_mod(e, (p-1)*(q-1))

m = pow(c, d, p*q)

print(m)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值