读书笔记 《加密与解密》(第四版)

加密与解密

动态分析技术

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位操作系统上。

你可能感兴趣的:(读书笔记 《加密与解密》(第四版))