上周的比赛,wp忘记发了,部分题目下载
带着新人打了一下hfctf,题目质量还行,排名刚好卡在决赛线外,有点可惜,写一个我做的几道题吧
Crypto
GM
Goldwasser - Micali加密算法
图源:https://blog.csdn.net/qq_26816591/article/details/82957481
只要分解N就行了,然而题目可以直接算出 p,最后解密即可
1 | p=(n-phi+1-long(gmpy2.iroot((n-phi+1)**2-4*n,2)[0]))//2 |
得到p 为
1 | p=94130524494940356506875940901901506872984699033610928814269310978003376307730580667234209640309443564560267414630644861712331559440658853201804556781784493376284446426393074882942957446869925558422146677774085449915333876201669456003375126689843738090285370245240893337253184644114745083294361228182569510971 |
sage脚本搞定
1 | from Crypto.Util.number import long_to_bytes |
flag
flag{bd4f1790-f4a2-4904-b4d2-8db8b24fd864}
PELL
这道题有点可惜,以为是送分题,顺手写了一下求解的代码然后扔给队友写exp,但是很奇怪的是exp要跑151轮才给flag?赛后才debug出来orz,求解代码也写得不太好,成功率百分之20左右(b限制了只能为1,且只要求小整数解,某些表达式无解),不想改了,反正思路就是那样,先爆破出最小的两组解,然后递推求其他整数解,下面是exp
1 | #!/usr/bin/env python |
Reverse
game
python字节码,没啥好说的,人肉反编译就行了,因为不难我就没做,给新人练练手,所以wp就不贴了。
enc
非正经做法,逆出加密函数的源码,然后我就去看vm了,dalao帮忙写了反函数,然后后面自己继续逆剩下的几个part,因为时间不够还原前面生成key的算法了,所以直接用原本的二进制文件直接爆key(复杂度最大也才0xb1),运气还好,很快就爆就出来了
1 | def crack(key): |
flag 为 flag{s3cReTH3rE}
vm
看起来像基于栈的虚拟机,好像不难但是看了下时间,来不及在比赛结束前逆完了(菜),果断放弃。