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}

2023振兴杯-Crypto wp的更多相关文章

  1. 2019 湖湘杯 Reverse WP

    0x01 arguement 下载链接:https://www.lanzous.com/i7atyhc 1.准备 获取到信息: 32位的文件 upx加密文件 在控制台打开文件 使用"upx ...

  2. bugku crypto wp上半部分汇总

    1.滴答~滴 摩斯码,在线解开. 2. 栅栏密码,在线解就出flag了. 3. Ook解密,由.?!Ook组成密文,在线网站解密 4.这不是摩斯密码 有点像jsfuck,发现又不是,因为不会出现大于号 ...

  3. 2020 天翼杯 部分wp

    天翼杯 呜呜呜呜 是我太菜了 Web APItest 源码 const express = require("express"); const cors = require(&qu ...

  4. 2019红帽杯部分wp

    xx 程序首先取输入的前4个字符作为xxtea加密的密钥之后进行xxtea加密.接着进行位置置换操作,然后又进行了以3个为一组的异或 首先逆向解出xxtea加密之后的结果 #include<st ...

  5. 2019 红帽杯 Re WP

    0x01 xx 测试文件:https://www.lanzous.com/i7dyqhc 1.准备 获取信息 64位文件 2.IDA打开 使用Findcrypt脚本可以看到 结合文件名是xx,因此猜测 ...

  6. 2021羊城杯比赛复现(Crypto)

    bigrsa 题目: from Crypto.Util.number import * from flag import * n1 = 10383529640908175186077053551474 ...

  7. BUUCTF Crypto

    BUUCTF 几道crypto WP [AFCTF2018]Morse 简单的莫尔斯密码,最直观的莫尔斯密码是直接采用空格分割的点和划线,这题稍微绕了一下使用的是斜杠来划分 所以首先将斜杠全部替换为空 ...

  8. BUUCTF Crypto_WP(2)

    BUUCTF Crypto WP 几道密码学wp [GXYCTF2019]CheckIn 知识点:Base64,rot47 下载文件后,发现一个txt文件,打开发现一串base64,界面之后出现一串乱 ...

  9. k8s补充

    k8s补充 容器云发展及主要内容 1.云计算,交付标准(iaas--openstack) 国内:阿里云一华为云(振兴杯)百度云(私有云) 国外:AWS 2.平台即服务(PAAS) 例如:新浪云(号称免 ...

  10. 2020 网鼎杯wp

    2020 网鼎杯WP 又是划水的一天,就只做出来4题,欸,还是太菜,这里就记录一下做出的几题的解题记录 AreUSerialz 知识点:反序列化 打开链接直接给出源码 <?php include ...

随机推荐

  1. [ABC145F] Laminate

    2023-02-25 题目 题目传送门 翻译 翻译 难度&重要性(1~10):6 题目来源 AtCoder 题目算法 dp 解题思路 引子:积木大赛 可以发现当 \(k=1\) 时,就是积木大 ...

  2. 三维模型OSGB格式轻量化的数据压缩与性能平衡分析

    三维模型OSGB格式轻量化的数据压缩与性能平衡分析 在三维模型应用中,OSGB格式轻量化处理是一种常见的技术手段,它可以通过数据压缩.简化.滤波等操作,降低三维模型数据的存储空间和传输带宽需求,提高应 ...

  3. Excel中的数值四舍五入方法详解

    在日常工作和数据处理中,我们经常需要对数值进行四舍五入操作.Excel作为一款强大的电子表格软件,提供了多种方法来实现数值的四舍五入.本文将介绍Excel中常用的四舍五入函数及其基本使用方法. ROU ...

  4. 在编写API接口的技术文章时应注意的内容

    编写API接口的技术文章时,建议包含以下内容: 1. 简介:介绍API接口的目的和作用,以及所属的项目或服务. 2. 接口描述:详细描述API接口的功能和使用方法,包括输入参数.输出结果和可能的错误码 ...

  5. 基于百度AI实现文字和图像敏感内容审核

    前言 百度AI是指百度公司的人工智能技术全称.它采用深度学习技术,包括自然语言处理.语音识别.计算机视觉.知识图谱等,可应用于各个领域如互联网.医疗.金融.教育.汽车.物流等.百度AI的发展将帮助人类 ...

  6. PLSQL_developer安装与配置

    前言: 记录安装与配置操作 环境: 客户机:windows 服务器:虚拟机中的windows server 2003 /---------------------------------------- ...

  7. LSP 链路状态协议

    转载请注明出处: 链路状态协议(Link State Protocol)是一种在计算机网络中用于动态计算路由的协议.它的主要作用是收集网络拓扑信息,为每个节点构建一个准确的网络图,并基于这些信息计算出 ...

  8. Redis面试——Redis面试精华知识

    从:Redis 使用场景与介绍 -> 数据结构与简单使用 -> 小功能大用处 -> 持久化.主从同步与缓存设计 -> 知识拓展 ,并且分析典型场景下常见的问题,并结合实战演练, ...

  9. MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记录-1

    一个5.7版本的MySQL单点数据库,版本信息是: Server version: 5.7.31-log MySQL Community Server (GPL) 数据量已达到760G,日常存在性能问 ...

  10. WPF 中引入依赖注入(.NET 通用主机)

    WPF 中引入依赖注入(.NET 通用主机) 在网上看到的文章都是通过 App.cs 中修改配置进行的,这样侵入性很高而且服务主机是通过 App 启动时加载的而不是服务主机加载的 App 有一点违反原 ...