题目出的刚刚好
刚好我不会
刚好别人都会

文章目录

  • 强网先锋polydiv
  • 强网先锋ASR
  • Crypto myJWT
  • Factor

强网先锋polydiv

poly2:


class Polynomial2():'''模二多项式环,定义方式有三种一是从高到低给出每一项的系数>>> Polynomial2([1,1,0,1])x^3 + x^2 + 1二是写成01字符串形式>>> Polynomial2('1101')x^3 + x^2 + 1三是直接给出系数为1的项的阶>>> Poly([3,1,4])x^4 + x^3 + x>>> Poly([]) # 加法元0>>> Poly(0) # 乘法元1>>> Poly(1,2) * Poly(2,3)x^5 + x^3'''def __init__(self,ll):if type(ll) ==  str:ll = list(map(int,ll))self.param = ll[::-1]self.ones = [i for i in range(len(self.param)) if self.param[i] == 1] # 系数为1的项的阶数列表self.Latex = self.latex()self.b = ''.join([str(i) for i in ll]) # 01串形式打印系数self.order = 0 # 最高阶try:self.order = max(self.ones)except:passdef format(self,reverse = True):'''格式化打印字符串默认高位在左reverse = False时,低位在左但是注意定义多项式时只能高位在右'''r = ''if len(self.ones) == 0:return '0'if reverse:return ((' + '.join(f'x^{i}' for i in self.ones[::-1])+' ').replace('x^0','1').replace('x^1 ','x ')).strip()return ((' + '.join(f'x^{i}' for i in self.ones)+' ').replace('x^0','1').replace('x^1 ','x ')).strip()def __call__(self,x):'''懒得写了,用不到'''print(f'call({x})')def __add__(self,other):'''多项式加法'''a,b = self.param[::-1],other.param[::-1]if len(a) < len(b):a,b = b,afor i in range(len(a)):try:a[-1-i] = (b[-1-i] + a[-1-i]) % 2except:breakreturn Polynomial2(a)def __mul__(self,other):'''多项式乘法'''a,b = self.param[::-1],other.param[::-1]r = [0 for i in range(len(a) + len(b) - 1)]for i in range(len(b)):if b[-i-1] == 1:if i != 0:sa = a+[0]*ielse:sa = asa = [0] * (len(r)-len(sa)) + sa#r += np.array(sa)#r %= 2r = [(r[t] + sa[t])%2 for t in range(len(r))]return Polynomial2(r)def __sub__(self,oo):# 模二多项式环,加减相同return self + oodef __repr__(self) -> str:return self.format()def __str__(self) -> str:return self.format()def __pow__(self,a):# 没有大数阶乘的需求,就没写快速幂t = Polynomial2([1])for i in range(a):t *= selfreturn tdef latex(self,reverse=True):'''Latex格式打印...其实就是给两位及以上的数字加个括号{}'''def latex_pow(x):if len(str(x)) <= 1:return str(x)return '{'+str(x)+'}'r = ''if len(self.ones) == 0:return '0'if reverse:return (' + '.join(f'x^{latex_pow(i)}' for i in self.ones[::-1])+' ').replace('x^0','1').replace(' x^1 ',' x ').strip()return (' + '.join(f'x^{latex_pow(i)}' for i in self.ones)+' ').replace('x^0','1').replace(' x^1 ',' x ').strip()def __eq__(self,other):return self.ones == other.onesdef __lt__(self,other):return max(self.ones) < max(other.ones)def __le__(self,other):return max(self.ones) <= max(other.ones)def Poly(*args):'''另一种定义方式Poly([3,1,4]) 或 Poly(3,1,4)'''if len(args) == 1 and type(args[0]) in [list,tuple]:args = args[0]if len(args) == 0:return Polynomial2('0')ll = [0 for i in range(max(args)+1)]for i in args:ll[i] = 1return Polynomial2(ll[::-1])PP = Polynomial2
P = Poly
# 简化名称,按长度区分 P 和 PP
if __name__ == '__main__':p = Polynomial2('10011')p3 = Polynomial2('11111')Q = p*p3

task:

import socketserver
import os, sys, signal
import string, random
from hashlib import sha256from secret import flag
from poly2 import *pad = lambda s:s + bytes([(len(s)-1)%16+1]*((len(s)-1)%16+1))
testCases = 40class Task(socketserver.BaseRequestHandler):def _recvall(self):BUFF_SIZE = 2048data = b''while True:part = self.request.recv(BUFF_SIZE)data += partif len(part) < BUFF_SIZE:breakreturn data.strip()def send(self, msg, newline=True):try:if newline:msg += b'\n'self.request.sendall(msg)except:passdef recv(self, prompt=b'> '):self.send(prompt, newline=False)return self._recvall()def close(self):self.send(b"Bye~")self.request.close()def proof_of_work(self):random.seed(os.urandom(8))proof = ''.join([random.choice(string.ascii_letters+string.digits) for _ in range(20)])_hexdigest = sha256(proof.encode()).hexdigest()self.send(f"sha256(XXXX+{proof[4:]}) == {_hexdigest}".encode())x = self.recv(prompt=b'Give me XXXX: ')if len(x) != 4 or sha256(x+proof[4:].encode()).hexdigest() != _hexdigest:return Falsereturn Truedef guess(self):from Crypto.Util.number import getPrimea,b,c = [getPrime(i) for i in [256,256,128]]pa,pb,pc = [PP(bin(i)[2:]) for i in [a,b,c]]r = pa*pb+pcself.send(b'r(x) = '+str(r).encode())self.send(b'a(x) = '+str(pa).encode())self.send(b'c(x) = '+str(pc).encode())self.send(b'Please give me the b(x) which satisfy a(x)*b(x)+c(x)=r(x)')#self.send(b'b(x) = '+str(pb).encode())return self.recv(prompt=b'> b(x) = ').decode() == str(pb)def handle(self):#signal.alarm(1200)if not self.proof_of_work():returnfor turn in range(testCases):if not self.guess():self.send(b"What a pity, work harder.")returnself.send(b"Success!")else:self.send(b'Congratulations, this is you reward.')self.send(flag)class ThreadedServer(socketserver.ThreadingMixIn, socketserver.TCPServer):pass#class ForkedServer(socketserver.ForkingMixIn, socketserver.TCPServer):
class ForkedServer(socketserver.ThreadingMixIn, socketserver.TCPServer):passif __name__ == "__main__":HOST, PORT = '0.0.0.0', 10000server = ForkedServer((HOST, PORT), Task)server.allow_reuse_address = Trueserver.serve_forever()

GF(2)上的多项式 直接用sagemath求就行了

from string import ascii_letters
from pwn import *
import hashlibfrom tqdm import tqdmp=remote("47.94.166.51", 43249)
p.recvuntil("XXXX+")
c="????"+p.recvuntil(")")[:-1].decode()
print(c)
p.recvuntil("== ")
hash=p.recvuntil("\n")[:-1].decode()
print(hash)letters="0123456789"+ascii_letters
xxxx=0
for i in tqdm(letters):tmp0=c.replace("?",i,1)for j in letters:tmp1=tmp0.replace("?",j,1)for m in letters:tmp2=tmp1.replace("?",m,1)for n in letters:tmp3=tmp2.replace("?",n,1)#print(tmp3)if hashlib.sha256(tmp3.encode()).hexdigest()==hash:XXXX=tmp3[:4]xxxx=1print("found XXXX:",tmp3[:4])breakif xxxx==1:breakif xxxx==1:breakif xxxx==1:breakP.<x>=Zmod(2)[]p.sendlineafter("Give me XXXX:",tmp3[:4])for _ in range(40):print(f"这是第{_}轮")if _ != 0:p.recvuntil("Success!")p.recvuntil("r(x) = ")r=eval(p.recvuntil("\n")[:-1].replace(b"^",b"**"))print(r)p.recvuntil("a(x) = ")a=eval(p.recvuntil("\n")[:-1].replace(b"^",b"**"))print(a)p.recvuntil("c(x) = ")c=eval(p.recvuntil("\n")[:-1].replace(b"^",b"**"))print(c)b=(r-c)/aprint(b)p.sendlineafter("b(x) =",str(b))p.interactive()

强网先锋ASR

from Crypto.Util.number import getPrime
from secret import falg
pad = lambda s:s + bytes([(len(s)-1)%16+1]*((len(s)-1)%16+1))n = getPrime(128)**2 * getPrime(128)**2 * getPrime(128)**2 * getPrime(128)**2
e = 3flag = pad(flag)
print(flag)
assert(len(flag) >= 48)
m = int.from_bytes(flag,'big')
c = pow(m,e,n)print(f'n = {n}')
print(f'e = {e}')
print(f'c = {c}')'''
n = 8250871280281573979365095715711359115372504458973444367083195431861307534563246537364248104106494598081988216584432003199198805753721448450911308558041115465900179230798939615583517756265557814710419157462721793864532239042758808298575522666358352726060578194045804198551989679722201244547561044646931280001
e = 3
c = 945272793717722090962030960824180726576357481511799904903841312265308706852971155205003971821843069272938250385935597609059700446530436381124650731751982419593070224310399320617914955227288662661442416421725698368791013785074809691867988444306279231013360024747585261790352627234450209996422862329513284149
'''

应该使用msieve分解,可以分解512位rsa,但是很奇怪我的yafu分解了很久之后报错缺少文件,而有的人他就有这个msieve,不理解啦,自行github上搜一下吧……

import gmpy2
from Crypto.Util.number import *n = 8250871280281573979365095715711359115372504458973444367083195431861307534563246537364248104106494598081988216584432003199198805753721448450911308558041115465900179230798939615583517756265557814710419157462721793864532239042758808298575522666358352726060578194045804198551989679722201244547561044646931280001
e = 3
c = 945272793717722090962030960824180726576357481511799904903841312265308706852971155205003971821843069272938250385935597609059700446530436381124650731751982419593070224310399320617914955227288662661442416421725698368791013785074809691867988444306279231013360024747585261790352627234450209996422862329513284149n1=gmpy2.iroot(n,2)[0]
p = 225933944608558304529179430753170813347
r = 223213222467584072959434495118689164399
s = 260594583349478633632570848336184053653
q = 218566259296037866647273372633238739089for a in (p,q,r,s):for b in (p,q,r,s):if a==b:continuetry:phi=a*(a-1)*b*(b-1)d=gmpy2.invert(e,phi)m=pow(c,d,a**2*b**2)print(long_to_bytes(m))except:continue

其实也学到了一些东西啦
比如n=pqrs这种情况,可以直接求phi用其中的两个,结果是一样的~
用同余的性质可以轻松验证

Crypto myJWT

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.security.KeyPair;
import java.security.interfaces.ECPrivateKey;
import java.security.interfaces.ECPublicKey;
import java.security.*;
import java.util.Base64;
import java.util.Scanner;import com.alibaba.fastjson.*;class ECDSA{public KeyPair keyGen() throws Exception {KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");keyPairGenerator.initialize(384);KeyPair keyPair = keyPairGenerator.genKeyPair();return keyPair;}public byte[] sign(byte[] str, ECPrivateKey privateKey) throws Exception {Signature signature = Signature.getInstance("SHA384withECDSAinP1363Format");signature.initSign(privateKey);signature.update(str);byte[] sig = signature.sign();return sig;}public boolean verify(byte[] sig, byte[] str ,ECPublicKey publicKey) throws Exception {Signature signature = Signature.getInstance("SHA384withECDSAinP1363Format");signature.initVerify(publicKey);signature.update(str);return signature.verify(sig);}
}public class jwt{public static int EXPIRE = 60;public static ECDSA ecdsa = new ECDSA();public static String generateToken(String user, ECPrivateKey ecPrivateKey) throws Exception {JSONObject header = new JSONObject();JSONObject payload = new JSONObject();header.put("alg", "myES");header.put("typ", "JWT");String headerB64 = Base64.getUrlEncoder().encodeToString(header.toJSONString().getBytes());payload.put("iss", "qwb");payload.put("exp", System.currentTimeMillis() + EXPIRE * 1000);payload.put("name", user);payload.put("admin", false);String payloadB64 = Base64.getUrlEncoder().encodeToString(payload.toJSONString().getBytes());String content = String.format("%s.%s", headerB64, payloadB64);byte[] sig = ecdsa.sign(content.getBytes(), ecPrivateKey);String sigB64 = Base64.getUrlEncoder().encodeToString(sig);return String.format("%s.%s", content, sigB64);}public static boolean verify(String token, ECPublicKey ecPublicKey) throws Exception {String[] parts = token.split("\\.");if (parts.length != 3) {return false;}else {String headerB64 = parts[0];String payloadB64 = parts[1];String sigB64 = parts[2];String content = String.format("%s.%s", headerB64, payloadB64);byte[] sig = Base64.getUrlDecoder().decode(sigB64);return ecdsa.verify(sig, content.getBytes(), ecPublicKey);}}public static boolean checkAdmin(String token, ECPublicKey ecPublicKey, String user) throws Exception{if(verify(token, ecPublicKey)) {String payloadB64 = token.split("\\.")[1];String payloadDecodeString = new String(Base64.getUrlDecoder().decode(payloadB64));JSONObject payload = JSON.parseObject(payloadDecodeString);if(!payload.getString("name").equals(user)) {return false;}if (payload.getLong("exp") < System.currentTimeMillis()) {return false;}return payload.getBoolean("admin");} else {return false;} }public static String getFlag(String token, ECPublicKey ecPublicKey, String user) throws Exception{String err = "You are not the administrator.";if(checkAdmin(token, ecPublicKey, user)) {File file = new File("/root/task/flag.txt");BufferedReader br = new BufferedReader(new FileReader(file));String flag = br.readLine();br.close();return flag;} else {return err;}}public static boolean task() throws Exception {Scanner input = new Scanner(System.in);System.out.print("your name:");String user = input.nextLine().strip();System.out.print(String.format("hello %s, let's start your challenge.\n", user));KeyPair keyPair = ecdsa.keyGen();ECPrivateKey ecPrivateKey = (ECPrivateKey) keyPair.getPrivate();ECPublicKey ecPublicKey = (ECPublicKey) keyPair.getPublic();String menu = "1.generate token\n2.getflag\n>";Integer choice = 0;Integer count = 0;while (count <= 10) {count++;System.out.print(menu);choice = Integer.parseInt(input.nextLine().strip());if(choice == 1) {String token = generateToken(user, ecPrivateKey);System.out.println(token);} else if (choice == 2) {System.out.print("your token:");String token = input.nextLine().strip();String flag = getFlag(token, ecPublicKey, user);System.out.println(flag);input.close();break;} else {input.close();break;}}return true;}public static void main(String[] args) throws Exception {task();}}

题目给了一个用java编写的jwt
直接百度一下SHA384withECDSAinP1363Format就能发现漏洞报告
在特定的java版本下会出现上述漏洞,原理在于ECDSA算法的不安全性
唯一令我异或的是给出的漏洞描述是sign那里替换成64位空字节可以绕过检验
很奇怪啊,学了很久,空字节,可空字节到底是什么呢?
尝试着模拟报告中给出的实验
byte[] blankSignature = new byte[64];
用这个代码生成空字节
出现
[B@15db9742
有些无语
然后就想着安装一下老版本的java,结果半天没找着,就 寄了
赛后看wp我在行啊
写一下n1的wp

payload1 = b'{"typ":"JWT","alg":"myES"}'
payload2 = b'{"iss":"qwb","name":"administrator","admin":true,"exp":2659185892270}'
payload3 = b'\x00' * 64
payload = ''
payload += b64e(payload1)
payload += '.'
payload += b64e(payload2)
payload += '.'
payload += b64e(payload3)
print(payload)

最后是这样的payload
eyJ0eXAiOiJKV1QiLCJhbGciOiJteUVTIn0=.eyJpc3MiOiJxd2IiLCJuYW1lIjoiYWRtaW5pc3RyYXRvciIsImFkbWluIjp0cnVlLCJleHAiOjI2NTkxODU4OTIyNzB9.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
有点意思

总结一下,上面三个都比较简单,但当时只做了第一题,其他两个都属于是明明找到问题了但是还是没做出来,主要问题是见识少了。。。
其实,换个方向去想,这些题都做出来,也进不了前32,哈哈哈,不难受了。

Factor

#encoding:utf-8
from Crypto.Util.number import *
from gmpy2 import *
from random import randint
from flag import flagdef gen1():r = 2while True:p2 = getPrime(1792)p1 = getPrime(1792)q1 = getPrime(512)q2 = getPrime(512)if (abs(p1-p2) < (p1//(2*r*q1*q2))):n1, n2 = (p1**r)*q1, (p2**r)*q2breakphi1 = (p1**(r-1))*(p1-1)*(q1-1)phi2 = (p2**(r-1))*(p2-1)*(q2-1)while True:e1 = randint(5, (p1-1)*(q1-1))e2 = randint(5, (p2-1)*(q2-1))if gcd(e1, e2) == 1 and gcd(phi1, e1) == 1 and gcd(phi2, e2) == 1:breakreturn n11, n12, e11, e12def gen2():r = 7while True:p = getPrime(512)q =  getPrime(512)N = (p**r)*qif len(bin(N)) == 4096:breakidx = (r*(r-1)) / ((r+1)*(r+1))delta = int(pow(mpz(N), idx))phi = (p**(r-1))*(p-1)*(q-1)while True:d1 = getPrime(int(2048*idx)//2)d2 = getPrime(int(2048*idx)//2)if abs(d1-d2) < delta:m1 = invert(d1, phi)m2 = invert(d2, phi)breake2 = 0x10001return n2, e2, m1, m2def gen3():r = 7while True:p = getPrime(512)q =    getPrime(512)N = (p**r)*qphi = (p**(r-1))*(p-1)*(q-1)if len(bin(N))-2 == 4096:breakidx = (r*(r-1)) / ((r+1)*(r+1))delta = int(pow(mpz(N), idx))while True:b = getRandomNBitInteger(int(2048*idx)//2)a = getRandomNBitInteger(int(2048*idx)//2)if a*b < delta:e = invert(a, phi)*breturn n3, e3, bn11, n12, e11, e12 = gen1()
print(f"n11={n11}\nn12={n12}\ne11={e11}\ne12={e12}\n")
n2, e2, m1, m2 = gen2()
print(f"n2={n2}\ne2={e2}\n")
n3, e3, b = gen3()
print(f"n3={n3}\ne3={e3}\n")m3 = bytes_to_long(flag)
c11 = powmod(m1, e11, n11)
c12 = powmod(m2, e12, n12)
c2 = powmod(b, e2, n2)
c3 = powmod(m3, e3, n3)
print(f"c11={c11}\nc12={c12}\nc2={c2}\nc3={c3}\n")
'''
n11=801049932940568005269978912396585741498810389425615966036828877784238116634177290247194019425111606811005728521368879065336038221361037062407029836155148874719789714345603547779284558101833801155509762818376470874215789574939002212274399950433269775325144015468620263028557804618774240232988157961712628677901130814703917513004114547234375629747176834581166306552311075522669403347828095831520693563291249869832390698646691647204371133362254846234990175138047928703289833460734235302093916147489509206061923877623300596194317059884824322527532662470348274079800781120104946546063500763852622187404608639542858285661288293918912184354236687975919510300221932074135531028314170475917110204254042336116619335841213418990605590620842511615815443114612333881430920769002933370887494558640833005339906706603497809846863863967391543647049224309556936909768179259581851520214669904560467640473144481633920438487615788689262961741053146610554997224861331949716721056553499531186695425439163222802917813140266513735841447717418846360096652592844940362932171019143434080184728093326143821165097895058935372215708948088248596585127475770021962501262915274497478428868130455122612016408381607561200802267038869516896665387576895570245272035575637
n12=635401970340205725139325006504978344512744926958688031423448003992072769931808217486709574151492230879374574313457662436423263437792389711379687512056391117410807565492548718691166183372633151644917135272259770997096195518489056319350258673723095417922153182423913759272893696867426193704479752772511081457729513843682588951499551132432923147997238597538055902932123792252593514225328196541483451747314048080824405530742533473914329294346486691684904100406972073037050089861816604505650042953778360621934380815999541183067585498606053857125775979915077329566722531830089714823979965934190338538564188253271016367299890015449611141166780048763403252309160517164569110740561584100839212138661881615351382946813818078899882595313362934594951895560189003438775450675343590147821186953526262224973333962454561275321925151619178204499342339749637758100126893330994252902926509705617882239610380420830791088907378397226817514095468815228186716220057075095711894070032344613244803934541318573847029365563159918970404057137270884587905766828750387753130065274147902379993224780149663600462492281891320702134153853359393588902750423972068679293373333869389393970353760507436913233657422185531482023237384247535554666481760197851108297145147371
e11=1898839980562048754607069073527844852132536432440793106124181406514770178066775988232362054809850074774981836898118651469424148725970708199461113088705044905633592578936333918328544505910996746428679299419879472444790941363558025887620570856598548320246426354974395765243741646121743413447132297230365355148066914830856904433750379114692122900723772114991199979638987571559860550883470977246459523068862898859694461427148626628283198896659337135438506574799585378178678790308410266713256003479022699264568844505977513537013529212961573269494683740987283682608189406719573301573662696753903050991812884192192569737274321828986847640839813424701894578472933385727757445011291134961124822612239865
e12=1262647419018930022617189608995712260095623047273893811529510754596636390255564988827821761126917976430978175522450277907063247981106405519094560616378241247111698915199999363948015703788616554657275147338766805289909261129165025156078136718573006479030827585347458143645738353716189131209398056741864848486818076440355778886993462012533397208330925057305502653219173629466948635110352752162442552541812665607516753186595817376029707777599029040724727499952161261179707271814405907165207904499722122779096230563548011491932378429654764486855147873135769116637484240454596231092684424572258119768093562747249251518965380465994055049411715353547147466711949391814550591591830515262296556050946881n2=209798341155088334158217087474227805455138848036904381404809759100627849272231840321985747935471287990313456209656625928356468120896887536235496490078123448217785939608443507649096688546074968476040552137270080120417769906047001451239544719039212180059396791491281787790213953488743488306241516010351179070869410418232801398578982244984544906579574766534671056023774009163991804748763929626213884208260660722705479782932001102089367261720194650874553305179520889083170973755913964440175393646890791491057655226024046525748177999422035469428780228224800114202385209306803288475439775037067014297973202621118959024226798935588827359265962780792266516120013602384766460619793738405476219362508944225007365127768741191310079985425349292613888185378948854602285379329682053663283534930182589905986063348509703027498270111412063194971956202729807710253369312175636837558252924035002153389909587349043986253518050303628071319876207392440085675892353421232158925122721273720564784886530611286461575045181073744696415657043278123662980166364494583141297996445429477446442693717498789391918530672770193730629928408766563592081857706608049076318165712479742423149330311238462044666384622153280310696667586565906758451118241914402257039981388209
e2=65537n3=539779851369541956878655738599584730199799866957191805784596190682932284216781781433367450841202917758999300635019369629627621029957135109806205877317954671312041249493462048283611940752235036153024920172209763260723728345918562258401803973624430150143563078517485996070862532682695228590709019451174548520135142052216785774589096706631010293690859363524584240662502290912412366366114571976050857239915691266377257797199583543940504695517331512813468837128344612227973709974625418257243011036826241599265375741977853552204640800449679679351666009764297016524814036295707311913711955324055690490892097177271718850857268982130811714517356073266905474635370690445031512184247179039751734276906533177939993769044135143389748416635981226449566039039202521305851567296884751935162651063209779647359922622084851547605090230221057349511482738300221222563908357379545905837110168948295030747460300104202323692732549831403834387939156877086852393515817984772384147449841124275061609701453997579569931391166586163299940486204581696722731952467570857217406030804590055255431828403195798003509083922294733709507134156466158642941338493323430671502043066148246348074878064089651235355282144209668143249348243220714471988019011613749340243917652821
e3=8179300978753084587812861894047395225516049110376948812109811319430275614612773726672345893359691900281432484382670047044697374818043512731533402576374645405477207239801498428774783768163880078495448747421425078521981578408638790336528372019271073712013371141939808017049399434858687299480461753638164719404612128939787055797762174745092074547412183349192156638711750872083313795551439465507724807626674514935170104573715458782366469587138508845980490673890245713729782917089910271980557159592807350504157192913530007199510144004848020221181558472160543018733124225266127379373751910439604459368078652499029070936707349862139053913745186413782066470461478961703013591655136140060879250067379283913798867648758171004535775565306842444545755351202796833177560656564652632975685912935281581268141803696686952259539945588609591385807620108279333498170028167338690235117003515264281843953984997958878272347778561933726792473981855755454522886321669676790813189668084373153897754540290867346751033567500922477317530445967753955221454744946208555394588111484610700789566547507402309549957740815535069057837915204852490930168843605732632328017129154852857227895362549146737618906180651623216848500491438142456250653458053922622240299736136335179639180898730269690699965799644757774472147210271111150769048976871249731156387939260749192370361488285775377622944817570292095201906142567403539151179209316853493906909989301225903409448461436855145c11=18979511327426975645936984732782737165217332092805655747550406443960209507493506811471688957217003792679188427155591583024966608843371190136274378868083075515877811693937328204553788450031542610082653080302874606750443090466407543829279067099563572849101374714795279414177737277837595409805721290786607138569322435729584574023597293220443351227559400618351504654781318871214405850541820427562291662456382362148698864044961814456827646881685994720468255382299912036854657082505810206237294593538092338544641919051145900715456411365065867357857347860000894624247098719102875782712030938806816332901861114078070638796157513248160442185781635520426230183818695937457557248160135402734489627723104008584934936245208116232179751448263136309595931691285743580695792601141363221346329077184688857290503770641398917586422369221744736905117499140140651493031622040723274355292502182795605723573863581253354922291984335841915632076694172921289489383700174864888664946302588049384130628381766560976143458735712162489811693014419190718601945154153130272620025118408017441490090252674737105557818759190934585829634273698371996797545908125156282869589331913665938038870431655063063535672001112420959158339261862052308986374193671007982914711432579
c12=336587005671304527566745948355290412636261748969581976214239578621816863343117433524033533838636941679300497270909696775021031004312477997130741361709262822736904340641138652359632950455651920464042448022467664596484055174270895170499076347333381222768518599018520948098943626229061996126260154604038101543546588917619576702866444998578555907070990331574722135141778182631559802154493815687284077524469331290249057291163803290619701104007028836609832847351748020354798788508790258935718399783002069490123663345156902440501507117289747695510266461539019431610123351176227443612317037899257774045751487135646052309277098939919088029284437221840182769808850184827681307611389353392683707516141736067793897378911235819049432542758429901945202632117089595899280390575706266239252841152490534353760118231918190110043319877744119083811214707593122757409240645257409097436061825613686773916466122693168971062418046703969144004779270391320645495586024342668002497155358623795942692477164489475917351003149045087283510728981096449890130735055015075557614253867698702479920619299919816768972581273507837309179450374634916567083251630203067065663910073926990517108921490442919372774170201239734064819301693527366233007925670043499415100789027665
c2=18352572608055902550350386950073774530453857897248738030380007830701135570310622004368605208336922266513238134127496822199799761713782366178177809597137102612444147565578155260524747439899150012223027218489946124086276814899675563837669559795153349686434242738207425653079514376089070980797596457151965772460109519623572502109592612394316680202287712465721767341302234806130244551387296133051760893033194962691942040228545508895009195291106297581470066545991352668826197346830561010198417527057944507902143965634058848276017283478933675052993657822322866778994956205033704582047618324071045349072526540250707463112668579342537349567247810715604220690215313641329522674080146047291570752430231923566302463491877377617044768978997438596643458475128936850994934029476030136643053997549253792076260765459166618369864942681056864815996253315631930002738854235841120321870075261782250357506436825550088826469396508045912258303652912217151127280959435741419961721418428605515096160344688795655562889755165362006775317188009008288782691705879510655892181975003485714604340542378477388225736316682379616676770234557939471098919647053799313777248678455620231721202780830980063824003076308811540534492317719811588898727134190545533822501681653
c3=113097822337683973761068913398570777162211043704088253732500045618770280334319497174908657828372816818344430304314992760410247741225285170975119344962728883084314382093407445567724674775086423808679124143380073906159023182353116556175251427048715466914368972746661938211846262612414049036821553068430149530397389927209475908905748728402722287875974303298260579839357610962198145974153609818939841880084892796820949226354126424023144300953584658958900737493704530725894948802258740332090822797815745616247879170037794873059391625680745994045522420168248552864215035136318711240256011217929372430302003068882829637056296413462078222453765071094277727760527662423010417144554652783429899139309180017349156600053882338180319473460877576898373222480215735280046214925463242092830060830764299787309912687294672319845054775281463150375545716818434962456139485501224661520991156961587158843064393883274763714930309353593180897123378717852182761518709151878662808890356934477932099818218743384674756674800089177733447066489275506387382342429495897972218764782517198727316942685748481956118012927027254979181519862451112593068440686462293151078537886822555211870303467014484443432209106264020502334805536091587252238173816637270028678636848763'''

这是一道paper题
论文:https://eprint.iacr.org/2015/399.pdf
还行

from Crypto.Util.number import *
import owiener
import gmpy2from math import floordef continuedFra(x, y): #不断生成连分数的项cF = []while y:cF += [x//y]x, y = y, x % yreturn cF
def Simplify(ctnf): #化简numerator = 0denominator = 1for x in ctnf[::-1]: #注意这里是倒序遍历numerator, denominator = denominator, x * denominator + numeratorreturn (numerator, denominator) #把连分数分成分子和算出来的分母
def getit(c):cf=[]for i in range(1,len(c)):cf.append(Simplify(c[:i])) #各个阶段的连分数的分子和分母return cf #得到一串连分数n11=801049932940568005269978912396585741498810389425615966036828877784238116634177290247194019425111606811005728521368879065336038221361037062407029836155148874719789714345603547779284558101833801155509762818376470874215789574939002212274399950433269775325144015468620263028557804618774240232988157961712628677901130814703917513004114547234375629747176834581166306552311075522669403347828095831520693563291249869832390698646691647204371133362254846234990175138047928703289833460734235302093916147489509206061923877623300596194317059884824322527532662470348274079800781120104946546063500763852622187404608639542858285661288293918912184354236687975919510300221932074135531028314170475917110204254042336116619335841213418990605590620842511615815443114612333881430920769002933370887494558640833005339906706603497809846863863967391543647049224309556936909768179259581851520214669904560467640473144481633920438487615788689262961741053146610554997224861331949716721056553499531186695425439163222802917813140266513735841447717418846360096652592844940362932171019143434080184728093326143821165097895058935372215708948088248596585127475770021962501262915274497478428868130455122612016408381607561200802267038869516896665387576895570245272035575637
n12=635401970340205725139325006504978344512744926958688031423448003992072769931808217486709574151492230879374574313457662436423263437792389711379687512056391117410807565492548718691166183372633151644917135272259770997096195518489056319350258673723095417922153182423913759272893696867426193704479752772511081457729513843682588951499551132432923147997238597538055902932123792252593514225328196541483451747314048080824405530742533473914329294346486691684904100406972073037050089861816604505650042953778360621934380815999541183067585498606053857125775979915077329566722531830089714823979965934190338538564188253271016367299890015449611141166780048763403252309160517164569110740561584100839212138661881615351382946813818078899882595313362934594951895560189003438775450675343590147821186953526262224973333962454561275321925151619178204499342339749637758100126893330994252902926509705617882239610380420830791088907378397226817514095468815228186716220057075095711894070032344613244803934541318573847029365563159918970404057137270884587905766828750387753130065274147902379993224780149663600462492281891320702134153853359393588902750423972068679293373333869389393970353760507436913233657422185531482023237384247535554666481760197851108297145147371
e11=1898839980562048754607069073527844852132536432440793106124181406514770178066775988232362054809850074774981836898118651469424148725970708199461113088705044905633592578936333918328544505910996746428679299419879472444790941363558025887620570856598548320246426354974395765243741646121743413447132297230365355148066914830856904433750379114692122900723772114991199979638987571559860550883470977246459523068862898859694461427148626628283198896659337135438506574799585378178678790308410266713256003479022699264568844505977513537013529212961573269494683740987283682608189406719573301573662696753903050991812884192192569737274321828986847640839813424701894578472933385727757445011291134961124822612239865
e12=1262647419018930022617189608995712260095623047273893811529510754596636390255564988827821761126917976430978175522450277907063247981106405519094560616378241247111698915199999363948015703788616554657275147338766805289909261129165025156078136718573006479030827585347458143645738353716189131209398056741864848486818076440355778886993462012533397208330925057305502653219173629466948635110352752162442552541812665607516753186595817376029707777599029040724727499952161261179707271814405907165207904499722122779096230563548011491932378429654764486855147873135769116637484240454596231092684424572258119768093562747249251518965380465994055049411715353547147466711949391814550591591830515262296556050946881
c11=18979511327426975645936984732782737165217332092805655747550406443960209507493506811471688957217003792679188427155591583024966608843371190136274378868083075515877811693937328204553788450031542610082653080302874606750443090466407543829279067099563572849101374714795279414177737277837595409805721290786607138569322435729584574023597293220443351227559400618351504654781318871214405850541820427562291662456382362148698864044961814456827646881685994720468255382299912036854657082505810206237294593538092338544641919051145900715456411365065867357857347860000894624247098719102875782712030938806816332901861114078070638796157513248160442185781635520426230183818695937457557248160135402734489627723104008584934936245208116232179751448263136309595931691285743580695792601141363221346329077184688857290503770641398917586422369221744736905117499140140651493031622040723274355292502182795605723573863581253354922291984335841915632076694172921289489383700174864888664946302588049384130628381766560976143458735712162489811693014419190718601945154153130272620025118408017441490090252674737105557818759190934585829634273698371996797545908125156282869589331913665938038870431655063063535672001112420959158339261862052308986374193671007982914711432579
c12=336587005671304527566745948355290412636261748969581976214239578621816863343117433524033533838636941679300497270909696775021031004312477997130741361709262822736904340641138652359632950455651920464042448022467664596484055174270895170499076347333381222768518599018520948098943626229061996126260154604038101543546588917619576702866444998578555907070990331574722135141778182631559802154493815687284077524469331290249057291163803290619701104007028836609832847351748020354798788508790258935718399783002069490123663345156902440501507117289747695510266461539019431610123351176227443612317037899257774045751487135646052309277098939919088029284437221840182769808850184827681307611389353392683707516141736067793897378911235819049432542758429901945202632117089595899280390575706266239252841152490534353760118231918190110043319877744119083811214707593122757409240645257409097436061825613686773916466122693168971062418046703969144004779270391320645495586024342668002497155358623795942692477164489475917351003149045087283510728981096449890130735055015075557614253867698702479920619299919816768972581273507837309179450374634916567083251630203067065663910073926990517108921490442919372774170201239734064819301693527366233007925670043499415100789027665cf=continuedFra(n11,n12)
frac=getit(cf)
r=2
for q2,q1 in frac[1:]:if n11%q1==0 and n12%q2==0:p1=gmpy2.iroot(n11//q1,2)[0]#print(p1)p2=gmpy2.iroot(n12//q2,2)[0]#print(p2)phi1 = p1*(p1-1)*(q1-1)phi2 = p2*(p2-1)*(q2-1)d1=gmpy2.invert(e11,phi1)d2=gmpy2.invert(e12,phi2)m1=pow(c11,d1,n11)m2=pow(c12,d2,n12)break#print(m1)
#print(m2)
r=7
n2=209798341155088334158217087474227805455138848036904381404809759100627849272231840321985747935471287990313456209656625928356468120896887536235496490078123448217785939608443507649096688546074968476040552137270080120417769906047001451239544719039212180059396791491281787790213953488743488306241516010351179070869410418232801398578982244984544906579574766534671056023774009163991804748763929626213884208260660722705479782932001102089367261720194650874553305179520889083170973755913964440175393646890791491057655226024046525748177999422035469428780228224800114202385209306803288475439775037067014297973202621118959024226798935588827359265962780792266516120013602384766460619793738405476219362508944225007365127768741191310079985425349292613888185378948854602285379329682053663283534930182589905986063348509703027498270111412063194971956202729807710253369312175636837558252924035002153389909587349043986253518050303628071319876207392440085675892353421232158925122721273720564784886530611286461575045181073744696415657043278123662980166364494583141297996445429477446442693717498789391918530672770193730629928408766563592081857706608049076318165712479742423149330311238462044666384622153280310696667586565906758451118241914402257039981388209
c2=18352572608055902550350386950073774530453857897248738030380007830701135570310622004368605208336922266513238134127496822199799761713782366178177809597137102612444147565578155260524747439899150012223027218489946124086276814899675563837669559795153349686434242738207425653079514376089070980797596457151965772460109519623572502109592612394316680202287712465721767341302234806130244551387296133051760893033194962691942040228545508895009195291106297581470066545991352668826197346830561010198417527057944507902143965634058848276017283478933675052993657822322866778994956205033704582047618324071045349072526540250707463112668579342537349567247810715604220690215313641329522674080146047291570752430231923566302463491877377617044768978997438596643458475128936850994934029476030136643053997549253792076260765459166618369864942681056864815996253315631930002738854235841120321870075261782250357506436825550088826469396508045912258303652912217151127280959435741419961721418428605515096160344688795655562889755165362006775317188009008288782691705879510655892181975003485714604340542378477388225736316682379616676770234557939471098919647053799313777248678455620231721202780830980063824003076308811540534492317719811588898727134190545533822501681653
e2=65537
m1=int(m1)
m2=int(m2)a=(m2-m1)*gmpy2.invert(m1*m2,n2)%n2
a=int(a)P.<x>=Zmod(n2)[]
f=x-int(a)
x0=f.monic().small_roots(X=2^672,beta=0.5)[0]
x0=int(x0)p=gmpy2.gcd(x0-a,n2)
p=gmpy2.iroot(p,6)[0]
q=n2//(p^r)
phi=(p**r-p**(r-1))*(q-1)
d=gmpy2.invert(e2,phi)
b=pow(c2,d,n2)
b=int(b)n3=539779851369541956878655738599584730199799866957191805784596190682932284216781781433367450841202917758999300635019369629627621029957135109806205877317954671312041249493462048283611940752235036153024920172209763260723728345918562258401803973624430150143563078517485996070862532682695228590709019451174548520135142052216785774589096706631010293690859363524584240662502290912412366366114571976050857239915691266377257797199583543940504695517331512813468837128344612227973709974625418257243011036826241599265375741977853552204640800449679679351666009764297016524814036295707311913711955324055690490892097177271718850857268982130811714517356073266905474635370690445031512184247179039751734276906533177939993769044135143389748416635981226449566039039202521305851567296884751935162651063209779647359922622084851547605090230221057349511482738300221222563908357379545905837110168948295030747460300104202323692732549831403834387939156877086852393515817984772384147449841124275061609701453997579569931391166586163299940486204581696722731952467570857217406030804590055255431828403195798003509083922294733709507134156466158642941338493323430671502043066148246348074878064089651235355282144209668143249348243220714471988019011613749340243917652821
e3=8179300978753084587812861894047395225516049110376948812109811319430275614612773726672345893359691900281432484382670047044697374818043512731533402576374645405477207239801498428774783768163880078495448747421425078521981578408638790336528372019271073712013371141939808017049399434858687299480461753638164719404612128939787055797762174745092074547412183349192156638711750872083313795551439465507724807626674514935170104573715458782366469587138508845980490673890245713729782917089910271980557159592807350504157192913530007199510144004848020221181558472160543018733124225266127379373751910439604459368078652499029070936707349862139053913745186413782066470461478961703013591655136140060879250067379283913798867648758171004535775565306842444545755351202796833177560656564652632975685912935281581268141803696686952259539945588609591385807620108279333498170028167338690235117003515264281843953984997958878272347778561933726792473981855755454522886321669676790813189668084373153897754540290867346751033567500922477317530445967753955221454744946208555394588111484610700789566547507402309549957740815535069057837915204852490930168843605732632328017129154852857227895362549146737618906180651623216848500491438142456250653458053922622240299736136335179639180898730269690699965799644757774472147210271111150769048976871249731156387939260749192370361488285775377622944817570292095201906142567403539151179209316853493906909989301225903409448461436855145c3=113097822337683973761068913398570777162211043704088253732500045618770280334319497174908657828372816818344430304314992760410247741225285170975119344962728883084314382093407445567724674775086423808679124143380073906159023182353116556175251427048715466914368972746661938211846262612414049036821553068430149530397389927209475908905748728402722287875974303298260579839357610962198145974153609818939841880084892796820949226354126424023144300953584658958900737493704530725894948802258740332090822797815745616247879170037794873059391625680745994045522420168248552864215035136318711240256011217929372430302003068882829637056296413462078222453765071094277727760527662423010417144554652783429899139309180017349156600053882338180319473460877576898373222480215735280046214925463242092830060830764299787309912687294672319845054775281463150375545716818434962456139485501224661520991156961587158843064393883274763714930309353593180897123378717852182761518709151878662808890356934477932099818218743384674756674800089177733447066489275506387382342429495897972218764782517198727316942685748481956118012927027254979181519862451112593068440686462293151078537886822555211870303467014484443432209106264020502334805536091587252238173816637270028678636848763P.<x>=Zmod(n3)[]
f=e3*x-b
x0=f.monic().small_roots(X=2^672,beta=0.5)[0]
x0=int(x0)
p=gmpy2.iroot(gcd(e3*x0-b,n3),6)[0]
q=n3//(p^7)phi=(p^7-p^6)*(q-1)
d=gmpy2.invert(e3,phi)
m=pow(c3,d,n3)
print(long_to_bytes(int(m)))

还有一道Lattice看不明白,n1的师傅写wp从来不写原理TAT,看明白了再补

强网杯2022 crypto 复现相关推荐

  1. 最后一位被整除 oracle,【CTF WriteUp】2020第四届强网杯部分Crypto题解

    写在前边 强网杯还是难..去年正赛赛题一道都不会,只能靠临时补充的强网先锋题目拿分的情景历历在目.今年也没好哪去,只能写一点是一点吧. modestudy 这道题是一道六合一块密码大杂烩,考察基础知识 ...

  2. 强网杯2021 misc 复现

    对强网杯BlueTeaming.ISO1995.CipherMan.Threebody的复现 (纯萌新学步) 可以参考mumuzi大佬的wp https://blog.csdn.net/qq_4288 ...

  3. 2020强网杯部分题目复现

    本文目录 前言 强网先锋 Funhash 主动 upload web辅助 miscstudy 总结 前言 代码烂,游戏菜,天天等着大佬带.这次做出来三道题,无缘线下赛了,看来以后要找个大腿抱着才行(开 ...

  4. 强网杯部分Crypto题解

    周末打了两天强网杯,被大佬虐成狗,web狗做不出来去搞密码.... 爆出三道密码题,题解如下: 题目名称:streamgame1 操作: 分析下载的压缩包,给了一个python脚本和key,key值1 ...

  5. 强网杯2022 pwn 赛题解析——yakacmp

    这道题在比赛中是笔者的队友负责的,但可惜的是最后的flag差了几秒没交上.这里借用一下他的exp做一篇分析文章. 这是一个用C++写的vm题,内部实现了各种指令到机器码的转换功能.下面就来分块分析一下 ...

  6. 【Reverse】2022 强网杯 game

    [Reverse]2022 强网杯 game 前言 复现一下这题,因为手头有环境可以学学.强网的时候根本没看. backup还原 直接GitHub的链接 可以还原出apk 摸瓜分析 在线网站分析 发现 ...

  7. 2019强网杯crypto writeup

    本次write包含以下题目 copperstudy randomstudy 强网先锋-辅助 copperstudy 题目描述 nc 119.3.245.36 12345 连上去返回 [+]proof: ...

  8. [强网杯2021]XBUUCTF[QWB2021 Quals]popmaster复现记录

    给自动化代码审计的大佬跪了. 出题人写的WP在这里:强网杯[pop_master]与[陀那多]赛题的出题记录 复现可以到BUUCTF,启动[QWB2021 Quals]popmaster这道题就ok. ...

  9. [网络安全提高篇] 一一〇.强网杯CTF的Web Write-Up(上) 寻宝、赌徒、EasyWeb、pop_master

    强网杯作为国内最好的CTF比赛之一,搞安全的博友和初学者都可以去尝试下.首先,让我们观摩下这些大神队伍,包括0x300R.eee.0ops.AAA.NeSE.Nu1L等,真的值得我们去学习.其次,非常 ...

  10. 强网杯Web部分review

    0x01 上个月强网杯结束,看了一下Web题目,代码审计及php 反序列化等.本着学习的态度,试着本地复现一下.靶机下载:https://github.com/glzjin/qwb_2019_uplo ...

最新文章

  1. linux 替换文件中某个字符串_word中如何删除包含某个特定字符串的整个段落?...
  2. 让seo效果起死回生的妙招
  3. 【你知道HHTP各种状态代表什么意思吗?】
  4. sql查询时间大于某一时间_查询时间从24分钟到2秒钟:记一次神奇的SQL优化
  5. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...
  6. Spring5参考指南: BeanWrapper和PropertyEditor
  7. C语言-01基础语法
  8. java mysql emoj报错_MySQL插入emoji表情报错 SQLException: Incorrect string value 的两种解决方案...
  9. UNet以ResNet34为backbone in keras
  10. tomcat版本号进行隐藏或者删除
  11. stm32智能避障小车(三)之L298N
  12. android版here地图下载,HERE WeGo地图安卓版
  13. Build-dep linux 知乎,apt-get安装和apt-get build-dep有什么区别?
  14. 如何解决微软自带输入法突然变成繁体
  15. 解构2019世界人工智能大会:三大变化,十年趋势,一场地球与火星的碰撞
  16. 线程池,是时候做个了结了!
  17. 【JavaWeb】JSP:基本语法大全
  18. Wifi密码破解实战
  19. 上交计算机考研专业课,2018上交考研经验贴
  20. Oracle 字符集从GBK升级到Utf8

热门文章

  1. 韩寒《三重门》精彩语录
  2. 统计学复习笔记(三)—— 置信区间(总体均值/比例/方差,总体均值之差/比例之差/方差之比)
  3. 二十一. 触发器的创建
  4. 蓝桥杯算法训练VIP-调和数列问题
  5. 伴随矩阵和逆矩阵的关系证明
  6. 动图gif怎么制作?制作方法你学会了吗?
  7. Docker镜像无法被删除的解决方法
  8. 文献阅读--Scaling Laws for Neural Lauguage Models
  9. 英语口语8级是这么炼成的!
  10. .Net 调用中国气象台Web Service