2019年1月23日星期三
到2019年1月25日星期五
任务一:逆向安全暂停一段落,目前达到瓶颈,需要增长其他知识
任务二:研读使用Onlydbg从零开始creaking前10章
第一章:OD的各个窗口介绍
1、反汇编窗口(DESENSAMBLADO)
2、寄存器窗口(registros)
3、堆栈窗口(stack)
4、数据窗口(dump)
L:View->log,显示日志窗口,可以显示Ollydbg启动时,
E:View->Executables,显示程序运行使用的模块:exe,dll,ocx和其他
M:View->Memory,显示程序映射到内存中的信息
T:View->Threads,显示程序的线程窗口
W:View->Windows,显示程序窗口
H:View->Handles,句柄窗口
C:View->CPU,允许返回到Ollydbg的主窗口,CPU窗口
/:View->Patches,显示程序被修改的信息
K:View->Call stack,显示调用堆栈的窗口信息
B:View->Breakpoints,显示程序普通断点的列表窗口
R:View->Reference,参考窗口
...:View->Run trace
F2:设断点,消除断点
F7:执行上一条代码,遇到Call等子程序进入其中,进入后会停留到子程序的第一条
F8:执行一行代码,遇到Call等子程序不进入其代码
F9:运行调试程序
F12:临时暂停程序
第三章:寄存器
ESP是指向堆栈最顶端的地址
EIP是指向当前要执行的地址
EAX ECX EDX EBX ESP EBP ESI EDI EIP
C:标志进位标志(将EAX设为FFFFFFFF,然后加1,无符号运算的结果)
P:奇偶标志(二进制1的数量为偶数的时候,P为1)
A:辅助进位标志
Z:零标志(当运算结果为0的时候该标志被设置)
S:符号标志
T:
D:
O:溢出标志(最大整数7FFFFFFFF+1)
第四章:汇编指令
NOP Push pop mov movsx movzx lea xchg
第五章:数学指令
INC DEC ADD ADC SUB SBB MUL IMUL
AND OR XOR NOT
第六章:比较与条件跳转
CMP 根据它们相减的结果来决定零标志位Z是否置1【JZ】
符号标志位S是比较第一个操作数是否大于第二个操作数,大于为1
TEST 两个数值进行与操作,结果不保存,但是会改变相应标志位(比如说,SF,ZF,PF标志位),程序可以根据结果来决定是否跳转到相应的分支
JUMPS 所有的跳转指令都会指向程序将会跳转到的地址
下面的列表中可以看到各种不同类型的跳转指令
JMP – 跳转
JE, JZ – 结果为零则跳转
JNE, JNZ – 结果不为零则跳转
JS – 结果为负则跳转
JNS – 结果不为负则跳转
JP, JPE – 结果中1的个数为偶数则跳转
JNP, JNPE – 结果为1的个数为奇数则跳转
JO – 结果溢出了则跳转
JNO – 结果没有溢出则跳转
JB, JNAE – 小于则跳转 (无符号数)
JNB, JAE – 大于等于则跳转 (无符号数)
JBE, JNA – 小于等于则跳转 (无符号数)
JNBE, JA – 大于则跳转(无符号数)
JL, JNGE – 小于则跳转 (有符号数)
JNL, JGE – 大于等于则跳转 (有符号数)
JLE, JNG – 小于等于则跳转 (有符号数)
JNLE, JG – 大于则跳转(有符号数)
第七章:call和ret
Call:根据EIP的值进行跳转
Ret:根据栈顶的值进行跳转
第八章:循环与字符串
XOR ECX,ECX
ADD ECX,15h
Label:
DEC ECX
;循环体
TEST ECX,ECX
JNE Label
LOOP:将计数器ECX的值减1,判断ECX的值是否为0,如果为0就跳转到指定的地址
LOOPZ, LOOPE 重复循环,直到零标志位Z置1
LOOPNZ, LOOPNE 重复循环,直到零标志位Z清0
MOVS:将源地址数据拷贝到目的地址
REP:拷贝大小=每次MOVS的大小(拷贝的大小)*ECX
LODS:从源地址拷贝数据到EAX
STOS:将EAX的值拷贝到EDI中
第九章:基本概念
DLL(动态链接库):
? MessageBoxA:寻找该函数地址
返回前一条指令:减号
Ctrl+N:获取CrackMe的API列表
Ret 10比Ret在返回的基础上ESP+14h(20)
第十章:断点
B栏:
Remove:从列表中删除断点。
Disable:禁用断点但并不将断点从列表中删除。禁用时,断点并不会触发。
Edit condition:给断点设置触发条件,我们后面再来讨论。
Follow in disassembler:在反汇编窗口中显示断点。
Disable all or enable all:禁用/启用列表中的全部断点。这里没有启用的选项,因为列表中唯一的断点没有被禁用。
Copy to Clipboard:把选中断点的信息复制到剪贴板
除了F2可以设置断点,命令行bp 401018也可以,bpx MessageBoxA给函数设置断点