polarisctf招新赛-2026~
1.Illusion
这标着是简单题,我倒要看看是怎么样的
用detect it easy看了一下并没有加壳

开头就有个字符串验证LABEL_12有exit(0)一看就是有异常退出
所以
1 | if ( n28024[0] != 'x' ) |
可以看出来最后一个下标18为}所以猜测字符串长为19
这道题应该有反调试首先是
输入之后直接来这个沉浸在幻术之中吧,那么main函数真的是程序的主逻辑所在吗
题目名称是illusion幻觉
1 | int func(void) |
c不允许这代码,它不允许常数表达式的函数调用
c规定静态存储期变量必须用常数表达式初始化,函数调用不是常量表达式
执行main/Wmain函数前,c/c++运行时库会进行一系列初始化,

在初始化时回到用_initterm与_initterm_,按表顺序遍历并调用,批量调用前置的初始化函数
1 | _initterm(&_initterm_ptr, &_initterm_ptr_end) |
发现调用sub_7FF7ABB81000//这简单题就有inlinehook,发现以前学的还是太浅了
VirtualProtect(MessageBoxA, 0xEu, 0x40u, &flOldProtect)
为什么是0xe这个14字节,因为jmp函数在汇编中jmp指令是ff 25 00 00 00 00 +8字节
指令由操作码(opcode)与操作数组成(oprand)
CRT初始化
程序的默认入口点是CRT提供的函数:
控制台程序:mainCRTStartup
程序窗口:WinMainCRTStartup
主要完成
1.操作系统底层对接与安全环境准备(安全环境cookie初始化)
2.操作系统参数的翻译
3.CRT本身核心组件的初始化(Heap init, I/O系统与标准流,区域设置)
4.执行C++全局/静态对象的构造
5.执行main函数
Windows的API
GetModuleHandle:获取模块句柄,获取加载DLL的及地址
GetProcAdress:获取函数地址,从指定DLL中导出函数地址
VirtualProtect:修改内存保护属性,改变一快内存的权限
1 | Bool VirtualProtect( |
[in] LPVOID lpAddres是访问保护属性的页区域的起始页的地址
[in]SIZE_T dwSize:区域的大小
[in] flNewProtect内存保护选项
[out] lpfloldProtect指向变量的指针,接受第一页先前的访问保存值(备份原来的值)
