《加密与解密》笔记

第一章 基础知识

ASCII和UNICODE字符集
字节序
Win32 API:主要通过DLL实现
主要有三个:kernel32.dll,user32.dll,gdi32.dll
学习win32 api的书籍:《windows程序设计》
WOW64:在64位系统运行32位程序,但是不能安装32位内核的驱动
Windows消息机制
虚拟内存

第二章 动态分析技术

OD的使用:在“Option”-"Debugging options"中可以选择忽略异常
Ctrl+F9:运行到返回
Alt+F9:返回应用程序代码段
常用断点:
INT 3断点:CC指令。
硬件断点:DRx寄存器,DR0-DR3:调试地址寄存器,只有4个,只能设置4个硬件断点,DR7调试寄存器组控制寄存器。
内存断点:对相应地址所在内存页面设置不可访问/写属性,然后比较是否是断点地址,OD只能设置一个
消息断点
条件断点
RUN Trace和HIT Trace
调试符号
加载程序的方式:1.CreateProcess 2.附加:DebugActiveProcess
x64dbg
MDebug
Windbg:跳转到程序入口:命令窗口(Alt+1)-输入“g @$exentry”
r查看内容,跟进t,单步步过pg运行,pa单步步过到地址,pc单步到下一个call,pt单步到ret,ph单步到下一个分支指令
伪寄存器$ra代表当前函数的返回地址,"pa @$ra"代表运行到返回
断点:1.软件断点:bp 地址或符号 “中断时执行的命令”,bu 符号,bm 通配符 2.硬件断点:ba 3.条件断点:bp xxx ".if(){}.else{}"
bl列出断点,bc删除断点,bd禁止断点,be启用断点,br改变断点编号
k查看栈回溯,kb查看栈回溯并显示栈上的前三个参数,kp栈回溯显示参数原型,kv在kb加上调用约定,kd显示栈中的数据
内存命令:
d系列命令查看内存,
s - [type] range pattern 在指定内存范围内搜索字符串,[type]表示数据格式,b是byte,w是word,d是dword,a是ascii,u是unicode,默认是b
e系列修改内存:两种格式:
1.改字符串:e{a|u|za|zu},za,zu代表以0结尾的ascii和unicode字符串,a,u相反
2.改值:e{a|b|d|D|f|q|u|w}
查看内存属性:!address [address]

第三章 静态分析技术

文件类型分析:peid,ExeinfoPe
反汇编引擎:OD的ODDisasm,BeaEngine,Udis86,Capstone,AsmJit,Keystone
静态反汇编:IDA
IDA快捷键:X查看交叉引用,N重命名,P创建函数,C数据转成代码,U代码转成数据,A专程ASCII字符串,D转变数据大小,Ctrl+K打开栈窗口
可以创建数组,也可以创建结构体,通过在结构体窗口按Insert,创建结构体还可以通过导入C的头文件来批量进行。枚举类型类似结构体。
FLIRT:
创建:1.获得.lib文件,2.使用FLAIR解析器解析,微软的lib用pcf.exe解析,DLL可以先反编译然后使用IDB2PAT插件生成pat文件 3.使用sigmake.exe将pat文件转成sig签名文件。
IDC脚本:

#include<idc.idc>
static main(){
auto BytePtr,EndImports; // 定义变量
}

也可以用python
插件
调试

原文地址:https://www.cnblogs.com/ttxs69/p/13832223.html