文章目录
- 前言
- 题目分析and调试过程
- 完整exp
前言
前段时间的比赛,那会刚入门o(╥﹏╥)o都不会写,现在复现一下。
羊城杯题目复现:
第二题 知识点 :动态调试 : CSGO
题目分析and调试过程
查壳nie
进入IDA,shift+F12查找下字符串看看,定位过去
先用N重命名一下函数,方便阅读。这里就是要求我们输入 code 和 flag。 分别 放入 a1 和 a2 中,查看一下该函数被谁调用了。
跳到上一级函数。
发现俩个参数a000000,a11111111111111,有点奇怪,推测一下应该是输入的长度。长度分别是 6 和 40
接着分析 看看sub_1400036A0里面的东西,
这里移位 4 移位 6 有点像base64编码,接着下面看,
一个base64变表,可以动态调试验证一下,输入code 为 123456,构造flag : DASCTF{11111111111111111111111111111111}
验证成功,sub_1400036A0就是对code进行一个base64编码。
接着看sub_7FF6D8B93AE0,点进去发现实在看不懂是什么,借助一下插件Signsrch
发现DES加密,随便双击跟进一下,会发现跟进到sub_7FF6D8B93AE0里面去了,因此可以判断这里是DES加密。
关于DES加密的介绍,可以看一下博主总结的DES加密原理
这里如果明白DES加密,就知道会有一个key,key的长度为8个字节(64-bit),经由这个主钥匙进行密钥调度得到16个子钥匙,再对密文继续迭代加密,总共16轮,得到密文
这里就已经分析完了,str1是给出的,不过还有一步,程序在运行时对Str1进行了修改,动态调试到下图处,得到真正的Str1。
完整exp
from Crypto.Cipher import DES
import base64
encrypted_data = bytes.fromhex(
"0723105D5C12217DCDC3601F5ECB54DA9CCEC2279F1684A13A0D716D17217F服务器托管网4C9EA85FF1A42795731CA3C55D3A4D7BEA")
print(encrypted_data)
def decrypt_DES(key, encrypted_data):
cipher = DES.new(key, DES.MODE_ECB)
decrypted_data = cipher.decrypt(encrypted_data)
return decrypted_data
string1 = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ+/'
string2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
string = str.maketrans(string2, string1)
for i in range(1000000):
key = base64.b64encode(str(i).zfill(6).encode()).decode().translate(string).encode()
decrypted_data = decrypt_DES(key, encrypted_data)
if b"DASCTF{" in decrypted_data:
print(decrypted_data)
exit()
# DASCTF{f771b96b71514bb6bc20f3275fa9404e}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 门票赠送:诚邀您参加2023百度世界大会-大模型驱动产业发展论坛
赠送的门票由行行AI提供,行行AI是园子的天使投资方顺顺智慧与园子的合资公司。 大模型作为核心的高级生产力正引领着崭新的经济和社会格服务器托管网局,推动着人工智能成为产业发展的新引擎。百度智能云致力于与客户、合作伙伴紧密协作,将大模型深度融入各领域,把握重构机…