首页 > 其他分享 >[HGAME 2023 week3]kunmusic wp

[HGAME 2023 week3]kunmusic wp

时间:2024-07-15 09:29:24浏览次数:13  
标签:11 10 12 HGAME add num key kunmusic week3

今天写了一道Hgame的题,挺有意思的,写个blog记录一下
下载附件得到三个文件,先用dnspy打开dll文件,找到main函数,发现为对资源中data的加密。因此将data直接dump下来,对其进行解密,并将解密后的文件保存为111,脚本如下:

file = open(r'C:\Users\usr\Desktop\ctf题库\reverse\data','wb')
f = open(r'C:\Users\usr\Desktop\ctf题库\reverse\111','rb')
data = file.read()
for i in data:
    f.write(bytes([i ^ 104]))

用010Editor发现其为exe文件,修改后缀名后用dnspy打开,在music中发现线性方程组:

使用z3直接求解,代码如下:

from z3 import *

key = [132,47,180,7,216,45,68,6,39,246,124,2,243,137,58,172,53,200,99,91,83,13,171,80,108,235,179,58,176,28,216,36,11,80,39,162,97,58,236,130,123,176,24,212,56,89,72]
num = [BitVec(f'flag{i}',8) for i in range(13)]
s = Solver()

s.add(num[0] + 52296 + num[1] - 26211 + num[2] - 11754 + (num[3] ^ 0xA114) + num[4] * 63747 + num[5] - 52714 + num[6] - 10512 + num[7] * 12972 + num[8] + 45505 + num[9] - 21713 + num[10] - 59122 + num[11] - 12840 + (num[12] ^ 0x525F) == 12702282 )
s.add( num[0] - 25228 + (num[1] ^ 0x50DB) + (num[2] ^ 0x1FDE) + num[3] - 65307 + num[4] * 30701 + num[5] * 47555 + num[6] - 2557 + (num[7] ^ 0xBF9F) + num[8] - 7992 + (num[9] ^ 0xE079) + (num[10] ^ 0xE052) + num[11] + 13299 + num[12] - 50966 == 9946829 )
s.add( num[0] - 64801 + num[1] - 60698 + num[2] - 40853 + num[3] - 54907 + num[4] + 29882 + (num[5] ^ 0x3506) + (num[6] ^ 0x533E) + num[7] + 47366 + num[8] + 41784 + (num[9] ^ 0xD1BA) + num[10] * 58436 + num[11] * 15590 + num[12] + 58225 == 2372055 )
s.add( num[0] + 61538 + num[1] - 17121 + num[2] - 58124 + num[3] + 8186 + num[4] + 21253 + num[5] - 38524 + num[6] - 48323 + num[7] - 20556 + num[8] * 56056 + num[9] + 18568 + num[10] + 12995 + (num[11] ^ 0x995C) + num[12] + 25329 == 6732474 )
s.add( num[0] - 42567 + num[1] - 17743 + num[2] * 47827 + num[3] - 10246 + (num[4] ^ 0x3F9C) + num[5] + 39390 + num[6] * 11803 + num[7] * 60332 + (num[8] ^ 0x483B) + (num[9] ^ 0x12BB) + num[10] - 25636 + num[11] - 16780 + num[12] - 62345 == 14020739 )
s.add( num[0] - 10968 + num[1] - 31780 + (num[2] ^ 0x7C71) + num[3] - 61983 + num[4] * 31048 + num[5] * 20189 + num[6] + 12337 + num[7] * 25945 + (num[8] ^ 0x1B98) + num[9] - 25369 + num[10] - 54893 + num[11] * 59949 + (num[12] ^ 0x3099) == 14434062 )
s.add( num[0] + 16689 + num[1] - 10279 + num[2] - 32918 + num[3] - 57155 + num[4] * 26571 + num[5] * 15086 + (num[6] ^ 0x59CA) + (num[7] ^ 0x5B35) + (num[8] ^ 0x3FFD) + (num[9] ^ 0x5A85) + num[10] - 40224 + num[11] + 31751 + num[12] * 8421 == 7433598 )
s.add( num[0] + 28740 + num[1] - 64696 + num[2] + 60470 + num[3] - 14752 + (num[4] ^ 0x507) + (num[5] ^ 0x89C8) + num[6] + 49467 + num[7] - 33788 + num[8] + 20606 + (num[9] ^ 0xAF4A) + num[10] * 19764 + num[11] + 48342 + num[12] * 56511 == 7989404 )
s.add( (num[0] ^ 0x7132) + num[1] + 23120 + num[2] + 22802 + num[3] * 31533 + (num[4] ^ 0x9977) + num[5] - 48576 + (num[6] ^ 0x6F7E) + num[7] - 43265 + num[8] + 22365 + num[9] + 61108 + num[10] * 2823 + num[11] - 30343 + num[12] + 14780 == 3504803 )
s.add( num[0] * 22466 + (num[1] ^ 0xDABF) + num[2] - 53658 + (num[3] ^ 0xB838) + (num[4] ^ 0x30DF) + num[5] * 59807 + num[6] + 46242 + num[7] + 3052 + (num[8] ^ 0x62BF) + num[9] + 30202 + num[10] * 22698 + num[11] + 33480 + (num[12] ^ 0x4175) == 11003580 )
s.add( num[0] * 57492 + (num[1] ^ 0x346D) + num[2] - 13941 + (num[3] ^ 0xBBDC) + num[4] * 38310 + num[5] + 9884 + num[6] - 45500 + num[7] - 19233 + num[8] + 58274 + num[9] + 36175 + (num[10] ^ 0x4888) + num[11] * 49694 + (num[12] ^ 0x2501) == 25546210 )
s.add( num[0] - 23355 + num[1] * 50164 + (num[2] ^ 0x873A) + num[3] + 52703 + num[4] + 36245 + num[5] * 46648 + (num[6] ^ 0x12FA) + (num[7] ^ 0xA376) + num[8] * 27122 + (num[9] ^ 0xA44A) + num[10] * 15676 + num[11] - 31863 + num[12] + 62510 == 11333836 )
s.add( num[0] * 30523 + (num[1] ^ 0x1F36) + num[2] + 39058 + num[3] * 57549 + (num[4] ^ 0xD0C0) + num[5] * 4275 + num[6] - 48863 + (num[7] ^ 0xD88C) + (num[8] ^ 0xA40) + (num[9] ^ 0x3554) + num[10] + 62231 + num[11] + 19456 + num[12] - 13195 == 13863722)
s.add(num[0] == ord('h') ^ key[0])
s.add(num[1] == ord('g') ^ key[1])
s.add(num[2] == ord('a') ^ key[2])
s.add(num[3] == ord('m') ^ key[3])
s.add(num[4] == ord('e') ^ key[4])
s.add(num[5] == ord('{') ^ key[5])

if s.check() == sat:
    m = s.model()
    ans = ''
    res = []
    for i in range(13):
        res.append(m[num[i]].as_long())
    for i in range(len(key)):
        ans += chr((res[i%13] ^ key[i])%128)
    print(ans)

else:
    print(s.check())

最后解得flag:hgame{z3_1s_very_u5eful_1n_rever5e_engin3ering}

标签:11,10,12,HGAME,add,num,key,kunmusic,week3
From: https://www.cnblogs.com/reverse-chen/p/18302464

相关文章

  • [HGAME 2023 week3]kunmusicin
    这道题挺好玩的,坑了我几下,记录一下题目下载得到3个文件 exe打开,不同按钮发出不同声音,除此之外就没有其他东西了 exe-Dieexe-IDAmain函数,没有找到“唱”“跳”“篮球”之类的关键字符串因为爆红,所以动调了一下,也没发现什么东西 string窗口也没有找到关键词语 ......
  • 吴恩达机器学习 第二课 week3 学习算法(模型)进阶
    目录01学习目标02导入计算所需模块03多项式回归模型进阶3.1数据集划分3.2 寻找最优解3.3 正则优化3.4增大数据量04神经网络模型进阶4.1数据准备4.2模型复杂度4.3正则优化05总结01学习目标   (1)掌握多项式回归模型的求解和优化   (2)掌握神......
  • web_week3
    web_week3javaweb[RoarCTF2019]EasyJava考点Web.xml文件泄露:漏洞描述:Web.xml是JavaWeb应用的配置文件,位于WEB-INF目录下,通常不应被直接从Web访问到。如果Web服务器配置不当,允许直接通过URL访问WEB-INF/web.xml,攻击者就能获取到该文件的内容。这本身构成了一种信息泄露......
  • 16位简单ASM题的记录——[HGAME 2022 week1]easyasm
    第一次遇见16位,和纯看汇编的题目,记录一下DIE16位,IDA用32位或者64位都可以打开IDA主要汇编部分seg003:0000;===============SUBROUTINE=======================================seg003:0000seg003:0000;Attributes:noreturnseg003:0000seg003:0000......
  • hgame2023 vm
    vm逆向hgame2023vm简单翻阅一下发现,sub_140001000里面是vm_init,sub_1400010B0是主要的vm部分查看vm_init部分,发现只知道cpu结构的大小以及初始值和24-32字节的结构,前24字节的结构未知,暂时还无法构建cpu的结构,需要更多的信息。分析下面两图的函数可以得知,opcode总共有8个,byt......
  • newstartweek3部分题解
    64位利用格式化字符串修改got表例题:newstartweek3putorsystem老规矩先checksec和代码审计:看到开了canary和NX(但是对于这道题的话canary是没有用的),然后源码这边也没有发现有system函数,也没有后门函数,所以我们需要自己在libc里面找,然后就有bin/sh那么我们就只用把got表里......
  • 【WEEK3】 【DAY3】JSON交互处理第二部分【中文版】
    2024.3.13Wednesday接上文【WEEK3】【DAY2】JSON交互处理第一部分【中文版】目录6.4.代码优化6.4.1.乱码统一解决6.4.2.返回JSON字符串统一解决6.5.测试集合输出6.5.1.在UserController.java中添加一个新方法json26.5.2.运行6.6.输出时间对象6.6.1.在UserControlle......
  • HGAME 2024 WEEK3 crypto
    CRYPTOexRSA题目描述:RRRSAfromCrypto.Util.numberimport*fromsecretimportflagm=bytes_to_long(flag)p=getStrongPrime(1024)q=getStrongPrime(1024)phi=(p-1)*(q-1)e1=inverse(getPrime(768),phi)e2=inverse(getPrime(768),phi)e3=inverse(getPrime(768),phi)......
  • winter week3 day1
    2024牛客寒假算法基础集训营2ATokitsukazeandBracelet#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair<string,int>PSI;typedefpair<stri......
  • HGAME 2024 WEEK2 Crypto Misc
    CRYPTOmidRSA题目描述:兔兔梦到自己变成了帕鲁被crumbling抓去打黑工,醒来后连夜偷走了部分flagfromCrypto.Util.numberimport*fromsecretimportflagdefpadding(flag):returnflag+b'\xff'*(64-len(flag))flag=padding(flag)m=bytes_to_long(flag)p=getPrime......