半个多月啥也没记了,因为啥也没干(沉迷网络迷踪?)。。。

最近好多ctf比赛都进决赛了,虽说都和我没啥关系,但还是要好好准备下线下AWD,以前没打过啊,难;而且又是主考web和pwn,我这种搜索类选手基本就没戏了吧。

十一恶补,于是我去ctfshow上开始刷misc入门和crypto的题目了,在这记一下(有病吧这和AWD有关系么)

1、密码学签到

倒序

2、crypto2

jsfuck

3、crypto3

aaencode

4、crypto4

简单rsa,求d

# coding:utf-8
# author jinyunlong
# createtime 2021/10/2 13:21
# 职业   ICBC锅炉房保安
import libnum

p= 447685307
q= 2037
e= 17

n=p*q
phi_n=(p-1)*(q-1)

#求逆元
d=libnum.invmod(e,phi_n)
print d
5、crypto5

简单rsa,求m

# coding:utf-8
# author jinyunlong
# createtime 2021/10/2 13:21
# 职业   ICBC锅炉房保安
import libnum

p= 447685307
q= 2037
e= 17
c= 704796792

n=p*q
phi_n=(p-1)*(q-1)

#求逆元
d=libnum.invmod(e,phi_n)

m=pow(c,d,n)
print(m)
6、crypto6

Rabbit解密;U2Fsd开头猜是AES或者Rabbit

7、crypto7

Ook!解密

8、crypto8

BrainFuck解密

9、crypto9

爆破,解压缩密码是4132。因为压缩包以serpent命名,所以猜想serpent加密,解密网址
http://serpent.online-domain-tools.com/ ,把文件放进去,key=4132。解密得到flag

10、crypto10

=E7=94这种开头是Quoted-printable编码

http://web.chacuo.net/charsetquotedprintable

11、crypto0

凯撒

12、crypto11

md5(某些坑站解不出,换站试试)

13、crypto12

埃特巴什码,置换密码一种,特征a-z,b-y以此类推

14、crypto13

base32-base64;文件太大,在线解不出来,直接去网上梭脚本了

import base64
def base(s):
    try:
        s = base64.b32decode(s)
        s = base(s)
    except:
        try:
            s = base64.b64decode(s)
            s = base(s)
        except:
            return s
    return s
f = open('base.txt')

text = f.read()

print(base(text))
15、萌新_密码5

当铺密码,网上梭,自己数出头数也行。。

s ='田由中人工大王夫井羊'
code=input("请输入当铺密码:")
code = code.split(" ")
w = ''
for i in code:
    k=""
    for j in i:
       k+=str(s.index(j))
    w+=chr(int(k))
print(w)
16、crypto14

二进制转十六进制,然后base64(有位置转换),梭一把

s= '3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG'
t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
l=""
for i in s:
    l += t[(t.index(i)-30)%64]

if len(l)%4!=0:
    l=l+"="*(4-(len(l)%4))
print(l)
17、EZ_avbv(easy)

不会做

18、贝斯多少呢

不会做

19、find the table

不会做

20、babyrsa

白给rsa,根据p、q、e、c求m

21、easyrsa1

分解n

22、easyrsa2

n不互素

23、easyrsa3

共模攻击

24、easyrsa4

低加密指数攻击

25、easyrsa5

维纳攻击

26、easyrsa6

yafu分解p、q,e,65537=0x10001

27、easyrsa7

p损失掉了低位数据,用sagemath恢复p

# coding:utf-8
# author jinyunlong
# createtime 2021/10/3 20:35
# 职业   ICBC锅炉房保安
import gmpy2
import libnum

p = 147305526294483975294006704928271118039370615054437206404408410848858740256154476278591035455064149531353089038270283281541411458250950936656537283482331598521457077465891874559349872035197398406708610440618635013091489698011474611145014167945729411970665381793142591665313979405475889978830728651549052207969
n = 0x79e0bf9b916e59286163a1006f8cefd4c1b080387a6ddb98a3f3984569a4ebb48b22ac36dff7c98e4ebb90ffdd9c07f53a20946f57634fb01f4489fcfc8e402865e152820f3e2989d4f0b5ef1fb366f212e238881ea1da017f754d7840fc38236edba144674464b661d36cdaf52d1e5e7c3c21770c5461a7c1bc2db712a61d992ebc407738fc095cd8b6b64e7e532187b11bf78a8d3ddf52da6f6a67c7e88bef5563cac1e5ce115f3282d5ff9db02278859f63049d1b934d918f46353fea1651d96b2ddd874ec8f1e4b9d487d8849896d1c21fb64029f0d6f47e560555b009b96bfd558228929a6cdf3fb6d47a956829fb1e638fcc1bdfad4ec2c3590dea1ed3
c = 0x1b2b4f9afed5fb5f9876757e959c183c2381ca73514b1918d2f123e386bebe9832835350f17ac439ac570c9b2738f924ef49afea02922981fad702012d69ea3a3c7d1fc8efc80e541ca2622d7741090b9ccd590906ac273ffcc66a7b8c0d48b7d62d6cd6dd4cd75747c55aac28f8be3249eb255d8750482ebf492692121ab4b27b275a0f69b15baef20bf812f3cbf581786128b51694331be76f80d6fb1314d8b280eaa16c767821b9c2ba05dfde5451feef22ac3cb3dfbc88bc1501765506f0c05045184292a75c475486b680f726f44ef8ddfe3c48f75bb03c8d44198ac70e6b7c885f53000654db22c8cee8eb4f65eaeea2da13887aaf53d8c254d2945691
e = 0x10001

q = n//p
phi_n=(p-1)*(q-1)
#求逆元
d=libnum.invmod(e,phi_n)
m=pow(c,d,n)
print(m)
print(libnum.n2s(int(m)).decode())
28、easyrsa8

根据公钥文件、密文推明文;直接梭套神脚本

# coding:utf-8
# author jinyunlong
# createtime 2021/10/3 20:52
# 职业   ICBC锅炉房保安
# 需要自己手动解公钥文件然后用轩禹工具算出e、n再分解n算出p、q
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from numpy import long
import gmpy2
import binascii

public = RSA.importKey(open('public.key').read())
n = long(public.n)
e = long(public.e)
print(n)
print(e)
p = 97
q = 106249972159566919549855203174197828387397831115262336234662051342543151219702510584956705611794290291345944183845955839244363030579896461607496959399297130227066841321473005074379950936513608503266587950271044991876848389878395867601515004796212227929894460104645781488319246866661398816686697306692491058609
d = 4520639064487098151327174667961365516283539231992543792882057746866179464294032313887767783621724945557985447874376379715922452725597335427159165685648572663979688014560576024497341124412004366514253110547369977143739781801290219136578513871764574450392367530817034216313429071683911546803031169524669257788417
rsakey = RSA.importKey(open('public.key', 'r').read())
privatekey = RSA.construct((n,e,d,p,q))
rsa = PKCS1_OAEP.new(privatekey)
m = rsa.decrypt(open('flag.enc', 'rb').read())
print(m)
29、自家出的题目1:根据p+q求解(用gmpy2开根号)
# coding:utf-8
# author jinyunlong
# createtime 2021/10/3 22:20
# 职业   ICBC锅炉房保安

import gmpy2
import libnum
from Crypto.Util.number import *

e = 65537
n = 18342480149313681940279789853991924160074227353705123791000037595153360890132822642976043006911318813300775758144124577859707975632435139032649556702670023135048503831320161801390564249865504115600338239121335712906379154340921036389483202745048888361130956397321676225041699727764025134754318248326767949524701723711254880703300338370716643321223806945033508046531620369700894246998884995216892420859248500948733665757457759853769514897442476089501694458259725702115344138691391339416669150231594139424356187099232460262565673245276836881136549983249164463959443540223031834742704543660093181265391277706499101245091
c = 4115311985099147874200917135776345246171986273059055544720820110403829182337596879790229046703250442338758806624780031916517150988228964230642798938765523249685198904636041171031995485835455419360444542815767913005797424700165346086013992496844351965354798369987839072785621662325597568332464426369061111689071714274735112059784350098274649687744727805109832667388976077106283604119659317047029300427654535615520607954860066690469472795582127329838109567378204429631410432280271576043665399631750912371110700583657697618138594682515697308139330094258146845711000574756288702099892104424632528920715370304039491891011
k = 271004500541155723087811662435599167661707170314941243459742113294836446534768135151965831328308161040694067548590031594088859762631471558441649014322943077505497974025105114738408885013303884142928145360484452860379123294539667707746017836518982581020503504643909469106471902357411737287596866256874301055708

b = k**2-4*n
#标准做法
# p = (k+gmpy2.iroot(b,2)[0])/2
# print(p)
# q = k-p
# print(q)

#傻逼做法(我)
s = gmpy2.iroot(b,2)
print(s)
s = 8574305587424840950031798181375283077269032853188823872219760749702588249439058740995333787281994527251763011106832076474728654718873912095772150986134656065039628130639783155799581440764289706481544401219860595699681627815199025892630678136007569044540822780505872489910047133765148327763720919587131802530
p = (s+k)/2
q = k - p
print(p)
print(q)

phi_n=(p-1)*(q-1)
#求逆元
d=libnum.invmod(e,phi_n)
m=pow(c,d,n)
# print(long_to_bytes(m))
print(m)
print(libnum.n2s(int(m)).decode())
30、自家出的题目2:n不互素(多数)
# coding:utf-8
# author jinyunlong
# createtime 2021/10/3 22:35
# 职业   ICBC锅炉房保安
import gmpy2
from Crypto.Util.number import *
n1=16930044065161173900734136386189553113877113734096296087856249195167465752798294415958673256730183890220596592081057935082831411383121574539519605993739147978725359725144211552013239562393701831135255657931518241900713086720396481711914870211847855432900365230497462059132425574404389543614756466083061689714095441176362888720522641557822678888934425847201642440268600155605055984983404992686824055386459550282617089564250764322972280584670035040902345878325026452009387766838890672253859772769712301611099268140725007838290987280692311821656810768346307885858496792959259206534727741660538541922556120248272433726513
e1=73357
c1=14400847014855084306351987212218827277033083140792963724629017102705518404506837597831049823280153666467087830432624376550162827327481237404978528188206838786964789336042138824604371364138735225596023947837812220004028842464646402872221153998707129836918677250626594259638264576258811162238417746529242241947164306420244936516570934659704873123530468770200478354692204126461316627552794276023202687742127017607023185261527183667383399877999638180557191605109970690485268311221578428518519308931278950996294851782458187207780876270087527098323500992450073956991337387990628919241561741857048580173306163102427898022805
n2=16722448396759635848578779142805449069771464318429554606858764477661369447931599336910629523005925646759548500393571133918174791005979649526717941066092232375023732818070816191210949851344325583501690001492757454400918607356724113383916591966128406343851948269504448387395696229927781805320974730894221906106065688066544851118835374133838580280095980381119698972746699083714444669661843252078179564002173311627050678243289513784491137774888987963286305052163422779425871526799716751516573570792715938740402541651715429445447142988174554614184753577652270488430803330677431564635775133431088800966116468418293193872749
e2=65537
c2=12069849507947022548020863599316274748045904991529743176737841195632425321170280834952986932465630502926878297275746516599707944931697518615043121472747699817054175744706257720267151245097203363079472514901206675463547134090103753463026762298232513975553482099930658098926859582868026172463887218652690075845998840297182278776499729948469255603758992127018883376549886531499436711341921197451264092461926741329794331070070351988074601789019037309068558638720438216292097970228168628895374646593246039681957389616090748935890905058413018491260306576429933610753661971425014248040149646050452358784997478346776129052239
n3=18659712307166524122175627624716082198801716537280709974023491908387240336827955721357074975970654336511078946518315478814177536115631994037806873368561975288876065376275958214035891435129052680284688892745012712167120103993027843091406639874224267400000652652407855011582563149499509956235008999957020658651480767809080571391826248738182287537920441105312755749682515835987348316182052815892271618277766658995299732703595382724534060997377347205024950455273673563050642585439044899523705182269504726153300381704595422291465796658547732163707936295464038863825122688772004315293745148001323354628302030833699481044443
e3=67735
c3=2591249478480350572574230179743894181891546451389689568844977727288495573359391207690907818360515423520902778037775310980218715423442778998250319644907820788572419893891520504586376848776266268240894582390425186277145706486360910759863660832577118489434981582591809680401527871438119414771220687745902254761823393573008525960573309441357524169455017132059172445434851080649801804010980925649337739722959353231000985522527829052517535590297662731289267765785432814122417426339007656829705933405619341501505160572265403234578989236058614965628886529723440745734291869693335010534515846665415415336710097751915240313674
p1=gmpy2.gcd(n1,n2)
p2=gmpy2.gcd(n2,n3)
q1=n1/p1
q2=p2
q3=n3/p2
print p1
#122688320580007433043441908879711022860366767230484384342836362113018917777179202717762791440802852036048592595574560261407344456212625728711788257375027094349804121124544508522268054941764742405504026091301457635587789736245655128021711869292889844452091415635495263344306502087395440352543990140491537480037
print p2
phi1=(p1-1)*(q1-1)
phi2=(p1-1)*(p2-1)
phi3=(p2-1)*(q3-1)
d1=gmpy2.invert(e1,phi1)
d2=gmpy2.invert(e2,phi2)
d3=gmpy2.invert(e3,phi3)
m1=pow(c1,d1,n1)
m2=pow(c2,d2,n2)
m3=pow(c3,d3,n3)
flag=long_to_bytes(m1)+long_to_bytes(m2)+long_to_bytes(m3)
print flag


标题:ctfshow刷题_crypto(1)
作者:jyl
地址:http://jinyunlong.xyz/articles/2021/10/04/1633277529231.html