記事のリスト

3.5k単語3 分

# 写在前面 我们知道在游戏中,有两种卡牌交互方式:拖动交互和点击按钮。 想要检测这两种交互动作,就需要patch对应的函数。 # 猜函数 # 拖动交互 # 寻找 在ME中,是在cardinteraction中添加拖动交互,因此先在dnSpy中搜索cardinteraction,发现没有特别符合的函数。 在ME中,除了属性名称,还有这个属性对应的类型,可以看出来cardinteraction是一个list列表,里面存放的是CardOnCardAction类型数据。 搜索CardOnCardAction,发现了一个CardOnCardActionRoutine,翻译过来就是卡对卡行动套路
2.3k単語2 分

# 准备工作 在dnSpy中加载Assembly-CSharp.dll,找到CheatsManager这个类,下面会分别分析该类下各个函数的实现和作用。 控制台的UI由IMGUI构建,在本篇中,会暂时跳过所有UI相关代码。 # 代码分析 # Awake # 作用 调用FillCards函数。 # 实现 Awake作为CheatsManager初始化后执行的第一个函数,代码逻辑非常简单:判断CheatActive的值,即控制台是否能被开启,如果能被开启,则调用FillCards函数。 if (this.CheatsActive) { this.FillCards(); Chea
4.8k単語4 分

# 准备工作 通过Harmony,可以将我们编写的代码挂载到游戏本体的函数上运行,为了实现目的,在开始写代码之前,需要找到合适的函数,以此来挂载我们的代码。 # 使用dnSpy寻找目标函数 寻找目标函数,其实就是猜,通过类名和函数名,大致判断该类及该函数的作用。 先打开游戏根目录,如图找到Assembly-CSharp.dll文件,并将这个文件拖到dnSpy的界面中加载。 将资源展开,可以得到很多类名,每个类名展开,又有很多函数名和变量名。 我们要修改游戏原版的卡牌数据,自然是要在加载游戏的时候进行修改,点击上方的放大镜图标(搜索),尝试搜索LoadGame,发现了三个比较像的
2.9k単語3 分

# 安装软件 # .NETFramework 4.8 # 下载 https://dotnet.microsoft.com/en-us/download/dotnet-framework/thank-you/net481-developer-pack-offline-installer # 安装 直接安装即可 # Rider # 下载 https://download.jetbrains.com/rider/JetBrains.Rider-2023.3.6.exe # 安装
7.5k単語7 分

本次NewstarCTF总共出了14道题,包括Misc、Pwn、Blockchain三个方向。这里只记录我出的题的write up。 # Misc # week1 # 奇怪的音频 本题考点是SSTV。 根据题目描述搜索音频传输图像也可以搜索到相关工具,我是使用robot36,也有师傅用RX-SSTV做出来了。 # week2 # Coldwinds's Desktop montage+gaps一把梭,网上这类题目还是比较多的,本题需要留意的是size参数。 BUUCTF:MRCTF2020不眠之夜 montage+gaps
1.3k単語1 分

最近在学习Solidity,简单记录一下。 推荐0xAA师傅的Solidity极简入门教程 # 函数 solidity官方文档里把函数归到数值类型中,但他们之间的差别还是比较大的。 # 函数类型 在solidity中,函数的定义为: function <function name> () {internal|external|public|private} [pure|view|payable] [returns (<return types>)] 学过C语言的都知道怎么定义一个函数,但solidity中的函数与C的稍微有些不同,它需要额
6.7k単語6 分

最近在学习Solidity,简单记录一下。 推荐0xAA师傅的Solidity极简入门教程 # 变量 变量是编程语言重要的组成部分之一,可以让我们方便的追踪和查看程序中的数据。 # 变量类型 Solidity中的变量类型主要有以下几种: 数值类型:最常见的变量类型,包括布尔型、整型等变量类型。 引用类型:常用的变量类型,包括数组,结构体等变量类型,与数值类型不同的地方在于赋值的时候是传递指针而非直接传递数值(这一点在其他语言也有体现)。 映射类型:类似哈希表,可以通过唯一的key来查询对应的value。 # 数值类型 最常见的变量类型,包括布尔型、整型等变量类型。 # 布尔型
7.1k単語6 分

# Blockchain解题入门 写在前面:近年来Blockchain在CTF比赛中的出现频率越来越高,并且相比于其他方向,Blockchain在解题入门方面的教程还比较少,对于新手来说可能连题目都看不懂,本文以Chainflag平台为例,简单介绍了Blockchain方向题目的解题步骤。 智能合约语言目前以Solidity为主,除此以外,还有Vyper、Mandala和Obsidian等在不同方向改善智能合约的语言。 # 一些工具 这里主要写一下解题时需要用到的一些工具。 # IDE Solidity网站上有编译器的安装教程:https://docs.solidit
3.5k単語3 分

# Off by null # 原理 ​ 在读入数据的时候,对数据长度的检查不严谨,导致了一个NULL字节的溢出。在堆块size为0x100时,溢出NULL字节会导致prev_inuse位被清零,该堆块的前一个堆块会被认为是free(未分配)状态。因此可以通过unlink实现任意地址写,或者伪造prev_size达到UAF的效果。 # 流程 开辟三个堆块分别为chunk0、chunk1、chunk2。 编辑chunk1,输入特定数据使其溢出一个NULL(\x00)字节,覆盖 chunk2的prev_inuse位为0,这时chunk1就会被认为free掉了。 # Unlink ​ Unl
4.1k単語4 分

# 堆 目前 Linux 标准发行版中使用的堆分配器是 glibc 的堆分配器:ptmalloc2,主要通过 malloc/free 来分配和释放内存块。 不同的线程维护不同的堆称为:per thread arena。 主线程创建的堆称为:main arena。 # chunk结构 我们一般称malloc出来的内存块为chunk,这个内存块在ptmalloc用malloc_chunk结构体表示。 结构体定义: /* This struct declaration is misleading (but accurate and necessary). It decla