6.6刷题记录
Crypto(475+475+487+491+491+339+455)
[WUSTCTF 2020]佛说:只能四天
在线解解解解,提示说凯撒不是最后一步,试试一键解码
得到flag
NSSCTF{ni_hao_xiang_xiang_da_wo}
[NSSCTF 2022 Spring Recruit]classic
凯撒出一个字符
NBQXMZK7MFPW42LDMVPXI4TZ
再来
base32
NSSCTF{hava_a_nice_try}
[NCTF 2019]Keyboard
题目:
ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee
键盘密码不是圈圈就是九键,明显不是圈圈
九键:youaresosmartthatthisisjustapieceofcake
NSSCTF{youaresosmartthatthisisjustapieceofcake}
[WUCTF 2020] B@se
简单直接,爆破:
import base64 import string file=open('C:/Users/25287/Desktop/1.txt','w') str1='MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD==' string2='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' for i in range(65,122): for j in range(65,122): for k in range(65,122): for l in range(65,122): string1='JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs'+chr(i)+chr(j)+chr(k)+chr(l)+'kxyz012789+/' file.write(str(base64.b64decode(str1.translate(str.maketrans(string1,string2))))) string1=''
NSSCTF{base64_1s_v3ry_e@sy_and_fuN}
[WUCTF 2020] leak
dp泄露好,直接套脚本
exp:
import gmpy2 as gp e = 65537 n = gp.mpz(156808343598578774957375696815188980682166740609302831099696492068246337198792510898818496239166339015207305102101431634283168544492984586566799996471150252382144148257236707247267506165670877506370253127695314163987084076462560095456635833650720606337852199362362120808707925913897956527780930423574343287847) dp = gp.mpz(734763139918837027274765680404546851353356952885439663987181004382601658386317353877499122276686150509151221546249750373865024485652349719427182780275825) c = gp.mpz(108542078809057774666748066235473292495343753790443966020636060807418393737258696352569345621488958094856305865603100885838672591764072157183336139243588435583104423268921439473113244493821692560960443688048994557463526099985303667243623711454841573922233051289561865599722004107134302070301237345400354257869) for x in range(1, e): if(e*dp%x==1): p=(e*dp-1)//x+1 if(n%p!=0): continue q=n//p phin=(p-1)*(q-1) d=gp.invert(e, phin) m=gp.powmod(c, d, n) if(len(hex(m)[2:])%2==1): continue print('--------------') print(m) print(hex(m)[2:]) print(bytes.fromhex(hex(m)[2:]))
NSSCTF{dp_leaking_1s_very_d@angerous}
[鹤城杯 2021]Crazy_Rsa_Tech
n_list: ['71189786319102608575263218254922479901008514616376166401353025325668690465852130559783959409002115897148828732231478529655075366072137059589917001875303598680931962384468363842379833044123189276199264340224973914079447846845897807085694711541719515881377391200011269924562049643835131619086349617062034608799', '92503831027754984321994282254005318198418454777812045042619263533423066848097985191386666241913483806726751133691867010696758828674382946375162423033994046273252417389169779506788545647848951018539441971140081528915876529645525880324658212147388232683347292192795975558548712504744297104487514691170935149949', '100993952830138414466948640139083231443558390127247779484027818354177479632421980458019929149817002579508423291678953554090956334137167905685261724759487245658147039684536216616744746196651390112540237050493468689520465897258378216693418610879245129435268327315158194612110422630337395790254881602124839071919', '59138293747457431012165762343997972673625934330232909935732464725128776212729547237438509546925172847581735769773563840639187946741161318153031173864953372796950422229629824699580131369991913883136821374596762214064774480548532035315344368010507644630655604478651898097886873485265848973185431559958627423847', 66827868958054485359731420968595906328820823695638132426084478524423658597714990545142120448668257273436546456116147999073797943388584861050133103137697812149742551913704341990467090049650721713913812069904136198912314243175309387952328961054617877059134151915723594900209641163321839502908705301293546584147', 120940513339890268554625391482989102665030083707530690312336379356969219966820079510946652021721814016286307318930536030308296265425674637215009052078834615196224917417698019787514831973471113022781129000531459800329018133248426080717653298100515701379374786486337920294380753805825328119757649844054966712377', 72186594495190221129349814154999705524005203343018940547856004977368023856950836974465616291478257156860734574686154136925776069045232149725101769594505766718123155028300703627531567850035682448632166309129911061492630709698934310123778699316856399909549674138453085885820110724923723830686564968967391721281', 69105037583161467265649176715175579387938714721653281201847973223975467813529036844308693237404592381480367515044829190066606146105800243199497182114398931410844901178842049915914390117503986044951461783780327749665912369177733246873697481544777183820939967036346862056795919812693669387731294595126647751951', 76194219445824867986050004226602973283400885106636660263597964027139613163638212828932901192009131346530898961165310615466747046710743013409318156266326090650584190382130795884514074647833949281109675170830565650006906028402714868781834693473191228256626654011772428115359653448111208831188721505467497494581'] c_list: [62580922178008480377006528793506649089253164524883696044759651305970802215270721223149734532870729533611357047595181907404222690394917605617029675103788705320032707977225447998111744887898039756375876685711148857676502670812333076878964148863713993853526715855758799502735753454247721711366497722251078739585, 46186240819076690248235492196228128599822002268014359444368898414937734806009161030424589993541799877081745454934484263188270879142125136786221625234555265815513136730416539407710862948861531339065039071959576035606192732936477944770308784472646015244527805057990939765708793705044236665364664490419874206900, 85756449024868529058704599481168414715291172247059370174556127800630896693021701121075838517372920466708826412897794900729896389468152213884232173410022054605870785910461728567377769960823103334874807744107855490558726013068890632637193410610478514663078901021307258078678427928255699031215654693270240640198, 14388767329946097216670270960679686032536707277732968784379505904021622612991917314721678940833050736745004078559116326396233622519356703639737886289595860359630019239654690312132039876082685046329079266785042428947147658321799501605837784127004536996628492065409017175037161261039765340032473048737319069656, 1143736792108232890306863524988028098730927600066491485326214420279375304665896453544100447027809433141790331191324806205845009336228331138326163746853197990596700523328423791764843694671580875538251166864957646807184041817863314204516355683663859246677105132100377322669627893863885482167305919925159944839, 2978800921927631161807562509445310353414810029862911925227583943849942080514132963605492727604495513988707849133045851539412276254555228149742924149242124724864770049898278052042163392380895275970574317984638058768854065506927848951716677514095183559625442889028813635385408810698294574175092159389388091981, 16200944263352278316040095503540249310705602580329203494665614035841657418101517016718103326928336623132935178377208651067093136976383774189554806135146237406248538919915426183225265103769259990252162411307338473817114996409705345401251435268136647166395894099897737607312110866874944619080871831772376466376, 31551601425575677138046998360378916515711528548963089502535903329268089950335615563205720969393649713416910860593823506545030969355111753902391336139384464585775439245735448030993755229554555004154084649002801255396359097917380427525820249562148313977941413268787799534165652742114031759562268691233834820996, 25288164985739570635307839193110091356864302148147148153228604718807817833935053919412276187989509493755136905193728864674684139319708358686431424793278248263545370628718355096523088238513079652226028236137381367215156975121794485995030822902933639803569133458328681148758392333073624280222354763268512333515]
低加密指数广播攻击
exp:
import gmpy2 import math from Crypto.Util.number import * def merge(a1,n1,a2,n2): d = math.gcd(n1,n2) c = a2-a1 if c%d!=0: return 0 c = (c%n2+n2)%n2 c = c//d n1 = n1//d n2 = n2//d c *= gmpy2.invert(n1,n2) c %= n2 c *= n1*d c += a1 global n3 global a3 n3 = n1*n2*d a3 = (c%n3+n3)%n3 return 1 def exCRT(a,n): a1=a[0] n1=n[0] le= len(a) for i in range(1,le): a2 = a[i] n2=n[i] if not merge(a1,n1,a2,n2): return -1 a1 = a3 n1 = n3 global mod mod=n1 return (a1%n1+n1)%n1 def exCRT_getequation(a,n): a1=a[0] n1=n[0] le= len(a) for i in range(1,le): a2 = a[i] n2=n[i] if not merge(a1,n1,a2,n2): return -1 a1 = a3 n1 = n3 return (a1,n1) n = [71189786319102608575263218254922479901008514616376166401353025325668690465852130559783959409002115897148828732231478529655075366072137059589917001875303598680931962384468363842379833044123189276199264340224973914079447846845897807085694711541719515881377391200011269924562049643835131619086349617062034608799, 92503831027754984321994282254005318198418454777812045042619263533423066848097985191386666241913483806726751133691867010696758828674382946375162423033994046273252417389169779506788545647848951018539441971140081528915876529645525880324658212147388232683347292192795975558548712504744297104487514691170935149949, 100993952830138414466948640139083231443558390127247779484027818354177479632421980458019929149817002579508423291678953554090956334137167905685261724759487245658147039684536216616744746196651390112540237050493468689520465897258378216693418610879245129435268327315158194612110422630337395790254881602124839071919, 59138293747457431012165762343997972673625934330232909935732464725128776212729547237438509546925172847581735769773563840639187946741161318153031173864953372796950422229629824699580131369991913883136821374596762214064774480548532035315344368010507644630655604478651898097886873485265848973185431559958627423847, 66827868958054485359731420968595906328820823695638132426084478524423658597714990545142120448668257273436546456116147999073797943388584861050133103137697812149742551913704341990467090049650721713913812069904136198912314243175309387952328961054617877059134151915723594900209641163321839502908705301293546584147, 120940513339890268554625391482989102665030083707530690312336379356969219966820079510946652021721814016286307318930536030308296265425674637215009052078834615196224917417698019787514831973471113022781129000531459800329018133248426080717653298100515701379374786486337920294380753805825328119757649844054966712377, 72186594495190221129349814154999705524005203343018940547856004977368023856950836974465616291478257156860734574686154136925776069045232149725101769594505766718123155028300703627531567850035682448632166309129911061492630709698934310123778699316856399909549674138453085885820110724923723830686564968967391721281, 69105037583161467265649176715175579387938714721653281201847973223975467813529036844308693237404592381480367515044829190066606146105800243199497182114398931410844901178842049915914390117503986044951461783780327749665912369177733246873697481544777183820939967036346862056795919812693669387731294595126647751951, 76194219445824867986050004226602973283400885106636660263597964027139613163638212828932901192009131346530898961165310615466747046710743013409318156266326090650584190382130795884514074647833949281109675170830565650006906028402714868781834693473191228256626654011772428115359653448111208831188721505467497494581] c = [62580922178008480377006528793506649089253164524883696044759651305970802215270721223149734532870729533611357047595181907404222690394917605617029675103788705320032707977225447998111744887898039756375876685711148857676502670812333076878964148863713993853526715855758799502735753454247721711366497722251078739585, 46186240819076690248235492196228128599822002268014359444368898414937734806009161030424589993541799877081745454934484263188270879142125136786221625234555265815513136730416539407710862948861531339065039071959576035606192732936477944770308784472646015244527805057990939765708793705044236665364664490419874206900, 85756449024868529058704599481168414715291172247059370174556127800630896693021701121075838517372920466708826412897794900729896389468152213884232173410022054605870785910461728567377769960823103334874807744107855490558726013068890632637193410610478514663078901021307258078678427928255699031215654693270240640198, 14388767329946097216670270960679686032536707277732968784379505904021622612991917314721678940833050736745004078559116326396233622519356703639737886289595860359630019239654690312132039876082685046329079266785042428947147658321799501605837784127004536996628492065409017175037161261039765340032473048737319069656, 1143736792108232890306863524988028098730927600066491485326214420279375304665896453544100447027809433141790331191324806205845009336228331138326163746853197990596700523328423791764843694671580875538251166864957646807184041817863314204516355683663859246677105132100377322669627893863885482167305919925159944839, 2978800921927631161807562509445310353414810029862911925227583943849942080514132963605492727604495513988707849133045851539412276254555228149742924149242124724864770049898278052042163392380895275970574317984638058768854065506927848951716677514095183559625442889028813635385408810698294574175092159389388091981, 16200944263352278316040095503540249310705602580329203494665614035841657418101517016718103326928336623132935178377208651067093136976383774189554806135146237406248538919915426183225265103769259990252162411307338473817114996409705345401251435268136647166395894099897737607312110866874944619080871831772376466376, 31551601425575677138046998360378916515711528548963089502535903329268089950335615563205720969393649713416910860593823506545030969355111753902391336139384464585775439245735448030993755229554555004154084649002801255396359097917380427525820249562148313977941413268787799534165652742114031759562268691233834820996, 25288164985739570635307839193110091356864302148147148153228604718807817833935053919412276187989509493755136905193728864674684139319708358686431424793278248263545370628718355096523088238513079652226028236137381367215156975121794485995030822902933639803569133458328681148758392333073624280222354763268512333515] m9=exCRT(c,n) m=gmpy2.iroot(m9,9)[0] print(long_to_bytes(m))
flag
NSSCTF{H0w_Fun_13_HAstads_broadca5t_AtTack!}
[羊城杯 2021]Easy_Rsa
分解n之后直接套
exp:
import gmpy2 as gp from Crypto.Util.number import long_to_bytes import binascii p = gp.mpz(8437905502983445042677582637893534375137565614989838462475696727313788501904161403475771835934720130340799646782932619714906025013322551788559197469878239) q = gp.mpz(9983140483800634632426126985832058062766650402234684899412786169759602188949733747138853010482968306554808689182393249326088351886439191015684338347893201) e = gp.mpz(58337) c = gp.mpz(13646200911032594651110040891135783560995665642049282201695300382255436792102048169200570930229947213493204600006876822744757042959653203573780257603577712302687497959686258542388622714078571068849217323703865310256200818493894194213812410547780002879351619924848073893321472704218227047519748394961963394668) n = p*q phi = (p-1) * (q-1) d = gp.invert(e, phi) m = pow(c, d, n) print(long_to_bytes(m))
NSSCTF{0a8c2220-4c1b-32c8-e8c1-adf92ec7678b}
RE(495+495+495)
[AFCTF 2018]凯撒
32位
主函数:
int __cdecl main(int argc, const char **argv, const char **envp) { _BYTE v4[50]; // [esp+16h] [ebp-3Ah] BYREF int j; // [esp+48h] [ebp-8h] int i; // [esp+4Ch] [ebp-4h] sub_401850(); puts("Input flag:"); scanf("%s", v4); for ( i = 1; i <= 16; ++i ) { for ( j = 0; ; ++j ) { if ( !byte_403008[j] ) { puts("You are right."); return 0; } if ( i + (unsigned __int8)v4[j] != byte_403008[j] ) break; } } puts("You are wrong."); return 0; }
简单的比较,找到数组,
直接爆破:
exp:
s=[0x6C, 0x71, 0x6E, 0x7F, 0x71, 0x86, 0x6E, 0x3C, 0x3F, 0x7E, 0x7E, 0x74, 0x6E, 0x6A, 0x6E, 0x6C, 0x70, 0x40, 0x6C, 0x7D, 0x88, 0x00, 0x00, 0x00] flag='' j=0 for i in range(1,17): for j in range(len(s)): for k in range(26,126): if chr(i+k)==chr(s[j]): flag+=chr(k) break print(flag)
最后会有一大串:
kpmpm;>}}smimko?k|jol}ol:=||rlhljn>j{ink|nk9<{{qkgkim=izhmj{mj8;zzpjfjhl<hyglizli7:yyoieigk;gxfkhykh69xxnhdhfj:fwejgxjg58wwmgcgei9evdifwif47vvlfbfdh8duchevh}e36uukeaecg7ctbgdug|d25ttjd`dbf6bsafctf{c14ssic_cae5ar}`ebsezb03rrhb^b`d4`q|_dardya/2qqga]a_c3_p{^c`qcx`.1ppf`\`^b2^oz]b_pbw_-0ooe_[_]a1]ny\a^oav^,/nnd^Z^\`0\mx
flag就在里面:
NSSCTF{c14ssic_cae5ar}
[GXYCTF 2019]luck_guy
64位,无壳
一半的flag
C代码
unsigned __int64 get_flag() { unsigned int v0; // eax int i; // [rsp+4h] [rbp-3Ch] int j; // [rsp+8h] [rbp-38h] __int64 s; // [rsp+10h] [rbp-30h] BYREF char v5; // [rsp+18h] [rbp-28h] unsigned __int64 v6; // [rsp+38h] [rbp-8h] v6 = __readfsqword(0x28u); v0 = time(0LL); srand(v0); for ( i = 0; i <= 4; ++i ) { switch ( rand() % 200 ) { case 1: puts("OK, it's flag:"); memset(&s, 0, 0x28uLL); strcat((char *)&s, f1); strcat((char *)&s, &f2); printf("%s", (const char *)&s); break; case 2: printf("Solar not like you"); break; case 3: printf("Solar want a girlfriend"); break; case 4: s = 0x7F666F6067756369LL; v5 = 0; strcat(&f2, (const char *)&s); break; case 5: for ( j = 0; j <= 7; ++j ) { if ( j % 2 == 1 ) *(&f2 + j) -= 2; else --*(&f2 + j); } break; default: puts("emmm,you can't find flag 23333"); break; } } return __readfsqword(0x28u) ^ v6; }
看到case1中,输出的flag由字符串和一个变量f2组成,现在求解f2 case4给f2赋值,case5对f2处理 把s转换成字符串再exp
s='\x7Ffo`guci' flag='' for i in range(8): if i%2==0: flag+=chr(ord(s[i])-2) else: flag+=chr(ord(s[i])-1) print(flag[::-1])
NSSCTF{do_not_hate_me}
[羊城杯 2020]easyre
int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax int v4; // eax int v5; // eax int result; // eax char Str[48]; // [rsp+20h] [rbp-60h] BYREF char Str1[64]; // [rsp+50h] [rbp-30h] BYREF char v9[64]; // [rsp+90h] [rbp+10h] BYREF char v10[64]; // [rsp+D0h] [rbp+50h] BYREF char Str2[60]; // [rsp+110h] [rbp+90h] BYREF int v12; // [rsp+14Ch] [rbp+CCh] BYREF _main(argc, argv, envp); strcpy(Str2, "EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG"); puts("Hello, please input your flag and I will tell you whether it is right or not."); scanf("%38s", Str); if ( strlen(Str) != 38 || (v3 = strlen(Str), (unsigned int)encode_one(Str, v3, v10, &v12)) || (v4 = strlen(v10), (unsigned int)encode_two(v10, v4, v9, &v12)) || (v5 = strlen(v9), (unsigned int)encode_three(v9, v5, Str1, &v12)) || strcmp(Str1, Str2) ) { printf("Something wrong. Keep going."); result = 0; } else { puts("you are right!"); result = 0; } return result; }
主函数清晰可见的字符串
然后就是一系列的加密:
encode_one:
__int64 __fastcall encode_one(const char *a1, int a2, char *a3, int *a4) { int v5; // esi int v6; // esi int v7; // esi int v8; // [rsp+34h] [rbp-1Ch] int v9; // [rsp+38h] [rbp-18h] int v11; // [rsp+48h] [rbp-8h] int i; // [rsp+4Ch] [rbp-4h] unsigned __int8 *v13; // [rsp+70h] [rbp+20h] v13 = (unsigned __int8 *)a1; if ( !a1 || !a2 ) return 0xFFFFFFFFi64; v11 = 0; if ( a2 % 3 ) v11 = 3 - a2 % 3; v9 = a2 + v11; v8 = 8 * (a2 + v11) / 6; for ( i = 0; i < v9; i += 3 ) { *a3 = alphabet[(char)*v13 >> 2]; if ( a2 + v11 - 3 == i && v11 ) { if ( v11 == 1 ) { v5 = (char)cmove_bits(*v13, 6u, 2u); a3[1] = alphabet[v5 + (char)cmove_bits(v13[1], 0, 4u)]; a3[2] = alphabet[(char)cmove_bits(v13[1], 4u, 2u)]; a3[3] = 61; } else if ( v11 == 2 ) { a3[1] = alphabet[(char)cmove_bits(*v13, 6u, 2u)]; a3[2] = 61; a3[3] = 61; } } else { v6 = (char)cmove_bits(*v13, 6u, 2u); a3[1] = alphabet[v6 + (char)cmove_bits(v13[1], 0, 4u)]; v7 = (char)cmove_bits(v13[1], 4u, 2u); a3[2] = alphabet[v7 + (char)cmove_bits(v13[2], 0, 6u)]; a3[3] = alphabet[v13[2] & 0x3F]; } a3 += 4; v13 += 3; } if ( a4 ) *a4 = v8; return 0i64; }
典型的base64
encode_two就是换位
encode_three是移位为3的凯撒
对字符串凯撒解密:
BjYjM5Mjk7NzMR4dIVHs5NzJjY3MTEzM5VhMn3=zQ6NzhhMzhlOD
然后就是移位
import base64 tmp = list('BjYjM5Mjk7NzMR4dIVHs5NzJjY3MTEzM5VhMn3=zQ6NzhhMzhlOD') for i in range(len(tmp)): if tmp[i] >= '0' and tmp[i] <= '9': tmp[i] = str(int(tmp[i]) - 3) flag = str(tmp[13:26] + tmp[39:] + tmp[:13] + tmp[26:39]) print(base64.b64decode(flag))
得到flag
NSSCTF{672cc4778a38e80cb362987341133ea2}
ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee