失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > BJD

BJD

时间:2020-02-19 21:10:00

相关推荐

BJD

BJDCTF

BeforeCrypto这是base??easyrsaPolybiusrsa_outputRSAsignin1编码与调制伏羲六十四卦 After

Before

BJD又来了一个比赛,但是当时我各种七七八八的事,没打,这是我事后在buu上复现的wp

Crypto

这是base??

dict:{0: ‘J’, 1: ‘K’, 2: ‘L’, 3: ‘M’, 4: ‘N’, 5: ‘O’, 6: ‘x’, 7: ‘y’, 8: ‘U’, 9: ‘V’, 10: ‘z’, 11: ‘A’, 12: ‘B’, 13: ‘C’, 14: ‘D’, 15: ‘E’, 16: ‘F’, 17: ‘G’, 18: ‘H’, 19: ‘7’, 20: ‘8’, 21: ‘9’, 22: ‘P’, 23: ‘Q’, 24: ‘I’, 25: ‘a’, 26: ‘b’, 27: ‘c’, 28: ‘d’, 29: ‘e’, 30: ‘f’, 31: ‘g’, 32: ‘h’, 33: ‘i’, 34: ‘j’, 35: ‘k’, 36: ‘l’, 37: ‘m’, 38: ‘W’, 39: ‘X’, 40: ‘Y’, 41: ‘Z’, 42: ‘0’, 43: ‘1’, 44: ‘2’, 45: ‘3’, 46: ‘4’, 47: ‘5’, 48: ‘6’, 49: ‘R’, 50: ‘S’, 51: ‘T’, 52: ‘n’, 53: ‘o’, 54: ‘p’, 55: ‘q’, 56: ‘r’, 57: ‘s’, 58: ‘t’, 59: ‘u’, 60: ‘v’, 61: ‘w’, 62: ‘+’, 63: ‘/’, 64: ‘=’}

chipertext:

FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw

exp:

import base64dict:{0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h', 33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}base64_list=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/']chipertext='FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw'res=''for i in range(len(chipertext)):for j in range(64):if(dict[j]==chipertext[i]):res+=base64_list[j]flag=base64.b64decode(res)print(flag)

BJD{D0_Y0u_kNoW_Th1s_b4se_map}

easyrsa

from Crypto.Util.number import getPrime,bytes_to_longfrom sympy import Derivativefrom fractions import Fractionfrom secret import flagp=getPrime(1024)q=getPrime(1024)e=65537n=p*qz=Fraction(1,Derivative(arctan(p),p))-Fraction(1,Derivative(arth(q),q))m=bytes_to_long(flag)c=pow(m,e,n)print(c,z,n)'''output:c=792254786685776145980749150265421628301277617778951154935067295810181028134840228409831014779654943068925380351099487745537268549410652654479620858691324110367182025648788407041599943091386227543182157746202947099572389676084392706406084307657000104665696654409155006313203957292885743791715198781974205578654792123191584957665293208390453748369182333152809882312453359706147808198922916762773721726681588977103877454119043744889164529383188077499194932909643918696646876907327364751380953182517883134591810800848971719184808713694342985458103006676013451912221080252735948993692674899399826084848622145815461035z=3211574867762320966747162287218527507025792476601502805267359839059393284316595882933372289732127274076434587519333300142473010344694803885168557548801202495933226215437763329280242113556524498457559562872900811602056944423967403777623306961880757613246328729616643032628964072931272085866928045973799374711846825157781056965164178505232524245809179235607571567174228822561697888645968559343608375331988097157145264357626738141646556353500994924115875748198318036296898604097000938272195903056733565880150540275369239637793975923329598716003350308259321436752579291000355560431542229699759955141152914708362494482n=1531074516133689541340669000932476689179248896951942047235448901612351128459309145825547569298479821101249094161867207686537607047447968708758990950136380924747359052570549594098569970632854351825950729752563502284849263730127586382522703959893392329333760927637353052250274195821469023401443841395096410231843592101426591882573405934188675124326997277775238287928403743324297705151732524641213516306585297722190780088180705070359469719869343939106529204798285957516860774384001892777525916167743272419958572055332232056095979448155082465977781482598371994798871917514767508394730447974770329967681767625495394441'''

思路:RSA,求p,q,根据加密脚本里的这个式子可以解得p,q

z=Fraction(1,Derivative(arctan§,p))-Fraction(1,Derivative(arth(q),q))

Fraction(a,b)相当于a/b

Derivative()是求导

arctan 和arth 是反正切函数和反双曲函数

arctan§的导数=1/(1+p²)

arth(q)的导数=1/(1-q²)

数学化简后得到:

p²+q²

那现在的思路就是解方程,得到p,q

z=p²+q²,n=p*q

from sympy import*from fractions import*from sympy.abc import p,qfrom gmpy2 import*from libnum import*e = 65537c = 792254786685776145980749150265421628301277617778951154935067295810181028134840228409831014779654943068925380351099487745537268549410652654479620858691324110367182025648788407041599943091386227543182157746202947099572389676084392706406084307657000104665696654409155006313203957292885743791715198781974205578654792123191584957665293208390453748369182333152809882312453359706147808198922916762773721726681588977103877454119043744889164529383188077499194932909643918696646876907327364751380953182517883134591810800848971719184808713694342985458103006676013451912221080252735948993692674899399826084848622145815461035z = 3211574867762320966747162287218527507025792476601502805267359839059393284316595882933372289732127274076434587519333300142473010344694803885168557548801202495933226215437763329280242113556524498457559562872900811602056944423967403777623306961880757613246328729616643032628964072931272085866928045973799374711846825157781056965164178505232524245809179235607571567174228822561697888645968559343608375331988097157145264357626738141646556353500994924115875748198318036296898604097000938272195903056733565880150540275369239637793975923329598716003350308259321436752579291000355560431542229699759955141152914708362494482n = 1531074516133689541340669000932476689179248896951942047235448901612351128459309145825547569298479821101249094161867207686537607047447968708758990950136380924747359052570549594098569970632854351825950729752563502284849263730127586382522703959893392329333760927637353052250274195821469023401443841395096410231843592101426591882573405934188675124326997277775238287928403743324297705151732524641213516306585297722190780088180705070359469719869343939106529204798285957516860774384001892777525916167743272419958572055332232056095979448155082465977781482598371994798871917514767508394730447974770329967681767625495394441PQ=solve([pow(p,2)+pow(q,2)-z,p*q-n],[p,q])print(PQ)p = 10590919525992134965666457090419924296911090280447773466092733031146099789973162216372896838075729419627726361538652579529308610314213105128282050307177125962302515483190468569376643751587606016315185736245896434947691528567696271911398179288329609207435393579332931583829355558784305002360873458907029141q = 144564833334456076455156647979862690498796694770100520405218930055633597500009574663803955456004439398699669751249623406199542605271188909145969364476344963078599240058180033000440459281558347909876143313940657252737586803051935392596519226965519859474501391969755712097119163926672753588797180811711004203301n=p*qphi = (p-1)*(q-1)d = invert(e,phi)m = pow(c,d,n)def n2s(num):t = hex(num)[2:]if len(t) % 2 == 1:t = '0' + treturn ''.join([chr(int(b, 16)) for b in [t[i:i + 2] for i in range(0, len(t), 2)]])print(n2s(m))

首先,利用z和n求出(p+q)²和(p-q)²

然后,利用iroot函数求出(p+q)和(p-q)

最后,两者相加整除2即为p,两者相减整除2即为q

pqplus=iroot(z+2n,2)[0]

pqminus=iroot(z-2n,2)[0]

p=(pqminus+pqplus)//2

q=(pqplus-pqminus)//2

BJD{Advanced_mathematics_is_too_hard!!!}

Polybius

hint:The length of this plaintext: 14

思路:波利比奥斯方阵,aeiou顺序未知,5!中方式,直接暴力

解码网站

exp:

import itertoolss="aeoiu"sumresult=[]numsumresult=[]ciper="ouauuuoooeeaaiaeauieuooeeiea"for i in itertools.permutations(s,5):#找出所有全排列sumresult.append("".join(i))for i in sumresult:temp=""for j in ciper:temp+=str(i.index(j)+1)numsumresult.append(temp)for i in numsumresult:ans_=""for j in range(0, len(i),2):xx=(int(i[j])-1)*5+int(i[j+1])+96if xx>ord('i'):xx+=1ans_+=chr(xx)print(ans_)

BJD{flagispolybius}

rsa_output

思路:RSA同模攻击

from gmpy2 import invertdef gongmogongji(n, c1, c2, e1, e2):def egcd(a, b):if b == 0:return a, 0else:x, y = egcd(b, a % b)return y, x - (a // b) * ys = egcd(e1, e2)s1 = s[0]s2 = s[1]if s1 < 0:s1 = - s1c1 = invert(c1, n)elif s2 < 0:s2 = - s2c2 = invert(c2, n)m = pow(c1, s1, n) * pow(c2, s2, n) % nreturn mn1=21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111e1=2767n2=21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111e2=3659message1=2490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599message2=11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227m=gongmogongji(n1,message1,message2,e1,e2)print(hex(m)[2:].decode('hex'))#BJD{r3a_C0mmoN_moD@_4ttack}

BJD{r3a_C0mmoN_moD@_4ttack}

RSA

from Crypto.Util.number import getPrime,bytes_to_longflag=open("flag","rb").read()p=getPrime(1024)q=getPrime(1024)assert(e<100000)n=p*qm=bytes_to_long(flag)c=pow(m,e,n)print c,nprint pow(294,e,n)p=getPrime(1024)n=p*qm=bytes_to_long("BJD"*32)c=pow(m,e,n)print c,n'''output:c=126416356178037461503322326463545962927078614802002075371991411836244383037571205700967412480666696575579800965654773861639902530012304376625551859614934893044459982067523004642337305305163193255723084908342685949018373230375174400487418306259485687031861428999167598006354831649948690892320962756387155487561270207910056701869899293581820610908756816609739231410571755548292614103050563957170887621316711218796258448406532154572759413517536923392592250779499960732353697682418316292338500566993040344885346514140584683591984290846978754734175236547189249520430764458616139322877604534147913888338316244169120 n=13508774104460209743306714034546704137247627344981133461801953479736017021401725818808462898375994767375627749494839671944543822403059978073813122441407612530658168942987820256786583006947001711749230193542370570950705530167921702835627122401475251039000775017381633900222474727396823708695063136246115652622259769634591309421761269548260984426148824641285010730983215377509255011298737827621611158032976420011662547854515610597955628898073569684158225678333474543920326532893446849808112837476684390030976472053905069855522297850688026960701186543428139843783907624317274796926248829543413464754127208843070331063037pow(294,e,n)=381631268825806469518166370387352035475775677163615730759454343913563615970881967332407709901235637718936184198930226303761876517101208677107311006065728014220477966000620964056616058676999878976943319063836649085085377577273214792371548775204594097887078898598463892440141577974544939268247818937936607013100808169758675042264568547764031628431414727922168580998494695800403043312406643527637667466318473669542326169218665366423043579003388486634167642663495896607282155808331902351188500197960905672207046579647052764579411814305689137519860880916467272056778641442758940135016400808740387144508156358067955215018c=97915337055253515349847745972087732981120468820838754382612258213240421484845495472248708665806140879522380502220299761352736983452121073860054851302343517756732701026667062765906277626879215457936330799698812755973057557620930172778859116538571207100424990838508255127616637334499680058645411786925302368790414768248611809358160197554369255458675450109457987698749584630551177577492043403656419968285163536823819817573531356497236154342689914525321673807925458651854768512396355389740863270148775362744448115581639629326362342160548500035000156097215446881251055505465713854173913142040976382500435185442521721 n=12806210903061368369054309575159360374022344774547459345216907128193957592938071815865954073287532545947370671838372144806539753829484356064919357285623305209600680570975224639214396805124350862772159272362778768036844634760917612708721787393184324560508062277844350911611199826139873032559955431653954266580594621100564313925175487174478980849151676611723629842518863946965228345230771282139885701648759079499654446882670560033220853543322267298747117528882985955375246424812616478327182399461709978893464093245135530135430007842223389360212803439850867615121148050034887767584693608776323252233254261047'''

思路:要求最开始的flag,就要求e,要求e就要从后面的两个式子入手,我们可以发现两个N有共同那个的因数q,进而联想到模数分解,直接套gcd,得出p,q,但是我们不知道e,又告诉我们e<100000,可以直接暴力解出e

exp:

import gmpy2import libnumdef gcd(a, b):if a < b:a, b = b, awhile b != 0:temp = a % ba = bb = tempprint areturn adef n2s(num):t = hex(num)[2:]if len(t) % 2 == 1:t = '0' + treturn ''.join([chr(int(b, 16)) for b in [t[i:i + 2] for i in range(0, len(t), 2)]])n1=13508774104460209743306714034546704137247627344981133461801953479736017021401725818808462898375994767375627749494839671944543822403059978073813122441407612530658168942987820256786583006947001711749230193542370570950705530167921702835627122401475251039000775017381633900222474727396823708695063136246115652622259769634591309421761269548260984426148824641285010730983215377509255011298737827621611158032976420011662547854515610597955628898073569684158225678333474543920326532893446849808112837476684390030976472053905069855522297850688026960701186543428139843783907624317274796926248829543413464754127208843070331063037n2=12806210903061368369054309575159360374022344774547459345216907128193957592938071815865954073287532545947370671838372144806539753829484356064919357285623305209600680570975224639214396805124350862772159272362778768036844634760917612708721787393184324560508062277844350911611199826139873032559955431653954266580594621100564313925175487174478980849151676611723629842518863946965228345230771282139885701648759079499654446882670560033220853543322267298747117528882985955375246424812616478327182399461709978893464093245135530135430007842223389360212803439850867615121148050034887767584693608776323252233254261047c1=126416356178037461503322326463545962927078614802002075371991411836244383037571205700967412480666696575579800965654773861639902530012304376625551859614934893044459982067523004642337305305163193255723084908342685949018373230375174400487418306259485687031861428999167598006354831649948690892320962756387155487561270207910056701869899293581820610908756816609739231410571755548292614103050563957170887621316711218796258448406532154572759413517536923392592250779499960732353697682418316292338500566993040344885346514140584683591984290846978754734175236547189249520430764458616139322877604534147913888338316244169120c2=97915337055253515349847745972087732981120468820838754382612258213240421484845495472248708665806140879522380502220299761352736983452121073860054851302343517756732701026667062765906277626879215457936330799698812755973057557620930172778859116538571207100424990838508255127616637334499680058645411786925302368790414768248611809358160197554369255458675450109457987698749584630551177577492043403656419968285163536823819817573531356497236154342689914525321673807925458651854768512396355389740863270148775362744448115581639629326362342160548500035000156097215446881251055505465713854173913142040976382500435185442521721output=381631268825806469518166370387352035475775677163615730759454343913563615970881967332407709901235637718936184198930226303761876517101208677107311006065728014220477966000620964056616058676999878976943319063836649085085377577273214792371548775204594097887078898598463892440141577974544939268247818937936607013100808169758675042264568547764031628431414727922168580998494695800403043312406643527637667466318473669542326169218665366423043579003388486634167642663495896607282155808331902351188500197960905672207046579647052764579411814305689137519860880916467272056778641442758940135016400808740387144508156358067955215018q=gcd(n1,n2)#99855353761764939308265951492116976798674681282941462516956577712943717850048051273358745095906207085170915794187749954588685850452162165059831749303473106541930948723000882713453679904525655327168665295207423257922666721077747911860159181041422993030618385436504858943615630219459262419715816361781062898911for i in range(100000):res=pow(294,i,n1)if (res==output):e=i #52361breakp1=n1//qp2=n2//qphi=(p1-1)*(q-1)print(e)d=gmpy2.invert(e,phi)m=pow(c1,d,n1)print(n2s(m))

BJD{p_is_common_divisor}

signin1

思路:16进制

BJD{We1c0me_t4_BJDCTF}

编码与调制

思路:曼彻斯特编码,解码后拿到16进制数据,py解码

024A447B4469664D616E63686573746572636F64657D

import binasciix=0x024A447B4469664D616E63686573746572636F64657Dx=binascii.unhexlify('0'+hex(x)[2:])print(x)

BJD{DifManchestercode}

mark:最开始直接用py转时,有报错,查后发现是转换过程把0删了,导致这串数据长度不为奇,所以转的是要要把前面的0补上

伏羲六十四卦

# -- coding:UTF-8 --from secret import flagdef encrpyt5():enc=''for i in flag:enc+=chr((a*(ord(i)-97)+b)%26+97)return(enc)def encrypt4():temp=''offset=5for i in range(len(enc)):temp+=chr(ord(enc[i])-offset-i)return(temp)

思路:伏羲64卦+base64(伏羲6位拼接转8位,再转base64)

exp:

# -*- coding:UTF-8 -*-import base64def decrypt4(enc):temp=''a=5for i in range(len(enc)):temp+=chr(ord(enc[i])+a+i)return tempdef decrypt5(flag):for a in range(1,200):enc = ''for i in flag:for k in range(200):if (ord(i) - 97 - 7+26*k)%a==0:enc+= chr((ord(i) - 97 - 7 + 26 * k) // a + 97)breakprint(enc)s='升随临损巽睽颐萃小过讼艮颐小过震蛊屯未济中孚艮困恒晋升损蛊萃蛊未济巽解艮贲未济观豫损蛊晋噬嗑晋旅解大畜困未济随蒙升解睽未济井困未济旅萃未济震蒙未济师涣归妹大有'dic={'坤': '000000', '剥': '000001', '比': '000010', '观': '000011', '豫': '000100', '晋': '000101', '萃': '000110', '否': '000111', '谦': '001000', '艮': '001001', '蹇': '001010', '渐': '001011', '小过': '001100', '旅': '001101', '咸': '001110', '遁': '001111', '师': '010000', '蒙': '010001', '坎': '010010', '涣': '010011', '解': '010100', '未济': '010101', '困': '010110', '讼': '010111', '升': '011000', '蛊': '011001', '井': '011010', '巽': '011011', '恒': '011100', '鼎': '011101', '大过': '011110', '姤': '011111', '复': '100000', '颐': '100001', '屯': '100010', '益': '100011', '震': '100100', '噬嗑': '100101', '随': '100110', '无妄': '100111', '明夷': '101000', '贲': '101001', '既济': '101010', '家人': '101011', '丰': '101100', '离': '101101', '革': '101110', '同人': '101111', '临': '110000', '损': '110001', '节': '110010', '中孚': '110011', '归妹': '110100', '睽': '110101', '兑': '110110', '履': '110111', '泰': '111000', '大畜': '111001', '需': '111010', '小畜': '111011', '大壮': '111100', '大有': '111101', '夬': '111110', '乾': '111111'}li=[]k=0for i in range(len(s)):if k ==1:k=0continuetry:li.append(dic[s[i]])print(dic[s[i]])except:t=''t=t+s[i]+s[i+1]li.append(dic[t])k=1ss=''.join(li)print(ss)enc=''for i in range(0,len(ss),8):enc+=chr(eval('0b'+ss[i:i+8]))print(enc)flag=base64.b64decode(enc).decode()print(flag)flag=decrypt4(flag)flag=decrypt5(flag)

bl1oXF1ra2FbW2VpV1dfUmBiT11dYE5NVVdXSUZYSFVDUA==

n]h]kka[[eiWW_RbO]]NMUWWIFXHUCP

flag{bjdcongratulationsongettingtheflag} #这是buu上的flag

另:上面从伏羲转到base64的脚本是我复现的时候看的一个大佬的wp

我自己做的时候,做了很久,一直做不出来。

其实就是按照伏羲64卦的次序(6位)转成二进制,然后八个一组,转成b64就行了,后来复现后才发现是自己最开始次序错了,然后一直出不来。

After

学到了学到了,三个RSA,真棒!(疲惫.jpg)

然后就是这次的题挺nice的!很适合我这种菜鸡,难的太难不会写,简单的太简单很容易写。

还是要学好多~比如RSA,在谷歌时发现了很多很多其他的攻击方式,但我没有都学过。

加油,还是!

如果觉得《BJD》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。