Windbg双机调试配置
原理简介要使用Windbg进行内核级调试,必须进行双机调试配置,因为被调试的对象是整个虚拟机操作系统内核,而不仅仅是其中的某个应用程序或进程。 配置虚拟机的管道串口使用VMware制作Windows10虚拟机,安装完成后进入编辑虚拟机设置,若存在打印机则将其移除(因为打印机占用了com_1端口,而后续双机通信要使用的就是com_1端口)。然后点击下方的添加,添加串行端口,选择使用命名的管道并输入\\.\pipe\com_1,剩下两项保持默认的该端是服务器和另一端是应用程序,勾选I/O模式中的轮询时主动放弃CPU,最后点击确定。 此处展示本人已配置好的设置 配置被调试机的管道串口在虚拟机中以管理员身份运行命令行,依次输入如下指令: 1bcdedit /dbgsettings serial baudrate:115200 debugport:1 #设置端口com_1, baudrate为115200 1bcdedit /copy {current} /d DebugEntry #复制一个开机选项,...
UPX基本处理+魔改+手动脱壳
UPX (Ultimate Packer for eXecutables) 是一种流行的运行时压缩壳,拥有多平台支持和较高的压缩率但保护强度较低等特点。在逆向工程的题目中算是一个常见的考点。 基础解法下载upx.exe加/脱壳工具,将其与目标可执行文件放在同一目录下,在当前目录下打开cmd输入如下指令: 1upx -d 要脱壳的程序名.exe 即可完成脱壳 加壳可使用如下指令 1upx -1 要加壳的程序名.exe #更快 或 1upx -9 要加壳的程序名.exe ...
ADB调试
模拟器+jadx+adb调试(Java/Smali层)模拟器本人选择BlueStack5为例,首先点开模拟器的设置菜单: 在“手机”一栏中勾选启用Root权限 在“高级”一栏中找到Android调试(ADB),勾选以127.0.0.1:5555连接到Android 然后用jadx分析要调试的apk文件,点开右上角的调试配置 用命令行打开adb,并输入如下指令连接模拟器服务 1adb connect 127.0.0.1:5555 可使用如下指令确认设备连接状态 1adb devices 此时jadx的调试配置窗口就会出现对应的设备及其包含的程序,选择要调试的程序,点击运行APP即可开始调试 可在Smali层中对指令打断点,运行使断点命中即可。步进、步过、步出功能与IDA类似,可在下方的调试窗口中按按键使用 已Root实机+IDA 8.3+adb调试(Native层)将已Root的实机用USB连接到电脑,打开命令行输入如下指令查看已连接的设备信息 1adb...
AES算法总结
算法详解AES(Advanced Encryption Standard)是新一代的加密标准,其分组长度为128位,密钥长度常为128位。AES的SPN(Substitution-Permutation Network,代换-置换网络) 结构是其加密过程的核心设计思想。SPN 是一种对称密钥分组密码结构,通过多轮重复的 代换(Substitution) 和 置换(Permutation) 操作,结合密钥扩展机制,实现高效的混淆(Confusion)和扩散(Diffusion),从而确保安全性。 AES加密算法的SPN结构有四步操作:逐字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。 逐字节替代SubBytes: AES 加密中的核心非线性操作步骤,通过S盒对状态矩阵的每个字节进行替换,实现混淆。代码中,SubBytes通过查表高效实现: 123456789101112131415// S 盒定义(部分)unsigned char S[256] = { 0x63,...
DES算法总结
算法详解Data Encryption...
XXTEA算法及例题总结
算法详解XXTEA使用更复杂的运算方式,它的块大小可以是任意的,密钥也可以是任意长度的(可以不是4的倍数)。 在加密时,XXTEA会对明文进行分块,然后每个块都会进行加密,加密后的结果再进行拼接,最终形成密文。 在解密时,XXTEA会对密文进行分块,然后每个块都会进行解密,解密后的结果再进行拼接,最终形成明文。 加密过程示意图: 代码实现下面是XXTEA算法加密过程的C语言函数实现 123456789101112131415161718192021void xxtea_encrypt(uint32_t *v, int n, uint32_t *key) { uint32_t y, z, sum, delta, e; uint32_t p, q, rounds, limit; uint32_t *k = key; rounds = 6 + 52 / n; // 计算加密轮数 sum = 0; delta = 0x9E3779B9; // 初始化delta常数 limit = rounds *...
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不同,题目也可能修改循环次数 { v0 += (((v1...
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; // 和加密函数一致的delta常量 for...
RC4算法及例题总结
算法详解RC4是一种流加密算法,其工作原理可以分为两个主要部分:密钥调度算法KSA和伪随机生成算法PRGA。 KSA密钥调度算法: 初始化一个256字节的数组S,S[i] = i。 根据密钥对S进行混排。通过循环交换S数组中的元素,确保密钥影响S的内容。 PRGA伪随机生成算法: 使用KSA生成的S数组,通过循环更新和交换元素生成伪随机字节。 生成的字节与明文进行异或运算,得到密文。 RC4的加密和解密过程相同,因为它是基于与伪随机流的异或运算。 实战识别在逆向分析实战中判断RC4算法的可从其会初始化一个256字节的数组和将一个key填充到数组中以及加密函数大概率有两个参数,一个是key 一个是keylen 代码实现下面是RC4算法加/解密过程的C语言代码实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include...
初识反调试
初识反调试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()) ...