[转组第5天] | 天枢分享Reverse入门
Posted nww-570
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转组第5天] | 天枢分享Reverse入门相关的知识,希望对你有一定的参考价值。
2018-04-28
天枢reverse分享:
字节序:大端模式:高低低高;小端模式:高高低低
函数传参方式:
Windows
– 32位: 参数从右至左按顺序压栈
– 64位:前四个参数通过rcx、rdx、r8、r9寄存器传参,剩余参数从右至左按顺序压栈。
Linux
– 32位:参数从右至左按顺序压栈
– 64位:前六个参数通过rdi、rsi、rdx、rcx、r8、r9寄存器传参,剩余参数从 右至左按顺序压栈
函数调用约定:
cdecl - 主要在C语言中使用,调用者负责处理栈。
stdcall - 常用于Win32API,该方式由被调用者清理栈。
fastcall - 与stdcall方式类似,在函数传参时,前两个参数会通过寄存器ECX、EDX传。
代码混淆:
jz/jnz花指令:重新反汇编jz/jnz要跳转的地址处的指令,修改后,patch掉花指令,重新生成伪代码。
call+pop花指令:也是调整地址处指令,patch掉花指令,重新解析。
call $+5 指令,call指令占5字节,所以这句实际就是执行下一条指令,常用于执行加密或解密代码。
SMC(Self-Modifying Code)代码混淆,1.直接调试到解密完的步骤;2. idapython进行恢复。
idapython例子(伪代码): //主要是静态分析用。
from idc import *
from idaapi import *
for i in range(start,end):
temp = Byte(i)
PatchByte(i, temp^0x45)
IDA F5常见错误处理:
please position the cursor within a function; 花指令,按上面处理花指令的方法。
position sp value has been found; 堆栈平衡问题,多半存在一个恶意指令修改了堆栈,IDA general可以设置查看堆栈平衡。将恶意指令干掉或者其他。
call analysis failed. 函数参数个数分析错误,修正函数参数个数。
OD断点介绍:
INT 3断点:
- 改变断点地址处的第一个字节为0xCC
- OD快捷键F2
硬件断点:
- 依赖于DRX调试寄存器
- DR0~DR3四个寄存器用来存放断点地址
- DR6和DR7用来控制断点的大小和触发断点的时机
- OD快捷键F4、F8
内存断点:
- 改变内存分页的属性
- 内存访问断点,通常是将内存属性设为PAGE_NOACCESS
- 内存写入断点,通常是将内存属性设为PAGE_EXECUTE_READ
- 由于分页粒度的限制,最小改变一页的属性
总结:
基础知识很重要
预计明天:
android安全相关
以上是关于[转组第5天] | 天枢分享Reverse入门的主要内容,如果未能解决你的问题,请参考以下文章
[转组第2天] | baby_mips和android xss的调研