简介:对第二天学习的一个小总结,稍微入门了点软件安全的相关名次与汇编的知识
软件安全
技术:逆向与漏洞挖掘与利用
对象:机器代码
书:逆向工程-核心原理(中间有树叶)
PWN
软件漏洞:挖掘- 分析- 利用- 修补
类型:
- 缓冲区溢出
- 格式化字符串
- 释放后使用
- 重复释放
- 类型混淆
- 缓冲区未初始化
- 协议漏洞
过程:
- 使用工具扫描出漏洞
- 懂漏洞利用原理
- 分析实现漏洞
- 写出漏洞利用代码
- 高阶操作
高阶:自动化漏洞挖掘,漏洞缓解措施
硬件相关
ALU:计算机在运算时使用的运算逻辑单元
寄存器:小,速度与ALU相匹配
内存:大,但速度低
CPU:寄存器+ALU
数值表示
2b代表二进制
2h 代表十六进制
字长:
- bit
- byte
- word
dword
1 B = 8 b
1 word = 2B
1 dword = 2 word = 4B
寄存器相关名词
- EAX 存返回值
- ECX 计数
- EDX 基本无特殊用途
- EBX 基本无特殊用途
- ESP 指向栈顶
- EBP 指向栈底
- ESI 字符串操作source
- EDI 字符串操作destination
- EIP 指向下一条指令
- 标志寄存器zf:与上次结果是否1,0相关
注:所有都是通用寄存器,可以存任意数据。上述是指其特殊额外用法
寻址方式与汇编常用指令
寻址
- 立即数寻址:MOV EAX,123H
- 寄存器寻址:MOV EAX,EBX
- 直接寻址:MOV EAX, [12345678H]
- 寄存器间接寻址:MOV EAX, [EBX]
- 乱七八糟寻址:MOV EAX,123[BX][SI]
汇编常用指令
- MOV指令:本意是copy,是一个赋值指令 eg:MOV EAX,123H 就是指 EAX=123H
- LEA指令 :取地址 LEA,EAX,a 将a的地址赋值给EAX
- MOVSX指令:移动字符串操作(ESI与EDI)
- PUSHAD与POPAD指令:很多push与pop的集合
- ADD,SUB指令:加减 ADD,EAX,1 指EAX+=1
- INC,DEC指令:加减指EAX++或—
- NEG指令:negative取反
- CMP指令:比较
- MUL与DIV:乘除
- JMP:无条件转移,跳转到指定地址
- JA,JB:JA 如果大于就跳,JB如果小于就跳
- LOOP 与JCXZ:针对ECX的循环操作
- INT:打断指令(interrupt)
- RET: 返回指令
- NOP: 空操作
CALL:调用函数
Ollydbg各项操作
简介
分为四大区域,为代码区,寄存器区,堆栈区和内存区
快捷键
- 空格:编辑代码
- F4:运行到光标指定位置
- F2:设置断点
- Enter: 进入调用函数内部
- F9:调试至断点
- F7:单步调试
- F8:越过call调试
- Ctrl+F9:执行直到返回
- Ctrl+F2:重新运行程序
- Ctrl+ E :编辑指定区域
- Ctrl+ G :选定指定区域
基本操作流程
调试的第一步就是找到main函数
main函数特点:
开头与结尾会与ESP与EBP操作相关 最后还有RETURN
找main函数方法
- 代码执行法:不断F7执行,基本不用
- 层层推进法:F8执行,看到哪步会跳出
- 字符串检索法:利用程序输出的字符串,查找后观察周围,一般就为main函数
- API检索法: 一些特定操作有特定API 比如跳出的弹框
- 特征法(老司机法):比如vs创建的main函数会先传入三个参数,找到特征点就可以找到main