RC4算法及例题总结
算法详解RC4是一种流加密算法,其工作原理可以分为两个主要部分:密钥调度算法KSA和伪随机生成算法PRGA。 KSA密钥调度算法: 初始化一个256字节的数组S,S[i] = i。 根据密钥对S进行混排。通过循环交换S数组中的元素,确保密钥影响S的内容。 PRGA伪随机生成算法: 使用KSA生成的S数组,通过循环更新和交换元素生成伪随机字节。 生成的字节与明文进行异或运算,得到密文。 RC4的加密和解密过程相同,因为它是基于与伪随机流的异或运算。 实战识别在逆向分析实战中判断RC4算法的可从其会初始化一个256字节的数组 和将一个key填充到数组中以及加密函数大概率有两个参数,一个是key 一个是keylen 代码实现下面是RC4算法加 /解密过程的C语言代码实现 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#include &l...
DES算法总结
算法详解Data Encryption Standard是一种对称密钥加密算法,由IBM公司开发,并于1977年被美国国家标准局采纳为联邦信息处理标准。DES使用56位的密钥和64位的明文分组,通过16轮的Feistel网络进行加密。 DES使用的Feistel网络的结构分为很多个轮(DES为16轮),其中一轮的流程大致为:将输入的64位明文分为长度相等的左右两部分,右半部分直接保留,左半部分由本轮产生的子密钥和右半部分代入轮函数f所得的结果与原左半部分进行异或运算得到,然后将左右两部分交换,进行下一轮加密。其示意图可表示为: 本人用自己的语言总结其算法如下: 在加密时,首先进行一次IP置换,然后即进入Feistel网络,轮函数f的具体过程为先对左半部分进行E置换将其从32位扩展为48位,然后与轮秘钥按位异或,然后分为8组,每组6位,用这六位的首位和末位作为列索引,用剩下4位作为行索引,从对应的S盒中取出对应的值,然后进行P置换,将结果与右半部分进行异或运算,最后将结果与左半部分交换,进行下一轮加密。在最后一轮加密结束后,进行一次逆IP置换得到最终的密文。 而密钥生成过程则是...
TEA算法及例题总结
算法详解TEA在加密的过程中要加密的明文 使用2个32位无符号整数(2×4字节),秘钥 为4个32位无符号整数(4×4字节),更长的明文可通过分为多个4字节为单位的小组分别进行加密(循环) 加密流程示意图: 实战识别在逆向分析实战中判断TEA算法的可从其3行核心加密中出现的右移4左移5,两行各有3个小括号互相异或的加密流程 和单次加密循环32次 以及运算中出现的sum和delta变量看出 代码实现下面是TEA算法加密 过程的C语言函数实现 123456789101112131415#include <stdio.h> #include <stdint.h> void encrypt(uint32_t* temp, uint32_t* key) // 解密函数 { uint32_t v0 = temp[0], v1 = temp[1]; int sum = 0; // 初始sum值,注意此处要修改为delta的32倍 uint32_t delta = 0x9e3779b9; // 和加密函数一致...
XTEA算法及例题总结
算法详解在TEA中,密钥是直接分成4个32位部分(总共128位),每轮加密过程中使用这些部分直接参与计算。密钥在整个加密过程中的使用比较固定,没有变化。这样,攻击者只需要通过分析固定密钥的几轮加密就能发现模式,从而降低了加密算法的安全性。 在XTEA中,以及密钥并不是每轮加密中直接使用固定的部分 。相反,XTEA通过密钥的不同部分在每一轮加密中进行动态调度 ,密钥在加密过程中会经过多次变换,从而增强了密钥的复杂性和加密过程的不可预测性。 加密流程示意图: 代码实现下面是XTEA算法加密 过程的C语言函数实现 12345678910111213void encrypt(uint32_t v[2], uint32_t const key[4]) { unsigned int i; uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9; for (i=0; i < 64; i++) // XTEA默认循环64轮,与TEA不同,题目也可能修改循环次数 { ...
XXTEA算法及例题总结
算法详解XXTEA使用更复杂的运算方式,它的块大小可以是任意的,密钥也可以是任意长度的(可以不是4的倍数)。 在加密时,XXTEA会对明文进行分块 ,然后每个块都会进行加密,加密后的结果再进行拼接,最终形成密文。 在解密时,XXTEA会对密文进行分块 ,然后每个块都会进行解密,解密后的结果再进行拼接,最终形成明文。 加密过程示意图: 代码实现下面是XXTEA算法加 /解密过程的C语言函数实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include <stdint.h> #include <stdio.h> #define DELTA 0x9e3779b9 #define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^...
初识反调试
IsDebuggerPresent()函数包含在debugapi.h头文件中,函数原型: 1BOOL IsDebuggerPresent(); //未在调试器中运行时返回值为零,否则为非零值 该函数允许程序确定是否正在由用户模式调试器(如 OllyDbg 或 x64dbg)调试它,以便可以修改其行为。通常,该函数只检查进程环境块 (PEB) 的 BeingDebugged 标志。 Assembly: 1234567 call IsDebuggerPresent test al, al jne being_debugged ... being_debugged: push 1 call ExitProcess C/C++: 12if (IsDebuggerPresent()) ExitProcess(-1); CheckRemoteDebuggerPresent()函数包含在kernel32中的CheckRemoteDebuggerPresent()检查调试器(在同一台计算机...
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 = "90df4407ee093d309098d85a42be57a2979f1e51463a31e8d15e2fac4e84ea0df622a55c4ddfb535ef3e51e8b2528b826d5347e165912e99118333151273cc3fa8b2b3b413cf2bdb1e8c9c52865efc095a8dd89b3b3cfbb200bbadbf4a6cd...
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 debuger,然后进行如下配置: 其中,填入信息如下: 选项 应填入的信息 Application 待调试文件在Linux上的路径(包括待调试文件) Director 调试文件所在的文件夹路径 Parameters 运行参数,例如运行可执...
DeepSeek本地部署过程
现今DeepSeek作为一款性能出色的国产的开源AI大模型,性能与ChatGPT已不相上下,其在国内外均掀起了一片浪潮,登陆其官方网站即可开始使用。但是对于CTF手来说,进行线下断网的比赛时就无法使用网页版了,因此我们可将其部署到本地,以便在断网的情况下也能使用。 安装OllamaOllama是一款帮助用户在本地计算机上运行和交互大型语言模型(LLM)的工具。它简化了开源LLM的下载、管理和实验流程,无需依赖云服务。 可在官网上下载Ollama:https://ollama.com/download 下载DeepSeek模型在Ollama中根据自己电脑的配置选择合适的DeepSeek模型下载 地址:https://ollama.com/library/deepseek-r1:1.5b 根据下载界面复制下载对应的指令,复制到Cmd命令行里运行即可下载 下载完成后即可在命令行中与DeepSeek进行对话了 下载Chatbox虽然在上一步已经可以和Deepseek在命令行中对话了,但是命令行界面实在是不太美观和方便,故我们可以下载Chatbox来引入图形化界面便于使用 可在官网上下...
