BIN
介绍了其定义和特点,主要难度较大所以一定是要根据自己的兴趣合理选择并且坚持进行下去
web
RE 即逆向工程
分为攻和防
攻
指软件分析技术,具体包括恶意程序分析,破解盗版,打补丁,漏洞挖掘等
防
指软件保护技术,具体包括代码混淆,代码虚拟化,代码扁平化等
PWN
软件漏洞
挖掘->分析->利用->修补
漏洞类型
缓冲区溢出,整数溢出,格式化字符串,释放后使用
资料推荐
*《核心原理 逆向工程》
汇编语言初探
C语言代码 汇编指令 机器码
机器只能识别机器码,C语言代码通过汇编指令转化成机器码
数值表示
进制
二进制后有标志b,十进制是标志d,十六进制是标志h
Eg:01010 后面没有任何标志是默认为十进制
字长
Bit:位
Byte:字节,与char对应,一个字节占8位
Word:一个Word占两个字节
寄存器
8+1+1种常用寄存器
EAX ECX EDX EBX ESP EBP ESI EDI 这八种可以存任何类型的东西,其中部分有其特殊使用功能
标志寄存器
ZF 标志上次运行结果是否为0
寻址方式
立即数寻址
MOV EAX,123H 表示将123h这个数值赋给EAX
寄存器寻址
MOV EAX,EBX 表示将EBX里的东西赋给EAX
# 直接寻址
MOV EAX,[12345678h] 表示将12345678H这个地址里的内容赋给EAX
寄存器间接寻址
MOV EAX,[EBX] 表示将EBX里存的东西赋给EAX
总结:123h直接数字则就是表示数值,[ ]相当于c语言里的&,即取括号里地址所对应的值
基本指令
数据传送
MOV:等同于copy,赋值 PUSH:入栈 ,POP:出栈, LEA:获取有效地址里的内容(等同于&) ,等
算术运算
(ADD:等同于+ ,SUB:等同于-),(TNC,DEC)
eg:ADD EAX 1 => EAX+=1
INC EAX => EAX++
NEG:取反,CMP:比较,MUL:乘法运算 ,等
逻辑运算
AND OR NOT XOR TEST,等
Ollydbg
直接将运行程序拖到代码区域即可
区域展示
其他窗口
L(og):日志信息
E(xecute modules):模块信息
M(emory map):内存映射信息
T(hreads):线程信息
W(indows):窗口信息
H(andles):句柄信息
C:当前线程上下文
K:调用链信息,等等
常用快捷键
找到主函数的几种方法
1.层层递进(F8)
一直重复按F8运行,当光标不在向下时说明此处是主函数或者是主函数的内部
2.字符串检索法
任意页面右键 -> 搜索 -> 智能搜索 (字符串可以检索的)
修改输出
1.找到主函数
2.在内存区选择Ctrl g,在弹框中输入找到的主函数的后缀的地址,确定
3.选中内存区中的主函数部分,Ctrl e,在弹框中修改掉输出即可
注:只能修改一次输出框,ctrl f2重新运行后结果还是原来的输出