首页 > 其他分享 >2023振兴杯-Crypto wp

2023振兴杯-Crypto wp

时间:2023-12-09 12:22:44浏览次数:30  
标签:bin enc wp list Crypto flag 2023 import ord

crypto1

题目

from flag import flag

def encrypt(x, y):
        key='zxb'
        result=''
        for i in range(len(x)):
                result+=chr(ord(x[i])^ord(y[i])^ord(key[i%3]))
        return result
x = flag
y = flag[1:] + flag[0]

enc = open('flag.enc', 'wb')
enc.write(encrypt(x, y))
enc.close()

enc = "56796b6f6b777b616f6f65647b653d2f6e782f3e6d7d722633652c26726f7c64416d656f6c626e636b797a6f1a2646"

我的解答:

首先测试一下x,y.发现x和y分别代表flag和flag后移一位加上首地址字符

flag = 'abcde'
y = flag[1:] + flag[0]
print(y)
#bcdea

加密方式如下:

result+=chr(ord(x[i])^ord(y[i])^ord(key[i%3]))

我们可以猜测到结果为flag{xxxx},但具体不知道位置。
根据异或的性质,我们可以利用f和l异或再异或key,将得到的值与密文进行对比,可以得到flag在明文中的位置。
之后只需要从该位置往下依次循环异或即可得到flag

exp:

import binascii

enc = "56796b6f6b777b616f6f65647b653d2f6e782f3e6d7d722633652c26726f7c64416d656f6c626e636b797a6f1a2646"
c = binascii.unhexlify(enc)
key = 'zxb'
cipher = []
for i in range(len(c)):
    cipher.append(c[i]^ord(key[i%3]))
print(cipher)
print(ord('f')^ord('l'))

flag_cipher = [10, 13, 6, 28, 35, 23, 29, 13, 22, 26, 12, 25, 19, 27, 0, 23, 120, 92, 62]
flag = [102,108]
for j in range(1,len(flag_cipher)):
    flag.append(flag[j]^flag_cipher[j])
print(''.join([chr(i) for i in flag]))
#flag{XOR_IS_FUNNY!}

crypto2

题目

from Crypto.Util.number import getPrime, bytes_to_long
from gmpy2 import invert, powmod

p = getPrime(1024)
q = getPrime(1024)
n = p * q
phi = (p - 1) * (q - 1)
e = 0x10001
d = invert(e, phi)

with open("flag.txt", "rb") as f:
	m = bytes_to_long(f.read())

c = powmod(m, e, n)
assert m == powmod(c, d, n)

with open("output.txt", "w") as f:
	f.write("n = {}\n".format(n))
	f.write("c = {}\n".format(c))
	f.write("leak = {}\n".format((p ^ q) & ((1 << 800) - 1)))

n = 15571235426797939539238831633247703697409215642831362718146066385417021399103592649626632712024314917817471913939626433520575953306292197338982465585231726225691523482332855007581046878858859892738287906751603097287292123432184264315236703956440181898240812707048906540935557847459938834006517112306094162817074984718655862387364938057878492284440744016546443775531916167164017470033683394275914057901191912284384121493630109154926516069366062089783088439732169772370370955294590903435838430320194003869373124126574176180627081544221636132143905441920473191061061461409407547427997166908876273698276541130678984899303
c = 11410349198192402083731025358124670205298762156812742512455806430945720053501248573549000565669379087195952270760749370073167203051546900914096995321278405720220367427519939638116382433595807325494197693420378893656116540927023043865164328614746414479628014540017033577967693193978113818125984134421120761946747105183198057647052506266535688704007423583060833596105939484423152668717114112856314424069195220194470093254307436153736407926031038716511515018884928576377289853802156015456424197355710062631887029663480146136538261678824501076415658065918045730425523209518075212493675750467401967567713964871622654517929
leak = 2391766340580872396075853116060954790369153414025348183898792053278577108869816452176679906799250067017630058347039968502218692998106913594566891267374934074656997523077504385902187178779959674864970574631185410074159953449193378952686076390

我的解答:

看到p^q,一眼丁真,此题肯定需要剪枝算法。。旧博客的RSA常用类型中也有关于此类型的记录。

话不多说来分析一下:

代码给了p^q的低800bit,因此我们用剪枝算法还原出p的低800bit,然后copper解出完整的p。然后求m即可。

exp:

#sage
from tqdm import *
import gmpy2

n = 15571235426797939539238831633247703697409215642831362718146066385417021399103592649626632712024314917817471913939626433520575953306292197338982465585231726225691523482332855007581046878858859892738287906751603097287292123432184264315236703956440181898240812707048906540935557847459938834006517112306094162817074984718655862387364938057878492284440744016546443775531916167164017470033683394275914057901191912284384121493630109154926516069366062089783088439732169772370370955294590903435838430320194003869373124126574176180627081544221636132143905441920473191061061461409407547427997166908876273698276541130678984899303
c = 11410349198192402083731025358124670205298762156812742512455806430945720053501248573549000565669379087195952270760749370073167203051546900914096995321278405720220367427519939638116382433595807325494197693420378893656116540927023043865164328614746414479628014540017033577967693193978113818125984134421120761946747105183198057647052506266535688704007423583060833596105939484423152668717114112856314424069195220194470093254307436153736407926031038716511515018884928576377289853802156015456424197355710062631887029663480146136538261678824501076415658065918045730425523209518075212493675750467401967567713964871622654517929
leak = 2391766340580872396075853116060954790369153414025348183898792053278577108869816452176679906799250067017630058347039968502218692998106913594566891267374934074656997523077504385902187178779959674864970574631185410074159953449193378952686076390
e = 65537

def find_p(bin_p,p_list):
    l = len(bin_p)
    if l==800:
        p_list.append(int(bin_p,2))
    else:
        p = int(bin_p,2)
        q = (leak^^p)%2**l
        if (p*q)%2**l==n%2**l:
            find_p("1"+bin_p,p_list)
            find_p("0"+bin_p,p_list)
    
p_list = []
find_p("1",p_list)
for i in trange(len(p_list)):
    PR.<x> = PolynomialRing(Zmod(n))
    f = x*2^800 + p_list[i]
    res = f.monic().small_roots(X=2^224, beta=0.4)
    if res:
        p = int(res[0]* 2^800+p_list[i])
        if n%p == 0:
            break

q = n // p
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(m)
#13040004482825154599162311427995152293456839151536245158868798255974328954648873441445307773
from Crypto.Util.number import long_to_bytes
m = 13040004482825154599162311427995152293456839151536245158868798255974328954648873441445307773
print(long_to_bytes(m))
#flag{a20a5a7eb490770447d59f291e71930e}

 

标签:bin,enc,wp,list,Crypto,flag,2023,import,ord
From: https://www.cnblogs.com/xiaoqi-ctf/p/17890752.html

相关文章

  • 2023-2024-1 20232327《网络空间安全导论》第五周学习总结
    2023-2024-120232327《网络空间安全导论》第五周学习总结教材学习内容总结1.信息内容安全是研究利用计算机从包含海量信息并且迅速变化的网络中对特定安全主题相关信息进行自动获取、识别和分析的技术;2.网络爬虫是按照一定规则,自动抓取有互联网信息的程序或脚本;3.信息过滤是......
  • 2023.12
    启动。DEGwer'sDoctoralDissertationCheeringContest好魔怔的比赛。E.HalfPalindromes先考虑单个\(f(l,r)\)的计算,有结论:我们一定会不断删最小的长度为\(k\)的前缀,满足前\(2k+1\)个字符是回文的。直到没有这样的\(k\)为止。证明也很容易,假设我们某一步删了长度......
  • 2023最新中级难度Go语言面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度Go语言面试题合集问:请描述一下Go语言的并发模型,并解释一下为什么它适合现代Web应用?Go语言的并发模型是基于CSP(CommunicatingSequentialProcesses,通信顺序进程)理论,主要是通过goroutine和channel来实现并发的。goroutine可以看......
  • 2023最新高级难度Go语言面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度Go语言面试题合集问:请深入解释Go语言的内存分配和GC(垃圾回收)机制,以及它们如何影响程序的性能。Go语言的内存管理由内置的垃圾回收器自动进行,它将内存分为三个区域:堆、栈和全局区。栈存放局部变量、参数、返回地址等小对象,堆存......
  • 2023年下半年网络工程师
    上午:56下午:46有点意外,因为对下午的案例确实没底,从2022年下半年开始,感觉难度提升了不少。上午的题刷刷历年真题基本OK了,下午的题多看看华为的配置命令,考试前一个月,在公司休息的时候,就打开华为的交换机/路由器的配置命令来看,下午案例题经常考不在书本上的一些配置命令。疫情期......
  • 20231209
    我还活着。早上一起来就绷不住了。我昨天收拾塑形镜的用具的时候忘了把护理液拿回来。昨晚我给家长说了,然后家长说没有就不用了呗。然后今天早上我就没用。我妈拿着一个没开封的护理液(外面的盒子都没拆)问我我用了吗。(这算是明知故问吗?)我疑惑了,我说我没用,我不知道啊。我妈......
  • JetBrains IDE 2023.3 (macOS, Linux, Windows) - 开发者工具
    JetBrainsIDE2023.3(macOS,Linux,Windows)-开发者工具AppCode,CLion,DataGrip,DataSpell,Fleet,GoLand,IntelliJIDEA,PhpStorm,PyCharm,Rider,RubyMine,WebStorm请访问原文链接:https://sysin.org/blog/jb-2023/,查看最新版。原创作品,转载请保留出处。作者主......
  • 2023衡山论坛 医学大数据与人工智能前沿论坛 2023.11.20-12
    中国抗癌协会肿瘤标志专业委员会南华大学附属第一医院南华大学计算机学院 湖南省生物医学工程协会 湖南省生物信息学会哈尔滨工业大学生命科学与技术学院   湖南省生物医学工程学会是由湖南省从事生物医学工程学科活动的科技工作者和有志于促进生物医学工程领域......
  • 2023最新!VMware17安装centos7保姆级教程
    2023最新!VMware17安装centos7保姆级教程安装的是cenos7,使用的是最新的VMware17导航目录2023最新!VMware17安装centos7保姆级教程导航一、虚拟机设置二、虚拟机初次启动配置一、虚拟机设置双击启动程序,在主窗口选择创建新虚拟机选择稍后安装操作系统,点击下一步选择Li......
  • 2023年12月8日总结
    更好地观看总结今天开始了!又到了周五,已经集训了半个月了啊。还真实令人潸然泪下。先解决昨天晚上剩下的一道题。排列计数什么玩意儿啊!欧拉数!不会啊!我发现怎么我唯一能看懂的是Stirling数的做法了?!悲。欧拉数的板子,但我不会欧拉数,我只会用Stirling的生成函数加容斥乱搞。......