-->
当前位置:首页 > DayDayUp > 正文内容

[WP]安恒7月赛

Luz4年前 (2020-07-25)DayDayUp4401

MISC

steg分离得到图片

image.png

即压缩包密码

image.png

结尾发现base64

image.png

社会主义核心价值观

image.png

base85

image.png

NTFS Stream 打开7.jpg ,得到base85加密的flag,解密得到原始flag(特殊符号注意转义)

image.png




分离gif,得到残损的二维码序列

https://yous.be/2014/12/07/seccon-ctf-2014-qr-easy-write-up/

参考本文可以提取数据(等大佬写一个脚本)


RE


最后发现又了hint,但是来不及交了

打开补丁提示md5(dec(得到的))

image.png

逐字抓取cmp序列(flag提交错误)

image.png

补丁往主程序写了点东西,以为修改了什么关键数值,调试了一下居然真的是一个破解补丁,只是nop了cmp后的判断,那还是应该使用原来拿到的数据吧。。提交依然错误

后来提示用这行代码来拿md5

image.png

拿到提交时间到了不知对错



CRYPTO


#include<stdio.h>
int encode(int i,int j){
	int a,b;
	if(i>j){
		return(i*i+j*2);
	}
	else{
		return(i*2+j*j+1);
	}
}
int main(){
	int num[]={11869,10804,15229,10199,3354,10105,3241,10519,9908,2499,10505,10103,9519,9519,3232,9711,9520,3127,15722};
	for(int index=0;index<=18;index++){
		for(int i=20;i<=128;i++){
		for(int j=20;j<=128;j++){
			if(encode(i,j)==num[index]){
				printf("%c%c",i,j);
			}
		}
	}
	}

}

image.png


from secret import flag
from Crypto.Util.number import getPrime,inverse,bytes_to_long,long_to_bytes
from sympy import isprime

m = bytes_to_long(flag)

i=0
p=getPrime(1024)
r=getPrime(1024)
while True:
    i+=1
    q = 5*p+i
    if isprime(q) :
        break

n=p*q*r
e = 65537
c = pow(m,e,n)
p3 = pow(p,3,n)
q3 = pow(q,3,n)
print c
print e
print n
print p3
print q3

#c=121836624300974075697021410307617877799398704636412997043885070081959280989429720121505939271618801519845564677294487289085261071864489530938936756975266796724602572135614554790383740417604947122325421381322155502222532570899845171858215244411945889235509975121332503672838693190271397334662495169940649349725607212867270114445618201171582223868214171942753939282404133460110489725340075179818856587044172460703519751189284498768640898837525773823127259807337383870535232880471869465188882667401540052151795173003568424369575866780354852158304748299284900468768898966143729562589110027789165774068500360970335261801131264801996703446527156709491597639262305131309592217711956181866054589085773085822482247966030763162382493197473555330201343835684065991963179440335668817727280429581864224497755004825170263803174390985868997862117983334405815543271969716910040927833496696049703621334172902517666284662473059140662717708823
#e=65537
#n=20361372240024088786698455948788052559208001789410016096382703853157107986024860262721685000417719260611935731634077852127432140361792767202581631816544546972750034494061276779878409544779707914261679633764772575040304712361634318086289783951555842021028438799649252652041211341825451500751760872572402250747982495384263677669526575825183733353800694161425360299521143726681387485097281832219009682768523304737252763907939642212542959846630464628135025203489075698699980715986689341069964387779523254203021424865355054215122316160201073604105317768112281914334065349420946717116563634883368316247495042216330408372176714499012778410160478384503335610321108263706243329745785632599707740534386988945259578897614317582546751658480917188464178997026284336861027299289073045677754342746386408505695243800685323283852020325044649604548575089927541935884800327121875191739922436199496098842684301207745090701158839031935190703347091
#p3=3639847731266473012111996909765465259684540134584180368372338570948892196816095838781423020996407457408188225238520927483809091079993151555076781372882518810174687150067903870448436299501557380508793238254471833275507634732947964907461619182112787911133054275872120243558556697900528427679352181961312958660881800731678134481664074711076672290178389996403357076809805422591851145306425951725627843352207233693810474618882394140691334742086008967260117740486955640068190440609984095657695423536016475468229419187489359563800737261212975921663803729112420222039005478830477455592167092520074509241894829304209406713781082959299623674294927249556083486223036858674077173104518013601628447504500606447821540687465361616447631579976579754996021653630804073535352129315413118764836270751250405649683786487251823247828947202336680538849571498780353357272103697510910576879383751704763858882439578045020243015928994208017750848637513
#q3=7030777127779173206633582847346001157991477456002191926122836599155148909465054067800807615361108442560942058865403188672629297039703065927801771646334817871335134889139894648729527452541098449842202838983982508551750669662540615534327150829869964429006130891731472099912937717406120443380283548571270317421722042835639732966975812764084015221255115940508456442279902250677665136380988902682370875602145833135937210740790528756301051981994351553247852018355526641012434670664732924491790949235519600899289515495046353559475806935200029321563549553167235419039924276406059858659476329718809657072997385947262654743181242885709558209249589482036673428723035300722280229192727192487772217518673838209646300548275957450994828221329299666216457961746189885356929698674294944243729739850927111231235060005119781652245234537583181232715964191675241206562888107252569566488402724441835466680342239244581162530424964324562530832713397


当低指数做,先爆破p

# -*- coding: utf-8 -*-
import gmpy2, time
e = 3
# 读入 n, 密文
n =gmpy2.mpz(20361372240024088786698455948788052559208001789410016096382703853157107986024860262721685000417719260611935731634077852127432140361792767202581631816544546972750034494061276779878409544779707914261679633764772575040304712361634318086289783951555842021028438799649252652041211341825451500751760872572402250747982495384263677669526575825183733353800694161425360299521143726681387485097281832219009682768523304737252763907939642212542959846630464628135025203489075698699980715986689341069964387779523254203021424865355054215122316160201073604105317768112281914334065349420946717116563634883368316247495042216330408372176714499012778410160478384503335610321108263706243329745785632599707740534386988945259578897614317582546751658480917188464178997026284336861027299289073045677754342746386408505695243800685323283852020325044649604548575089927541935884800327121875191739922436199496098842684301207745090701158839031935190703347091)
c =gmpy2.mpz(3639847731266473012111996909765465259684540134584180368372338570948892196816095838781423020996407457408188225238520927483809091079993151555076781372882518810174687150067903870448436299501557380508793238254471833275507634732947964907461619182112787911133054275872120243558556697900528427679352181961312958660881800731678134481664074711076672290178389996403357076809805422591851145306425951725627843352207233693810474618882394140691334742086008967260117740486955640068190440609984095657695423536016475468229419187489359563800737261212975921663803729112420222039005478830477455592167092520074509241894829304209406713781082959299623674294927249556083486223036858674077173104518013601628447504500606447821540687465361616447631579976579754996021653630804073535352129315413118764836270751250405649683786487251823247828947202336680538849571498780353357272103697510910576879383751704763858882439578045020243015928994208017750848637513)
#i = 239000000   # i 应该是未知的。这里缩短一下距离, 防止跑得太久
i=0
print 'n=', n
print 'c=', c
s = time.clock()
while 1:
    d=(c+i*n)
  #  print gmpy2.iroot(d,3)
 
    if (gmpy2.iroot(d,3)[0] ** 3) == d :
        print(gmpy2.iroot(d,3))
	break
    i += 1

image.png


已知p,这样可以求q d 和flag

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。