HGAME 2024网络攻防大赛—week3部分题目题解
reverse
encrypt
IDA打开,一堆Windows api
首先先解释一下各个api的作用:
BCryptOpenAlgorithmProvider: 打开一个密码算法提供者。
BCryptGetProperty: 获取密码算法提供者的属性。在这里,它获取了ObjectLength
和BlockLength
两个属性。ObjectLength
属性用于分配内存,BlockLength
属性用于设置密码算法的块长度。
BCryptSetProperty: 设置密码算法提供者的属性。在这里,它设置了对称加密的链接模式(Chaining Mode)
BCryptGenerateSymmetricKey: 生成对称密钥。
BCryptExportKey: 导出密钥。
BCryptEncrypt: 加密数据。
BCryptDestroyKey: 销毁密钥对象。
BCryptCloseAlgorithmProvider: 关闭算法提供者。
GetProcessHeap: 获取当前进程的堆句柄。
HeapAlloc: 在堆中分配内存。
HeapFree: 释放堆中的内存。
通过对这些api的解释,我们可以知道这个程序就是通过使用Windows api来生成一个加密体系来对flag进行加密
看到最后:
那么这个unk_7FF796305050
应该就是密文了
现在还需要知道加密模式,动调起来应该可以知道
动调后进入到算法提供的pszAlgId
可以知道该加密算法是aes,模式是cbc
那么现在还需要找到key和iv
BCryptGenerateSymmetricKey
是生成key
那么key就在pbSecret
里
iv则猜测在memcpy对&unk_7FF78E6634A0
的比较中
最后使用cyberchef解aes
mystery
IDA打开,通过strings定位到关键函数
首先第一个函数就是生成一个keybox
第二步则是使用生成的keybox对我们的输入进行加密
两个函数合起来就是一个清晰的rc4,加密和解密都是同样的脚本,只不过最后被改为*a2++ -= result;
但是result
可以通过动调获取,于是可以编写一个idapython的脚本,输出result
首先在result转到指令下断点
然后选edit breakpoint
写下如下脚本
import idaapi |
最后动调,随便给一个输入,就自动输出result了
然后就是解密,s2是密文,key也给出
exp:
v = [24, 37, 41, 32, 25, 39, 185, 201, 52, 199, 113, 201, 172, 23, 180, 30, 229, 233, 252, 42, 74, 1, 234, 121, 199, |
findme
IDA打开,进入到main函数
下面的base64解码也是一个假的flag
往下看 看到buffer
mz......
像是一个exe文件头,根据题目描述,一堆奇怪的数据
那么有可能这段数据就是题目的真正的exe,现在把这段数据dump出来
编写脚本
static main() |
dump出来后打开得到的exe
果然这才是真正的exe
发现有许多jz jnz构成的花指令,手动patch掉后对main函数重新定义,则可以f5查看伪代码
查看sub_641068
函数和sub_64110C
函数
又是一个rc4,类似上面mystery
题
那么用idapython脚本导出result
import idaapi |
最后用密文—result
得到flag
exp:
v = [0x7D, 0x2B, 0x43, 0xA9, 0xB9, 0x6B, 0x93, 0x2D, 0x9A, 0xD0, |
crypto
exRSA
attachment.py
from Crypto.Util.number import * |
考点是rsa多组低解密指数攻击,直接上脚本
exp:
#sage |
misc
与ai聊天
misc签到题
进网页让ai输出flag