文章目录

  • Crypto
    • point-power
    • strange curve
  • Misc
    • easy_Forensic
    • Lost

巅峰极客2022初赛,团队共解决7道题,合计2234分,排名第11位,晋级复赛。
(Misc有一道题赛后两分钟出了o(╥﹏╥)o,交了就第二了

Crypto

point-power

给了一条椭圆曲线,参数p和b已知但是a未知,告知a即为flag。给了点G和二倍点2G的横坐标x1x_1x1​、x2x_2x2​。
简要推导一下可知:
λ2≡x2+2x1(modp)y1≡3x12+a2λ(modp)y12≡x13+ax1+b(modp)\lambda^2 \equiv x_2+2x_1 \space (mod \space p) \\ y_1 \equiv \frac{3x_1^2+a}{2\lambda}\space(mod \space p) \\ y_1^2 \equiv x_1^3+ax_1+b\space(mod \space p) λ2≡x2​+2x1​ (mod p)y1​≡2λ3x12​+a​ (mod p)y12​≡x13​+ax1​+b (mod p)
因此可以用Cipolla爆破出λ\lambdaλ,再用λ\lambdaλ表示y1y_1y1​后代入曲线方程。此时形成的二次多项式同余方程只有一个未知数aaa,配方再用一次Cipolla爆破即可得到aaa。

def eulerCriterion(a, p):return -1 if pow(a, int((p-1)/2), p) == p-1 else 1def cipollaMult(x1, y1, x2, y2, u, p):return ((x1*x2 + y1*y2*u) % p), ((x1*y2 + x2*y1) % p)def cipollaAlgorithm(n, p):a = Mod(n, p)out = []if eulerCriterion(a, p) == -1:print(str(a) + " is not a quadratic residue modulo " + str(p))return Falseif not is_prime(p):conglst = []                                    #congruence listcrtlst = []factors = []for k in list(factor(p)):factors.append(int(k[0]))for f in factors:conglst.append(cipollaAlgorithm(a, f))for i in Permutations([0, 1] * len(factors), len(factors)).list():for j in range(len(factors)):crtlst.append(int(conglst[ j ][ i[j] ]))out.append(crt(crtlst, factors))crtlst = []return sorted(out)if pow(p, 1, 4) == 3:temp = pow(a, int((p+1)/4), p)return [temp, p - temp]t = randrange(2, p)u = pow(t**2 - a, 1, p)while (eulerCriterion(u, p) == 1):t = randrange(2, p)u = pow(t**2 - a, 1, p)x0, y0 = t, 1x, y = t, 1for i in range(int((p + 1) / 2) - 1):x, y = cipollaMult(x, y, x0, y0, u, p)out.extend([x, p - x])return sorted(out)p = 3660057339895840489386133099442699911046732928957592389841707990239494988668972633881890332850396642253648817739844121432749159024098337289268574006090698602263783482687565322890623
b = 1515231655397326550194746635613443276271228200149130229724363232017068662367771757907474495021697632810542820366098372870766155947779533427141016826904160784021630942035315049381147
x1 = 2157670468952062330453195482606118809236127827872293893648601570707609637499023981195730090033076249237356704253400517059411180554022652893726903447990650895219926989469443306189740
x2 = 1991876990606943816638852425122739062927245775025232944491452039354255349384430261036766896859410449488871048192397922549895939187691682643754284061389348874990018070631239671589727lamSqr = (x2 + 2 * x1) % p
# lam = cipollaAlgorithm(lamSqr, p)
lam1 = 2014880882082318301445894374501675195919976436255804247056910036068932318853083532875711742303096608453631262469539522882159038073258190729304974713113937514650838613626987477596673
lam2 = 1645176457813522187940238724941024715126756492701788142784797954170562669815889101006178590547300033800017555270304598550590120950840146559963599292976761087612944869060577845293950res = (4 * lam1 ** 2 * (x1 ** 3 + b) - 12 * x1 ** 3 * lam1 ** 2 + 4 * lam1 ** 4 * x1 ** 2) % p
# aplus = cipollaAlgorithm(res, p)
aplus1 = 1370590950134392447563290310467074091332453364778953225609598164724491850785837752848492322413374912469146392849123620624141856740898793235764218415859608726708932969579886037927449
aplus2 = 2289466389761448041822842788975625819714279564178639164232109825515003137883134881033398010437021729784502424890720500808607302283199544053504355590231089875554850513107679284963174
plus = (3 * x1 ** 2 - 2 * lam1 ** 2 * x1) % p
a1 = (aplus1 - plus) % p
a2 = (aplus2 - plus) % p
print(a1) ---> 这个是flag:56006392793430010663016642098239513811260175999551893260401436587175373756825079518464264729364083325
print(a2)

strange curve

史诗级非预期,被打烂了。
整个加密过程中只对x进行了加一操作,最后还在P坐标里给出了x的值。代入进去爆破一下发现x就是flag。(乐)

while True:try:y=lift(x,a,b,p)breakexcept:x+=1continueassert a*x*(y**2-1)%p==b*y*(x**2-1)%pP=(x,y)
P = (56006392793427940134514899557008545913996191831278248640996846111183757392968770895731003245209281149, 5533217632352976155681815016236825302418119286774481415122941272968513081846849158651480192550482691343283818244963282636939305751909505213138032238524899)

Misc

easy_Forensic

volatility扫一下raw文件发现在cmdscan里发现使用了Explorer.exe。查一下iehistory发现桌面上存在一个111.raw文件。filescan查看一下文件,在桌面Desk上找到hint.txt,secret.zip,gift.jpg,wechat.txt等文件,尝试提取。

发现除了hint.txt都可以提取出来。jpg图片下方存在黑色像素点,猜测高度被修改了。增加jpg图片高度发现Passwd:Nothing is more important than your life!

尝试用password解zip失败,猜测需要提取hint.txt。Diskgenius挂载提取文件,得到提示:is_ not 。
将password中的空格改为下划线即可解压zip,拿到密钥。

A gift for You:  wHeMscYvTluyRvjf5d7AEX5K4VlZeU2IiGpKLFzek1Q=

wechat.txt打开之后不可读,应该是被加密了。根据题目信息搜集查一下微信解密相关内容,尝试了多个脚本最后找到文章:https://tttang.com/archive/1665/#toc_0x04,微信数据库加密。
github查到脚本,WeChatUserDB解密拿到数据库文件,sqlite3查询得到flag。

Lost

赛后两分钟才搞出来的Misc题。
纯纯的脑洞题,但是这个脑洞确实常见,只能说时间分配很重要。(去帮着搜密码学第三题的论文耽误了时间)
给了30个zip压缩包文件,但都损坏了,里面有一个含有假flag的txt和一张图片。查看一下hex发现压缩包文件第一个PK的扩展区存在问题,但是这部分肯定无法硬爆。做提前一个小时一直在硬爆,思路偏了。
后来发现三十个压缩包几乎完全一样(这也说明肯定不是硬爆出来的),hash一下发现散列值不同,猜测压缩包之间可能存在极其细微的差别来隐藏信息。
(实际上这是国外CTF的常见隐写考法,几周前TFCCTF考过一个爆破crc32隐写的,也是给了一堆损坏的压缩包
用HexEditor比对一下发现所有文件只在第71、72两个字节存在不同,因此提取这两个字节的数据。最开始尝试的是字节i和字节i+1异或,但是得到的flag是残缺的,最后发现取相邻元素差值是flag。

k = []
for i in range(1,31):f = open("flag{}.zip".format(i), "rb")ss = ""c = f.read(72)k.append(256 * c[-2] + c[-1])
print(k)for i in range(29):print(chr(abs(k[i]-k[i+1])),end='')

巅峰极客2022初赛 部分题解相关推荐

  1. 巅峰极客2022wp

    巅峰极客2022 文章目录 巅峰极客2022 web babyweb ezWeb web babyweb 提示cbc padding oracle攻击,这是一个服务端的密码学漏洞,buu上做过原题[N ...

  2. 2022巅峰极客WriteUp By EDISEC

    2022巅峰极客WriteUp By EDISEC Web babyweb ezWeb Crypto point-power strange curve Pwn Gift smallcontainer ...

  3. 巅峰极客pwn wp

    Pwn gift 程序保护全开 程序功能: add:最多只能申请十次堆块,每次申请大小为0x60或0x100,往里写内容的时候是往user_data+0x10处写. delete:有UAF show: ...

  4. 2020巅峰极客wp

    2020巅峰极客 巅峰极客是给开封市信网办做护网的时候打的比赛,所以比赛体验感并不好,简单写一下wp virus-re 代码分为三部分 以'-'为间隔,将flag的第一部分转换为整型数字,并且满足后项 ...

  5. 2018巅峰极客writeup(Misc)

    原文地址:https://mistsatan.github.io/articles/2018-Peakgeek-Writeup-Misc.html 作为一个渣渣,带着去看各路神仙打架的想法报名了这次的 ...

  6. 巅峰极客第一场CTF部分writeup

    额,上午驾校学车,中午打了会儿安恒的月赛,就来看巅峰极客的题了.时间关系实力原因没做几个emmmm太菜了wa MISC-warmup-100pt 拿到一个bmp文件,套路走一波,右键查看属性emmm啥 ...

  7. [代码审计][PHAR]巅峰极客babyphp2学习压缩过滤器触发phar

    前言:我要当赛棍!!! 文章目录 序列化与反序列化 基本介绍 PHP反序列化漏洞原理 常用的魔法函数 __wakeup()绕过:CVE-2016-7124 __set:巅峰极客babyphp2 解决p ...

  8. 2022巅峰极客PWN

    Gift 检查保护机.这题没给libc,我是通过 double free 以及打印fd的内容,判断版本应该是在2.27,小版本我直接用到了最高的去调试. 最多申请十个堆块,只能申请size为0x100 ...

  9. 银联高校极客挑战赛 初赛 第二场

    开场几十分钟后才开始打的,实验室居然锁门了... A. 码队GO 左上.右下角为(1,1).(x,y)的矩阵的大小,dp处理 然后一个裸的二分答案 (1,1) (x,y) (x-k,y-k) 三个点 ...

最新文章

  1. NLP模型超越人类水平?你可能碰到了大忽悠
  2. Android中shape属性详解
  3. 停车30分钟内不收费,程序员远程操控挪车,实现自动免费停车...
  4. 图解GitHub和SourceTree入门教程
  5. Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型
  6. 概述---《TCP/IP协议》卷一 练习题
  7. python批量读取文件夹的图片并处理成模型输入格式
  8. Git的commit之后的撤销reset
  9. 1069: [SCOI2007]最大土地面积 - BZOJ
  10. Arcgis Server初学笔记(一)
  11. 计算机管理也无法运行,【两种解决方法】任务管理器打不开怎么办?
  12. 关于使用scrapy框架时出现 No module named 'win32api问题
  13. python装饰器class_Python装饰器dataclass详解
  14. 保存Drawable资源为Bitmap文件
  15. php字符串指定长度截取,php 截取指定长度字符串的代码分享
  16. html video函数,HTML5 Video 的API函数
  17. 如何下载fatjar
  18. 海图水深点的标注方法
  19. 前端实现简单的loding效果
  20. JVM和操作系统的关系是什么?

热门文章

  1. 服务器托管数据中心机房选择应该注意哪些事项
  2. Python爬虫笔记——解析json数据(以周杰伦歌单为例)及Headers
  3. [NOIP2016]蚯蚓
  4. weixingzh.com微信公众号网站介绍
  5. 人脸美妆之唇色检测算法研究
  6. 数字信号处理。 引言
  7. 【CLAPACK函数库】CLAPACK安装与使用,编译好了出现f2c_dgemm,dgesvd_错误主要是camkelist, gcc编译库的顺序要对
  8. 反欺诈类优秀文章汇总
  9. 文华编程是c 语言吗,文华财经编程规则
  10. 夜神模拟器快速连接As