初识反调试
初识反调试1. IsDebuggerPresent()函数包含在debugapi.h头文件中,函数原型: 1BOOL IsDebuggerPresent(); //未在调试器中运行时返回值为零,否则为非零值 该函数允许程序确定是否正在调试它,以便可以修改其行为 2. PEB->BeingDebuggedFS标志段寄存器总是指向TEB(当前的线程环境块),其中包含一个指针指向当前PEB(进程环境块),该结构体包含一个成员BeingDebugged,它是一个标志位,用于标识当前进程是否正在被调试 3. NtQueryInformationProcess函数包含在ntdll.h头文件中,语法如下: 1234567__kernel_entry NTSTATUS NtQueryInformationProcess( [in] HANDLE ProcessHandle, [in] PROCESSINFOCLASS ProcessInformationClass, [out] PVOID...
C语言学习笔记
字符串函数这些str开头的函数均包含在string.h头文件中 strlen(const char*str) 用于统计字符串的长度 strcat(char*str1,const char*str2) 将str2拼接在str1后,返回值是拼接第二个字符串后第一个字符串的地址 strncat(char*str1,const char*str2,size_t n) 解决了strcat中分配给str1的空间不够大,溢出到相邻存储单元的问题。第三个参数指定了最大添加字符数 strcmp(const char*str1,const char*str2) 比较字符串,返回0时字符串相等,>0时str1>str2,<0时str1<str2 strncmp(const char*str1,const char*str2,size_t n) 可以限定只查比较n个字符 strcpy(const char*str1,const char*str2) 将str2复制到str1 strncpy(const char*str1,const char*str2,size_t n)...
XYCTF 2025 Re复现
WARMUPVBS逆向,用VScode等文本编辑器打开.vbs文件,将开头处的Execute修改为wscript.echo再运行即可得到源码如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051MsgBox "Dear CTFER. Have fun in XYCTF 2025!"flag = InputBox("Enter the FLAG:", "XYCTF")wefbuwiue =...
Linux联调
IDA linux远程调试安装调试服务端程序在IDA的目录下找到以下位置的文件:IDAPro/dbgsrv/linux_server和linux_server64。将这两个文件拖入linux虚拟机中的合适位置。 查看虚拟机IP地址在虚拟机命令行中输入 1ifconfig 可看到以下内容,其中inet后面的就是虚拟机的IP地址: 查看虚拟机远程调试服务端口在终端打开之前调试服务端程序所在位置,然后输入以下命令: 12chmod 777 linux_server64 # 为文件获取足够的权限./linux_server64 # 启动调试服务端程序 此时终端就会显示远程服务的端口号: 配置IDA远程调试将要动态调试的程序也放在那个目录下,然后打开IDA,在菜单栏中找到并点击Debugger,选择Remote Linux...
Python学习笔记
第二章 变量与简单数据类型 Python单双引号均可括起字符串,这样便于使用本身包含引号和撇号的字符串 .title()方法返回字符串首字母大写,其余字母小写的字符串 .upper()方法返回字符串全大写的字符串 .lower()方法返回字符串全小写的字符串 Python使用加号+合并字符串 .rstrip()方法可移除字符串末尾的空格 .lstrip()方法可移除字符串开头的空格 .strip()方法可移除字符串开头和末尾的空格 调用上文中的三个方法不会改变原字符串本身的内容,除非将结果存回原变量中 str()函数可将非字符串类型转换为字符串类型,便于将非字符串类型的数据合并到字符串中并输出 第三章 列表简介 负数作为索引可从后往前索引元素 修改列表元素可通过赋值直接进行修改 .append(新元素)方法可向列表末尾添加元素 .insert(目的索引,新元素)方法可向列表任意位置插入元素 del...
DeepSeek本地部署过程
现今DeepSeek作为一款性能出色的国产的开源AI大模型,性能与ChatGPT已不相上下,其在国内外均掀起了一片浪潮,登陆其官方网站即可开始使用。但是对于CTF手来说,进行线下断网的比赛时就无法使用网页版了,因此我们可将其部署到本地,以便在断网的情况下也能使用。 安装OllamaOllama是一款帮助用户在本地计算机上运行和交互大型语言模型(LLM)的工具。它简化了开源...
密码算法总结
RC4RC4是一种流加密算法,其工作原理可以分为两个主要部分:密钥调度算法KSA和伪随机生成算法PRGA。 KSA密钥调度算法: 初始化一个256字节的数组S,S[i] = i。 根据密钥对S进行混排。通过循环交换S数组中的元素,确保密钥影响S的内容。 PRGA伪随机生成算法: 使用KSA生成的S数组,通过循环更新和交换元素生成伪随机字节。 生成的字节与明文进行异或运算,得到密文。 RC4的加密和解密过程相同,因为它是基于与伪随机流的异或运算。 在逆向分析实战中判断RC4算法的可从其会初始化一个256字节的数组和将一个key也填充到数组中以及加密函数大概率有两个参数,一个是key 一个是keylen 下面是RC4算法加/解密过程的C语言代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include...
16位汇编学习笔记
一、常见的寄存器1. 通用寄存器包括: AX累加寄存器 BX基址寄存器(常用于存放要使用数据的偏移地址,即放在[]中的数据) CX计数寄存器(使用Loop指令循环时其会存放要循环的次数) DX数据寄存器 注:数据在寄存器中以小端序方式进行填充,低8位构成AL寄存器,高八位构成AH寄存器 2. 段寄存器CS代码段寄存器 DS数据段寄存器 SS堆栈段寄存器 ES附加段寄存器 3. 指针寄存器SP堆栈指针寄存器(指向堆栈的当前栈顶) BP基址指针寄存器(用于基址寻址) SI源变址寄存器 DI目的变址寄存器 IP指令指针寄存器(指向下一条即将执行指令的地址) 4....
个人博客搭建过程
一些”原理”做一件事知道了原理再去做,常常会让我们的方向更加明晰。所以,在开头处先来分享一点我个人对搭建博客的理解。这里使用的是Hexo这种生成博客页面的工具。首先,我们通过Github建立一个仓库的博客,里面存放着我们博客中的内容,然后通过Git将本地的一个存放着博客中的原始数据的文件夹与Github中的那个仓库链接起来,接着通过Hexo这个工具把我们编写的博客内容和一些配置文件转化为博客网页中的实际数据和代码存放在Github的仓库中,最终实现对博客网站内容的编辑。(仅为个人主观理解的想法,可能不太准确) 准备工作已知了前面的”原理”,我们不难发现要准备的无非是三样东西:Github Git Hexo,那么我们要做的准备工作也就很明晰了 注册Github账号可在Github官网按照引导完成注册 下载Git可点击此处的链接前往官网下载Git 配置HexoHexo的实现基于Node.js,所以需要下载。可点击此处的链接前往官网下载安装包,按照自己电脑的系统选择合适的安装包下载并进行安装即可 可用如下命令查看自己安装后Node的版本以确认是否成功安装 1node...