第六届全国网络安全技术大赛

Re

free_flag

先用IDA看一下,发现。
在这里插入图片描述发现让输入俩数,让输入s需要等于11337.再输入一个v6。进入一个checkpin函数里面
在这里插入图片描述
可以看到,它比较v6-1位数。
在这里插入图片描述让v6等于这里的十六进制的数flag就出来了。

Misc

RGB

查看给的文件,发现只有RGB的值
可以想到用PIL画图
在这里插入图片描述
先将文件转个格式
在这里插入图片描述
然后用脚本画图
这里献上大佬的代码

from PIL import Image

def Crack(n):#因数分解
    flag = []
    for each in range(2,int(n **0.5)+1):
        if(n % each == 0):
            print(each,int(n/each))
            flag += [(each,int(n/each))]
    if len(flag) == 1:return flag[0]
    else:
        choice = input("选择第几组(0-%s):"%(len(flag)-1))
        return flag[int(choice)]
def Paint(X,Y,listrgb):#根据字符串列表画图
    pic = Image.new("RGB",(X, Y))
    i=0
    for x in range (0,X):
        for y in range (0,Y):
            temp = listrgb[i].split(',')
            pic.putpixel([x,y],(int(temp[0]),int(temp[1]),int(temp[2])))
            i = i+1
    pic.show()
    #pic.save(r"C:\Users\ben\Desktop\flag%s.png"%(X))
listrgb = open(r"a.txt").readlines()
X,Y = Crack(len(listrgb))
Paint(X,Y,listrgb)
Paint(Y,X,listrgb)

在第10组发现flag
在这里插入图片描述
然后自己直接转一下就出来了。

Crypto

RSA2

一道RSA题

from gmpy2 import *
import random


def generatePQ():
    st = random_state()
    p = int(mpz_urandomb(st, 2048))
    q = int(mpz_urandomb(st, 2048))
    while((is_prime(p, 50) and is_prime(q, 50)) == False):
        p = int(next_prime(p))
        q = int(next_prime(q))
    return p, q

def EncryptMsg():
    Flag = "flag{########################################}"
    i = 0
    while( i == 0 ):
        try:
            e1 = 3
            e2 = random.randint(50000,60000)
            p,q = generatePQ()
            n = p * q
            pi_n = (p - 1) * (q - 1)
            d = int(invert(e2, pi_n))
            i += 1
        except(Exception):
            continue

    # 加密e2
    padding1 = 0
    padding2 = 0
    while(padding1 == padding2):
        padding1 = random.randint(20210401, 20210505)
        padding2 = random.randint(20210401, 20210505)

    c1 = pow(e2 + padding1, e1, n)
    c2 = pow(e2 + padding2, e1, n)

    # 加密flag
    h = (d + p) ^ (d - p)
    g = d * (p - 0xdeadbeef)

    Flag = Flag.ljust(225, "\x2a")
    Flag = int.from_bytes(Flag.encode(), byteorder='big', signed=False)
    EncryptedFlag = powmod(Flag, e2, n)

    # 打印输出
    print("EncryptedFlag = %d\n" % EncryptedFlag)
    print("c1 = %d\n" % c1)
    print("c2 = %d\n" % c2)
    print("n = %d\n" % n)
    print("h = %d\n" % h)
    print("g = %d\n" % g)

if __name__ == '__main__':
    EncryptMsg()

刚做这个题的时候一点思路没有。后来看到了大佬发的一个这个题的部分exp有点思路了。
但是需要求出来e2。大佬的exp在此献上
https://github.com/ctf-wiki/ctf-challenges/blob/master/crypto/asymmetric/rsa/rsa-theory/2018-codegate-rsababy/exp.py
这是关于rsababy的题解。但是这个题在此基础上加密了e2所以我们需要先求解e2。

# 直接对c1和c2开三次方。可以求得c1+e2=20264365.0。c2+e2 = 20264358.0。所以c1 - c2 = 7.
c1 = 8321449807360182827125
c2 = 8321441183828895770712
print pow(c1,float(1)/float(3))
print pow(c2,float(1)/float(3))
# 20264365.0
# 20264358.0

然后用数学公式计算(c2+e2+7)**3-(c2+e2)**3展开就会发现21*(x**2+y**2)+147*(x+y)+7**3+42*x*y == c1-c2
所以写个脚本跑一下可能的值,因为题目也给限制c1,c2,e2的范围了。

c1 = 8321449807360182827125
c2 = 8321441183828895770712
for x in range(20210401, 20210505):
    for y in range(50000,60000):
        if(21*(x**2+y**2)+147*(x+y)+7**3+42*x*y == c1-c2):
            print(x,y)

跑出来大概有100+。
然后将这些e2放到大佬的exp里面试试。

import gmpy2
c1 = 8321449807360182827125
c2 = 8321441183828895770712
data =141187369139586875794438918220657717715220514870544959295835385681523005285553297337947377472083695018833866941104904071675141602626896418932763833978914936423338696805941972488176008847789235165341165167654579559935632669335588215515509707868555632337151209369075754122977694992335834572329418404770856890386340258794368538033844221701815983303376617825048502634692029763947325144731383655217790212434365368739783525966468588173561230342889184462164098771136271291295174064537653917046323835004970992374805340892669139388917208009182786199774133598205168195885718505403022275261429544555286425243213919087106932459624050446925210285141483089853704834315135915923470941314933036149878195756750758161431829674946050069638069700613936541544516511266279533010629117951235494721973976401310026127084399382106355953644368692719167176012496105821942524500275322021731162064919865280000886892952885748100715392787168640391976020424335319116533245350149925458377753639177017915963618589194611242664515022778592976869804635758366938391575005644074599825755031037848000173683679420705548152688851776996799956341789624084512659036333082710714002440815131471901414887867092993548663607084902155933268195361345930120701566170679316074426182579947
n =378094963578091245652286477316863605753157432437621367359342302751615833557269627727449548734187939542588641672789504086476494927855747407344197241746889123693358997028141479289459947165818881146467218957546778123656120190207960702225556466771501844979094137868818924556860636212754616730115341674681116573326890134855072314950288530400350483394140781434097516134282100603979066057391672872913866678519235744668652042193736205044674422210689619562242862928626697711582401250962536787125165979017740138070213899305175933585261127763164192929103624167063213758551239415744211455417108907505646457646161227272639379721764779734013149963229002406400371319674194009206372087547010201440035410745572669645666856126204769178179570446069571090298945041726576151255620825221663591127702492882834949100599423704250729752444923956601971323645242934249137015933524911614158989705977723056398299344849153945858516695027157652464450872079484515561281333287781393423326046633891002695625031041881639987758851943448352789469117137668229144914356042850963002345804817204906458653402636643504354041188784842235312540435896510716835069861282548640947135457702591305281493685478066735573429735004662804458309301038827671971059369532684924420835204769329
h = 73848642434738867367477225086726888395852920758614133495828335507877859511862002848037040713538347334802971992946443655728951228215538557683172582670964297757897239619386044898759264210423339349230213909268805339389420150987118078950524911018047255588024612603547365858714122701018350042307021931058343380562835003665731568505773484122782553098643140312700105413000212984821873751937531991369317400032403465633780535286923404386459988367374340142852850593284541563858829367072310534803205896401476440899512604526967410832990327872756442819020392626930518136601018466180890464963004282304763488756943631269919832869202
g = 3976547671387654068675440379770742582328834393823569801056509684207489138919660098684138301408123275651176128285451251938825197867737108706539707501679646427880324173378500002196229085818500327236191128852790859809972892359594650456622821702698053681562517351687421071768373342718445683696079821352735985061279190431410150014034774435138495065087054406766658209697164984912425266716387767166412306023197815823087447774319129788618337421037953552890681638088740575829299105645000980901907848598340665332867294326355124359170946663422578346790893243897779634601920449118724146276125684875494241084873834549503559924080309955659918449396969802766847582242135030406950869122744680405429119205293151092844435803672994194588162737131647334232277272771695918147050954119645545176326227537103852173796780765477933255356289576972974996730437181113962492499106193235475897508453603552823280093173699555893404241432851568898226906720101475266786896663598359735416188575524152248588559911540400610167514239540278528808115749562521853241361159303154308894067690191594265980946451318139963637364985269694659506244498804178767180096195422200695406893459502635969551760301437934119795228790311950304181431019690890246807406970364909654718663130558117158600409638504924084063884521237159579000899800018999156006858972064226744522780397292283123020800063335841101274936236800443981678756303192088585798740821587192495178437647789497048969720110685325336457005611803025549386897596768084757320114036370728368369612925685987251541629902437275412553261624335378768669846356507330025425467339014984330079364067149950238561943275006049728406278318846998650496707162387768801213108565185221147664770009978012050906904959264045050100404522270495606970447076283894255951481388496134870426452215997834228869196114684962261076716651779120620585343304887755029463545328534291186
const = 0xdeadbeef
e = 53917
tmp = gmpy2.powmod(2,e*g+const-1,n)-1
p = gmpy2.gcd(tmp,n)
q = n/p
print p , q
phin = (p-1)*(q-1)
d =gmpy2.invert(e,phin)
plain = gmpy2.powmod(data,d,n)
print hex(plain)[2:].decode('hex')

当e2=53917的时候flag就出来了。我这个办法比较笨。如果大佬有更好的办法解出来。希望在评论区留言。十分感谢。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值