加密与解密
动态分析技术
2.1 OllyDbg
2.1.1 OllyDbg界面
默认的当前窗口是CPU窗口,绝大多数的调试程序都要在这个窗口进行
它包括五个面板窗口:反汇编面板,寄存器面板,信息面板,数据面板,堆栈面板
1.反汇编面板(Disassembler)
反汇编面板显示被调试程序的代码。
它有四个列,地址,机器码,反汇编代码和注释
在反汇编面板中,双击完成以下动作
Addresss:显示相对被单击地址的地址,再次双击返回到标准地址模式
Hex dump:设置或取消无条件断点,对应F2
Disassembly:调用汇编器,可直接修改汇编代码
Comment:允许或添加注释,对应;
2.信息面板窗口
3.数据面板窗口
4.寄存器面板窗口
5.堆栈面板窗口
2.1.2 OllyDbg的配置
略
2.1.3 加载程序
1.利用CreateProcess创造进程
F3打开目标文件,这时会调用CreateProcess(WIN32API函数)创建一个用以调试的新进程,对其子进程的调试事件不予理睬。
也支持带参数的程序,方法是:在打开对话框的"Arguments"栏中输入参数行
2.将OllyDbg附到一个正在运行的进程上
原理:利用DebugActiveProcess函数将调试器捆绑到一个正在运行的进程上。
过程略
如果是隐藏进程,就不能用上述方法附加了。
OllyDbg有一个-p启动参数,只要得到进程的pid(操作系统里每打开一个程序都会创建一个进程ID,即PID)就可以附加了。
用LceSword等工具可以获得隐藏进程的pid,然后在控制台窗口用-p参数附加即可,注意,pid的值是十进制。
2.1.4 基本操作
讲解一个用VC C++ 6.0 编译的程序讲解,优化选项按默认为"Maximize speed"。
1.准备工作
首先来看一个TraceMe序列号的验证流程。
1.2 win API简介
API:应用程序编程接口
所有32位版本Windows都支持win16API(以确保和旧应用程序兼容)和Win32 API(以运行新应用程序)
Windows运转的核心是一个被称为“动态链接”的概念。Windows提供了应用程序可利用的丰富的函数调用,这些函数采用动态链接库即DLL实现
在早期Windows的主要部分只需是三个动态链接库中实现。这代表了Windows的三个子系统,它们分别叫:Kernel,User和GDI
Kernel:操作系统核心功能服务,包括进程与线程控制,内存管理,文件访问
User:负责处理用户接口,包括键盘和鼠标输入,窗口和菜单管理
GDI:图形设备接口,允许程序在屏幕和打印机上显示文本和图形
Windows还提供了一些其他DLL:
对象安全性,注册表操作(ADVAPI32.DLL)
通用控件(COMCTL32.DLL)
公共对话框(COMDLG32.DLL)
用户界面外壳(SHELL32.DLL)
图形引擎(DIBENG.DLL)
网络(NETAPI32.DLL)
1.2.2 常用win32 API函数
API函数是区分字符集的:A表示ANSL;W表示Widechars.即Unicode.
前者就是通常使用的单字节方式,后者是宽字节方式,以便处理双字节字符。
常用API函数:
1)hmemcpy
.void hmemcpy( //目的数据地址
void_huge *hpvDest, //源数据地址
const void_huge *hpvSounrce, //数据大小(字节)
long cbCopyn
);
将内存中的一块数据拷贝到另一地方
2)GetWindowText
int GetWindowText (
HWND hWnd, //窗口或文本控件句柄
LPTSTR lpString, //缓冲区地址
int nMaxCount //复制的最大单字符数
);
取得一个窗体的标题文字,或者一个文本控件的内容
补充:1.3.2 WOW64
WOW64是64位Windows操作系统的子系统,可以使大多数32位应用程序在不进行修改的情况下运行在64位操作系统上。