windows逆向初级公开课
1:进制
程序在计算机中是以二进制的方式存储的。
16进制:0(0000),1(0001),2(0010),3(0011),4(0100),5(0101),6(0110),7(0111),8(1000),9(1001),A(1010),B(1011),C(1100),D(1101),E(1110),F(1111) (牢记,虽然计算机只能处理二进制数据,但是工具来表示二进制数据的话,人看起来不方便,一般使用十六进制表示)
2:字节,字,双字
字节:1个字节有8位(bit)
内存中存储的数据以字节为单位
字(word):1个字有2个字节,也就是16位
双字(dword):1个双字由2个字组成,也就是4个字节,就是32位
3:从整体上把握一个PE文件
第1:程序是从哪里开始执行的?
第2:代码(code)存储在哪里?
第3:数据(data)存储在哪里?
PE文件结构:(查找AddressOfEntryPoint和BaseOfCode,BaseOfData)
工具:LoadPE的使用
软件加壳(打乱pe结构)与软件调试。
硬编码:
比如:55 表示 PUSH EBP
8BEC 表示 MOV EBP, ESP
特征码:也就是那些硬编码,每个软件如果不升级的话,都有一些特定的编码的特征。类似于指纹。
反汇编引擎:硬编码到汇编代码的过程。
用一句话总结逆向:
从二进制程序入手,通过反汇编引擎得到汇编代码,汇编代码再到C程序。
逻辑运算:与,或,非,异或
4:加法的运算:
A+B
1:计算A xor B 等于R
2:计算A and B 假设等于L,L左移1位,如果结果等于0,则R就作为A+B的结果,如果结果不是0,就继续往下运算。
3:R赋值给A,L左移1位后的结果复制给B,A xor B,重复上面的过程。。。。。
5:加密与解密
xx
6:cpu和内存
数据可以存储到cpu集成的寄存器和内存中。
32位通用寄存器的制定用途:
eax 累加器
ecx 计数
edx I/O指针
ebx DS段的数据指针
esp
ebp
esi
edi
byte
word
dword
mov指令
add指令
sub指令
7:内存
内存的特点:
一个字节一个单位,也就是一个字节有一个内存编号(内存地址)
32位表示的是内存编号最长有32bit,所以32位的地址长度可以寻址4GB的内存
8:内存的读写
对内存的读写
读取内存的值:
mov eax, dword ptr ds:[0x13FF04] (取0x13FF04,0x13FF05,0x13FF06,0x13FF07位置的内存内容,也就是4个字节) ds的内容和这段内存的属性有关
mov eax, dword ptr ds:[0x13FF08]
将值写入内存:
mov dword ptr ds:[0x13FF04], ebx
寻址的其他方式:
9:堆栈
一块内存空间
esp 寄存器
ebp 寄存器
这2个寄存器用来标识称之为堆栈的内存空间的范围
push指令
pop 指令
10:变形的艺术
push eax
相当于如下2条汇编指令
lea esp,dword ptr ss:[esp-4]
mov dword ptr ss:[esp], eax
或者
mov dword ptr ss:[esp-4], eax
lea esp,dword ptr ss:[esp-4]
lea esp,dword ptr ss:[esp-4] 相当于 mov esp, esp-4 sub esp,4
问题:push esp和pop esp可以该写成哪种形式??
push esp
相当于
mov eax, esp
sub esp, 4
mov dword ptr ss:[esp], eax
pop esp
相当于
mov eax, dword ptr ss:[esp]
add esp, 4
mov esp, eax
程序在计算机中是以二进制的方式存储的。
16进制:0(0000),1(0001),2(0010),3(0011),4(0100),5(0101),6(0110),7(0111),8(1000),9(1001),A(1010),B(1011),C(1100),D(1101),E(1110),F(1111) (牢记,虽然计算机只能处理二进制数据,但是工具来表示二进制数据的话,人看起来不方便,一般使用十六进制表示)
2:字节,字,双字
字节:1个字节有8位(bit)
内存中存储的数据以字节为单位
字(word):1个字有2个字节,也就是16位
双字(dword):1个双字由2个字组成,也就是4个字节,就是32位
3:从整体上把握一个PE文件
第1:程序是从哪里开始执行的?
第2:代码(code)存储在哪里?
第3:数据(data)存储在哪里?
PE文件结构:(查找AddressOfEntryPoint和BaseOfCode,BaseOfData)
工具:LoadPE的使用
软件加壳(打乱pe结构)与软件调试。
硬编码:
比如:55 表示 PUSH EBP
8BEC 表示 MOV EBP, ESP
特征码:也就是那些硬编码,每个软件如果不升级的话,都有一些特定的编码的特征。类似于指纹。
反汇编引擎:硬编码到汇编代码的过程。
用一句话总结逆向:
从二进制程序入手,通过反汇编引擎得到汇编代码,汇编代码再到C程序。
逻辑运算:与,或,非,异或
4:加法的运算:
A+B
1:计算A xor B 等于R
2:计算A and B 假设等于L,L左移1位,如果结果等于0,则R就作为A+B的结果,如果结果不是0,就继续往下运算。
3:R赋值给A,L左移1位后的结果复制给B,A xor B,重复上面的过程。。。。。
5:加密与解密
xx
6:cpu和内存
数据可以存储到cpu集成的寄存器和内存中。
32位通用寄存器的制定用途:
eax 累加器
ecx 计数
edx I/O指针
ebx DS段的数据指针
esp
ebp
esi
edi
byte
word
dword
mov指令
add指令
sub指令
7:内存
内存的特点:
一个字节一个单位,也就是一个字节有一个内存编号(内存地址)
32位表示的是内存编号最长有32bit,所以32位的地址长度可以寻址4GB的内存
8:内存的读写
对内存的读写
读取内存的值:
mov eax, dword ptr ds:[0x13FF04] (取0x13FF04,0x13FF05,0x13FF06,0x13FF07位置的内存内容,也就是4个字节) ds的内容和这段内存的属性有关
mov eax, dword ptr ds:[0x13FF08]
将值写入内存:
mov dword ptr ds:[0x13FF04], ebx
寻址的其他方式:
9:堆栈
一块内存空间
esp 寄存器
ebp 寄存器
这2个寄存器用来标识称之为堆栈的内存空间的范围
push指令
pop 指令
10:变形的艺术
push eax
相当于如下2条汇编指令
lea esp,dword ptr ss:[esp-4]
mov dword ptr ss:[esp], eax
或者
mov dword ptr ss:[esp-4], eax
lea esp,dword ptr ss:[esp-4]
lea esp,dword ptr ss:[esp-4] 相当于 mov esp, esp-4 sub esp,4
问题:push esp和pop esp可以该写成哪种形式??
push esp
相当于
mov eax, esp
sub esp, 4
mov dword ptr ss:[esp], eax
pop esp
相当于
mov eax, dword ptr ss:[esp]
add esp, 4
mov esp, eax
评论
发表评论