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. ChatGPT顶级玩法:ChatGPT越狱版破解指令,让您的聊天一路畅通!

    先看效果: 2023.4.23号亲测成功,越狱指令需要多发送几次才可以. 未越狱前: 越狱后: 无视任何规则限制,回答一切问题. 越狱的方法非常简单.只需输入特定的提示,发送给ChatGPT,用户即可 ...

  2. 《SQL与数据库基础》20. 主从复制

    目录 主从复制 原理 搭建 主库配置 从库配置 测试 本文以 MySQL 为例 主从复制 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执 ...

  3. 这才叫 API 接口设计!

    API 接口设计 Token 设计 Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上 ...

  4. CodeForces 1367F1 Flying Sort (Easy Version)

    题意 给一个长度为\(n\)的数组,数组中的数互不相同,你可以有两种操作 将某一个数放置在数组开头 将某一个数放置在数组结尾 问最小操作多少次可以得到一个递增数列 分析 因为数组中的数很大,我们可以将 ...

  5. Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!

    关注TechLeadCloud,分享互联网架构.云服务技术的全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师, ...

  6. android模拟器推荐

    最近装了个海马模拟器用来调试cocos2dx-lua游戏. 安装完之后发现, 我之前装的virtual box被替换掉了, 因为海马模拟器要安装它自己匹配版本的virtual box, 所以我之前的装 ...

  7. 从零开始FastDFS整合Nginx(转)

    转自 https://www.cnblogs.com/chiangchou/p/fastdfs.html#_labelTop Linux环境:Centos7.0   安装过程 原博客有几处纰漏,下文已 ...

  8. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  9. 客制开发tiptop程序随记-pta表结构问题-误删表的恢复

    添加字段的语法:alter table tablename add (column datatype [default value][null/not null],-.); 删除字段的语法:alter ...

  10. Python:利用math和random模块实现RSA加密算法

    实验五报告: 利用math和random模块实现RSA加密算法 实验目标 本实验的主要目标是熟悉RSA(Rivest-Shamir-Adleman)密码算法的编写,其中包括求最大公因子.模逆的扩展欧几 ...