CTF游戏逆向入门
CTF游戏逆向入门Unity游戏逆向Unity3D最大的一个特点是一次制作,多平台部署,而这一核心功能是靠 Mono 实现的。可以说一直以来 Mono 是 Unity3D 核心中的核心,是 Unity3D 跨平台的根本。这种形式一直持续到 2014 年年中,Unity3D 官方博客上发了一篇 “The future of scripting in unity ” 的文章,引出了 IL2CPP 的概念,这种相比 Mono 来说安全性更强的方式。 1.Mono 打包逆向Mono 打包方式逆向比较简单,其核心代码都在 game/data/Managed/AssemblyCSarp.dll 这个 dll 文件中,使用 dnSpy 进行分析,几乎就是可以明文随便篡改。 [BJDCTF2020]BJD hamburger competition 这个Mono还是比较好识别出来的, 游戏名_Data -> Managed -> AssemblyCSarp.dll...
2025宁波市第八届网络安全大赛Re方向wp
本人很cai
题目复现2
题目复现21.BUU-[FlareOn6]Overlong解题思路老步骤,先查壳,发现是无壳32位,直接IDA打开。  发现函数特别少,还挺简洁的。  我们能分析出来,Text是我们要的flag,最终会使用弹窗输出出来,我们可以直接动调看看,发现是  这个弹窗上的像是没有输出完一样,我们就查看unk_3D2008的数据有多少。 发现这个数据其实有很多很多 起始地址是0x003D2008  结束地址是0x003D20B7  我们可以使用计算器来计算它的大小,得出结果是0xAF  转到汇编看一下,现在已经清楚是分配的内存空间太小,以至于在进行sub_3D1160函数加密的时候,只能实现0x1C个字节,我们应该把0x1C改成0xAF,这样就能输出完整了。  如何改呢,在汇编成面push 1Ch 处打上断点,然后进行调试。  我们可以直接将1C patch 成 AF  改完后,我们直接按F9让它运行到弹窗,完整的flag就出来了。  记录本题是给数据分配的内存空间太小,导致flag不完整,可以通过patch来修改内存大小。 2.BUU-[羊城杯...
UPX手脱壳
UPX手脱壳寻找OEPESP 定律法是脱壳的利器, 是应用频率最高的脱壳方法之一,它的原理在于利用程序中堆栈平衡来快速找到 OEP。 由于在程序自解密或者自解压过程中,不少壳会先将当前寄存器状态压栈,如使用 pushad,在解压结束后会将之前的寄存器值出栈,如使用 popad。因此在寄存器出栈时,往往程序代码被恢复,此时硬件断点触发。然后在程序当前位置,只需要少许单步操作,就很容易到达正确的 OEP 位置。  程序刚载入开始 pushad/pushfd 将寄存器压栈后就在 ESP/RSP 寄存器所在地址处设硬件访问断点 运行程序,触发断点  找到 pushad 。pushad = 一次性保存所有通用寄存器到栈。有的时候不是pushad,而是一连串的 push 将通用寄存器入栈也是一样的。  然后在这个地址处设硬件断点,硬件断点,访问 -> 4字节  然后直接运行,看到程序跳到 popad,显而易见的程序进行弹栈操作后又进行了jmp...
反调试
反调试反调试是什么?反调试是用来检测并阻止程序被调试器(debugger)分析的一种技术,当程序意识到自己可能处于调试中的时候,可能会改变正常的执行路径或者修改自身程序让自己崩溃,从而增加调试时间和复杂度。 函数检测函数检测就是通过 Windows 自带的公开或未公开的函数直接检测程序是否处于调试状态。    Windows API 作用    IsDebuggerPresent 检测当前进程是否被调试   CheckRemoteDebuggerPresent 检测一个远程进程是否处于调试状态   NtQueryInformationProcess() 获取进程信息,判断调试状态   IsDebuggerPresent1BOOL WINAPI IsDebuggerPresent(void);  该函数查询进程环境块(PEB)中的 BeingDebugged 标志,如果进程处在调试上下文中,则返回1,否则返回0。 CheckRemoteDebuggerPresent1234BOOL WINAPI CheckRemoteDebuggerPresent(  _In_   ...
SMC
SMC什么是SMCSMC(Self Modified Code),也就是自修改代码。它是在执行过程中修改自身指令的代码或数据,来组织别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果。 VirtualProtect 函数通常用于代码自加密的场景。代码自加密是一种保护代码不被轻易逆向分析的技术,通过在程序运行时动态地修改代码的内存保护属性,使得代码在执行时可以被修改和执行,但在不执行时则不能被读取或修改。 123456BOOL VirtualProtect(  LPVOID lpAddress,           // 要修改的内存起始地址  SIZE_T dwSize,              // 要修改的字节数  DWORD  flNewProtect,        // 新的保护属性  PDWORD lpflOldProtect       // 原始保护属性(输出));  它的作用是:修改指定内存区域的访问权限(如改为可读写可执行),并返回之前的保护属性。这是在Windows程序里。 mprotect()函数是在Linux...
picoCTF 2024
picoCTF 2024Re复现1.packer题目描述Reverse this linux executable? 反转这个 Linux 可执行文件? 解题思路题目附件是一个可执行的ELF64文件,将它先放入DIE里查壳,发现有UPX壳,首先要进行脱壳。  这是最简单的UPX壳。脱完后我们将它放入IDA里进行静态分析。   逻辑简单清晰,flag显而易见就是v13的内容。 构造exp解出flag即可。  exp12a=bytes.fromhex("7069636f4354467b5539585f556e5034636b314e365f42316e34526933535f35646565343434317d").decode()print(a)    2.FactCheck题目描述This binary is putting together some important piece of information… Can you uncover that information?Examine this file. Do you understand...
花指令
花指令什么是花指令花指令实质就是一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑。在软件保护中,花指令被作为一种手段来增加静态分析的难度,使程序无法很好的反编译。花指令也可以被用在病毒或木马上,通过加入花指令改变程序的特征码,躲避杀软的扫描,从而达到免杀的目的。 花指令大致可以分为可执行花指令和不可执行花指令。 这两天我学习了两位大佬的博客,想着写一个花指令并且带有对应练习题目的总结。 https://blog.csdn.net/Captain_RB/article/details/123858864 https://bbs.kanxue.com/thread-279604.htm 学习花指令的准备在一个程序中想要理解发现花指令就必须要理解明白汇编指令。 push ebp —-把基址指针寄存器压入堆栈pop ebp —-把基址指针寄存器弹出堆栈push eax —-把数据寄存器压入堆栈pop eax —-把数据寄存器弹出堆栈nop —–不执行add esp,1—–指针寄存器加1sub esp,-1—–指针寄存器加1add esp,-1——–指针寄存器减1sub...
题目复现1
题目复现本周做的题 BUU-简单注册器用jadx打开apk文件 找到MainActivity分析加密方式  123456789101112131415161718192021222324#include <iostream>using namespace std;int main() {    char str[] = {...
安卓逆向1
安卓逆向apk 文件结构APK 是 Android PacKage 的缩写,是 Android 源文件打包后的安装包。apk 其实就是一个 zip 格式的压缩包。想要知道 apk 包含了什么,可以修改后缀名为zip,然后用解压缩工具打开 apk 文件。 如果有 代码混淆 和 加密,通过普通解压缩工具打开里面的文件或目录会看到各种乱码。APK 文件 目录:  assets   不经过 aapt 编译的资源文件, apk 中不用编译的资源(其他类型的文件)通常放在 /assets 目录和 /res/raw 目录下  drawable   图片  lib .so 文件  有的题需要逆向lib .so文件,放到IDA64位里查看  META-INF  文件摘要,摘要加密和签名证书文件目录  CERT.RSA   公钥和加密算法描述  CERT.SF   加密文件,它是使用私钥对摘要明文加密后得到的 密文信息,只有使用私钥配对的公钥才能解密该文件  MANIFEST.MF   程序清单文件,它包含包中所有文件的摘要明文  res  ...



