G1CTF-2021 WP

Crypto

1. One Piece

在这里插入图片描述
只猜到是关于国旗的首字母加密,联想不到航海的hint
我悟了 长得不像杂项的不是好密码
https://en.wikipedia.org/wiki/International_maritime_signal_flags
谷歌搜索

2. baby_rsa

 n = 18166111488983638423176654225038910650374178404043258136863317940757240374883045318227630220114908148002528619687208976201483203446705228237820608531034600157346418730110800833894198105113069673034318791074080878803821797374439187892933762426303490171060652425319592687318992422979831460606780689490127157122450326817694644127955168509718422226505201308410281564018832558025316135527711604948983206569045881358071837726506411561445950018434181828539749068924458242255898899889941894373420604283541696070823346969159662074221543706652525690955057870664198106495869582165707721782854117610672456879034154898769471938117

e = 65537

c = 16557540364154395713558646669072741937615342260542036031952182998548657011824978776677484944354752850867643908247704032511389420321541306432748843707416654616686046776804432102455821985542337552330254302403535524234293479604198963438410959320502344078024576646316377856554837978984863667052517437922967926155676374386985386995490935331458679889799199387332376735566839929210890931308968597230699243910342515468179185950859704753759493976488271753912140439374347388198468842216991965867366259721821413872154269673724400345270897275549939948544776957761650034569256088810092045614520316608497052245790834163200510667772

思路

  1. 导入相关模块
  2. 给出了n(大数),进入在线factorn分解出p和q
  3. 现在已知 n e p q
  4. 利用求模逆invert函数求d
  5. pow(n,c,d),并转明文求得flag
  6. 发现flag不对,是一串明显还需继续解密的数字
  7. 利用invert函数继续求逆,再转明文,得到最后flag

关于第二次求逆:
e*d=1 mod phi
d=e-1 mod phi
d=invert(e,phi)

0x1337 ^ (-1) mod 0x18a39cb09e40671788a6b9221371e3f5455bbde2aff984e491c85f4f3ad309613

相当于e-1 mod phi
所以可以用第二次模逆
或者pow()函数
0x1337 * -1次方 % 0x18……613

代码:

import gmpy2    #gmpy2模块
import libnum

e= 65537
n= 18166111488983638423176654225038910650374178404043258136863317940757240374883045318227630220114908148002528619687208976201483203446705228237820608531034600157346418730110800833894198105113069673034318791074080878803821797374439187892933762426303490171060652425319592687318992422979831460606780689490127157122450326817694644127955168509718422226505201308410281564018832558025316135527711604948983206569045881358071837726506411561445950018434181828539749068924458242255898899889941894373420604283541696070823346969159662074221543706652525690955057870664198106495869582165707721782854117610672456879034154898769471938117
p= 130456283857645025762691023898845608928710362686294851221450093824533197549806631148867242691844441160576320773904432512838379590127986113818416101086695539425149571612979342889778360825402727498529748702035429662584726706609716114370652011043194792995908818094170934656989995629482678233000685983090325365549
q= 139250566947059823453625463016686669261826444361819002282335838853816828667839799789393680821194880353192071200076880361361848345889074292932450446910930443112614763933390287115641256150843558712707320218852675477962227409197464100372762134803009018827495653979157431219931338408129724157546988493768646375033
c = 16557540364154395713558646669072741937615342260542036031952182998548657011824978776677484944354752850867643908247704032511389420321541306432748843707416654616686046776804432102455821985542337552330254302403535524234293479604198963438410959320502344078024576646316377856554837978984863667052517437922967926155676374386985386995490935331458679889799199387332376735566839929210890931308968597230699243910342515468179185950859704753759493976488271753912140439374347388198468842216991965867366259721821413872154269673724400345270897275549939948544776957761650034569256088810092045614520316608497052245790834163200510667772
#求私钥d
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)     #gmpy2.invert(),用来求模逆的方法

flag=pow(c, d, n)
print(flag)

print(bytes.fromhex(hex(flag)[2:])) #转成明文
#b'0x1337 ^ (-1) mod 0x18a39cb09e40671788a6b9221371e3f5455bbde2aff984e491c85f4f3ad309613 = ?'
fl=gmpy2.invert(0x1337,0x18a39cb09e40671788a6b9221371e3f5455bbde2aff984e491c85f4f3ad309613)
print(fl)
#46327402297734271466373993132249945201359925367326401385849709478916941756285
#print(hex(fl)[2:1])
print(bytes.fromhex(hex(fl)[2:]))

转明文的三种方式1

3.deal_breaking

题目:

cnenprgnzbysbeurnqnpur 

谷歌搜索
在这里插入图片描述
or
先rot13解密,再根据提示md5加密
cyberchef
在这里插入图片描述

4.easyRSA

题目:

from Crypto.Util.number import bytes_to_long,getPrime
from flag import *

p = getPrime(1024)
n1 = getPrime(1024) * p
n2 = getPrime(1024) * p
m = bytes_to_long(flag.encode())
e = 65537
c1 = pow(m,e,n1)
c2 = pow(m,e,n2)

print(n1)
print(n2)
print(c1)
print(c2)

# 14343453794367092515497895137902168386296417319247146730459319881802140334698737189342973812146465828660342012946910653192803473600595707696472591504951198563603709181626005658184116684367802758344031386496658458264959969692044879175628783605186867276515694784082482043436473458055894723810140516689141599152195984714148210638833797638255124702611899073506190942745515704802064433300261613781916198106074829630095538317067848424354570246167013526201728488570271571071978289748473886089178585249674489547064957622989808178007470483946536987289341591847349128538928294808117443145097551386826012131775390678998400121889
# 20308195943065789251817446829863883469272602304751753219641822206296872340042055615695828234875654938558065292577939692476866300109337008636927498617655004089261030659132847752508448477243753135984370110439693105967818735745420000128069178972088161949286955900852997852216281385776262449633762670014571643311788609943581805728189446261833834354199480558854660930835489848639377800962143545608517015172667287024378681310097239827666867592226542748876958241795640727126418223939447294264460580825913526549434716100031432143671503937393640601052321015919112419872256052688412078974604159554387677255024728801489704260363
# 7060913174371289769309763235647638447135191122575239829016360331184038730172940927388867110734381358453407989806140634011350721798160713053621896705641720212112551788757319365520015847374673960320334248580560205413153114427654784961710348834514336159373193900583620653085765067165174133038800649323672785585501521017885631280303551697739951014696330327670228229605047676440962916067564193271247936974843751339372847625153953559941840547748375919498892051841063000432368600158512968060459462404612866403066205167176313042517873197370743936042865113128112591367582742396193149320607077649094903691975739181219359076265
# 20148610260208170593289118672038891818770076647095364134619069654881479351996793675661468921299369828610961411535098751945943055486021096222646490248098261096267277133140141311947840921090893680970207588861087220137922905797128028172779716663247976566807484416436273763735289602135279810958841816837092253309070217739840320870090502512130142015671736882941916450932012952894134313348115440744061809508935802755106889882605495521669026118538807594430799171795521056652204797565525565412195933084030518258900930049905119086640401568596910662117008862676917676436361632490924908191898958534522611573541581472875515834526 

思路:
n1、n2的公因数是p
所以利用欧几里得算法gcd(n1,n2)
gcd(n1,n2)=p
q=n1//p
得到p,q之后求d
d=invert(e,(p-1)*(q-1))
根据加密(和公式:c=me mod n m=cd mod n)
m1=cd mod n
m2=cd mod n

代码:

from gmpy2 import *
from libnum import * 


n1=14343453794367092515497895137902168386296417319247146730459319881802140334698737189342973812146465828660342012946910653192803473600595707696472591504951198563603709181626005658184116684367802758344031386496658458264959969692044879175628783605186867276515694784082482043436473458055894723810140516689141599152195984714148210638833797638255124702611899073506190942745515704802064433300261613781916198106074829630095538317067848424354570246167013526201728488570271571071978289748473886089178585249674489547064957622989808178007470483946536987289341591847349128538928294808117443145097551386826012131775390678998400121889
n2=20308195943065789251817446829863883469272602304751753219641822206296872340042055615695828234875654938558065292577939692476866300109337008636927498617655004089261030659132847752508448477243753135984370110439693105967818735745420000128069178972088161949286955900852997852216281385776262449633762670014571643311788609943581805728189446261833834354199480558854660930835489848639377800962143545608517015172667287024378681310097239827666867592226542748876958241795640727126418223939447294264460580825913526549434716100031432143671503937393640601052321015919112419872256052688412078974604159554387677255024728801489704260363
c1=7060913174371289769309763235647638447135191122575239829016360331184038730172940927388867110734381358453407989806140634011350721798160713053621896705641720212112551788757319365520015847374673960320334248580560205413153114427654784961710348834514336159373193900583620653085765067165174133038800649323672785585501521017885631280303551697739951014696330327670228229605047676440962916067564193271247936974843751339372847625153953559941840547748375919498892051841063000432368600158512968060459462404612866403066205167176313042517873197370743936042865113128112591367582742396193149320607077649094903691975739181219359076265
c2=20148610260208170593289118672038891818770076647095364134619069654881479351996793675661468921299369828610961411535098751945943055486021096222646490248098261096267277133140141311947840921090893680970207588861087220137922905797128028172779716663247976566807484416436273763735289602135279810958841816837092253309070217739840320870090502512130142015671736882941916450932012952894134313348115440744061809508935802755106889882605495521669026118538807594430799171795521056652204797565525565412195933084030518258900930049905119086640401568596910662117008862676917676436361632490924908191898958534522611573541581472875515834526
e=65537

p=gcd(n1,n2)
q=n1//p
phi=(p-1)*(q-1)
d=invert(e,phi)
#print(d)
#d=4956531395715878728023571893557386017737384424508142453952915412105727637211381374293152386036605453738663130250220265847649728651489860570395574710661607853120118434415431742998545715410800449642450505973569496686246676436451781111287746804197125031833177285733493611817840523743714967272353819696644487785439620576878730479814954096447311271403213422150212684664579067220333601337910048561936818019665862954176456290718787783290557455051654165205856576966486794071532100331790629794724707202422143833707301148521527752234540138323799998722803842344425727697860473715912112337288894566854957099875826445074354129217
m1=pow(c1,int(d),n1)
m2=pow(c2,int(d),n2)
print(n2s(m1))
#print(bytes.fromhex(hex(m1)[2:]))   

5.Asymmetric task

  1. 在线解密:
    在这里插入图片描述

加密的flag:

CD/nsw4vOAJ7deHoDqrlz+wPS52sjN7Djtl5qw2b6g5KKDI2dGQ2mcmfVo4fJIpo1gnu2DzHR8AMi/Aky/tsj/Q21YRYQTXeQLv1Ee4Djs/4swwm89Z4ExRrN9Zu0I8mYfzoTqc2TVcoz7xXj8WuAN6WCAIgEfm1hpUUkRTBf4I=
工具要求是 公钥和私钥 里选一个 (选私钥,是私钥解密)

MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAINATQ2ZpaS8wAcSPOJKVS60LbGycRBwEynahUuSelHeAyJrDDzF9jPy3Ns3hja0RWcKExTyqM07Tt4xDljHGyZqNoy0G19hGWeg7w2BBrIWdY7gOQVPPt2MeQ9M4qdxOvwefFGKZ3yj3zBpfsXQI6LHXc/aqU0BWEmzKO+TAj4NAgMBAAECgYBlxXk533aqa1U25nRhPyQX58w6qlOzXEPvwypyc+z3CABEMt81TIbgtyN7s+0VA+mAwTYUmyg6ow8/iKhIPHMW1Es9vJy8RLwKTBG+AUPoKgesiqOAGpAl43bVSSKdvhki3VEDDqAbAZh3q1uGb99LuLaGgDhT3miotSS2lchznQJBAMYSgJa+OmnOcxi66q1lyI06S4mEjkO/AlQWm3ELvOMAGoPT27wSsV8RQpu8EWDSqq97Qci3vqwEKmyoZaHxr1MCQQCpovYn+xyWAOQZO7zO+WRYVN3gzsxc4cgWzgYEadxubX68v6lwZIiZ/9S09s+FPJGL0OMAbvax/8puhPQF0JEfAkEAukIT4a0oyO52lT7QCBa6rPOwrLSWA2bPDbvkmD1tdhlW1biX3RfG65sTg9cqkF4KW9IQXmtLRf701hDU4aCgOQI/CJ094sndqcBh1OYzsE75yYKFweS+e/j7MC1GIPM/PlxRE0SoVgzE4w0awBXIc/ufaHozDNKVtHRI01PtEF6HAkEAnBaoharA7wtfK/ozXfipiEuwqcsFNJP/QPliOiS+fOLuR3IzYodUxx910QYpUYMxF2pGeN2WUkThzy96O/Z0Bg==
  1. 手动解码
import os
import sys 
os.chdir(sys.path[0])#导入模块,在指定目录下
import base64 #此题为base64加密的文本,有两段,一段是公钥一段是私钥
from libnum import * #-------有两种方式,一种是利用libnum库 n2s s2n 两个函数进行转换
from Crypto.PublicKey import RSA
# from Crypto.Util.number import bytes_to_long  ------一种是利用Crypto.Util.number long_to_bytes bytes_to_long 进行转换
# from Crypto.Util.number import long_to_bytes


flag=base64.b64decode(open("enc_flag.txt",'r').read())
keys=open('public_private.enc','rt')
public=base64.b64decode(keys.readline())#每次读取一行
private=base64.b64decode(keys.readline())

key=RSA.import_key(private)
#key=RSA.import_key(public)#公钥解密或者私钥解密

#c=bytes_to_long(flag)
c=s2n(flag)

#print(c) ---------
#print(key.d) -----
#print(key.n) -----③ 这三行可以不要打印出来

m=pow(c,key.d,key.n)
#print(bytes.fromhex(str(m)))
#print(long_to_bytes(m))
print(n2s(m))

tips:
在这里插入图片描述在同一目录下在同一目录下

MISC

1.音频隐写——newworld

在这里插入图片描述.. ... ... .... --- -. .. .. .. -.- --- .- -. --- ... . -.- .- .. .... .

audacity
低通滤波器两次 高通滤波器两次 800hz
摩斯解密上面的
得到flag

2.盲水印——wo

python27
下载盲水印工具
在这里插入图片描述

下载第三方库 opencv——python
下了很多遍我都忘了是怎么下的了,有离线下载也有在线下载不知道哪个起了作用
https://www.lfd.uci.edu/~gohlke/pythonlibs/
注:网上有教程,哪里报错搜哪里
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
得到flag

3.敲击码——tiktik

下载题目是一段音频,听出来是电话音
在这里插入图片描述

搜索电话音会提到一个工具

dtmf2num

我一般会把需要解密的文件放到工具目录里
有篇博客有下载地址,用法:
进入cmd
dtmf2num.exe knocking.wav
在这里插入图片描述提示:敲击码
255删掉一个5
得到2232122325443321
在这里插入图片描述敲击码不区分大小写

flag{GMBHJTNF}

4.tryxor

PWN

在这里插入图片描述

#include <stdio.h>
#include <unistd.h>

void init_io()
{  
    setbuf(stdin, NULL);
    setbuf(stdout, NULL);
    setbuf(stderr, NULL);
}

int main()
{
    unsigned long long num;

    init_io();
  
    printf("password:");
    scanf("%ld", &num);
	

    if (num == "paSsw0rd") { //Do you know strcmp?
        printf("you are right!\n");
        system("/bin/sh");
    } else {
        printf("%ld",&num);
        printf("sorry, you are wrong.\n");
    }


    return 0;
}

给出了源代码进行分析,如果字符串等于password就正确
拖到ida64
string函数
可以看到password的地址(16进制)
转成十进制

一个具有注脚的文本。1


  1. print(m) #10进制明文
    #print(hex(m)[2:]) #16进制明文
    print(bytes.fromhex(hex(m)[2:])) #16进制转文本
    from libnum import *
    x=46327402297734271466373993132249945201359925367326401385849709478916941756285
    print(n2s(x))
    import libnum
    x=327489032843029144489
    print(libnum.n2s(x)) ↩︎ ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值