Web手入门Reverse

前言

Web手入门 Reverse逆向记录. 国庆期间学习打卡。

正文

基本概念

地址概念

基地址:(段地址)

偏移地址:

如果要更清楚地理解地址的概念,可以再去看看 cache 和 主存之间的映射关系。

汇编基础

寄存器

EAX // "累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。
EBX // "基地址"(base)寄存器, 在内存寻址时存放基地址。
ECX // 计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。
EDX // 则总是被用来放整数除法产生的余数。
ESP // 栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶
EBP // 基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

常见汇编指令:

PUSH 把字压入堆栈。
POP 把字弹出堆栈。
MOV 传送字或字节。
ADD     加法.  
sub     减法
CMP     比较.(两操作数作减法,仅修改标志位,不回送结果).  
AND     与
OR      或
XOR     异或
JMP         无条件转移指令  
CALL        过程调用  
RET/RETF    过程返回

汇编入门

常见加密

RSA

加密:
$$
C= M^e mod n
$$

其中:
C 为加密后的密文
M 为加密前的明文
公钥为  (n,e)   其中 n = pq (q 和 p 为两个不相等的,较大的互质数)
e 是 小于 ф(n) 欧拉函数结果的一个随机质数

解密:
$$
M = C^d mod n
$$

私钥为 (n,d). 其中 d 是 e 对 ф(n)的模反元素. 用数学表达式表示为:  e*d + yф(n) = 1
求出一对解(d,y) 能够满足上表达式即可求得 d
import gmpy2

# Origin message
M = 1314

#p and q
p = 61
q= 53

n = p * q
# φ(N)
Euler_func = (q-1)  * (p -1)

# choose e
e = 17

# secret message
C = gmpy2.powmod(M, e, n)
print(C)

d = gmpy2.invert(e, Euler_func)
M = gmpy2.powmod(C, d, n)
print(M)

IDA 的基本使用

静态调试

a // display by string 
shift + f12  // searching string
g  // 跳转到指定地址
tab  // 反编译为 C 的伪代码
space  // 试图切换
r // 查看具体的值
x // 查找交叉应用

调试

f9 // start run program
f2  // breakpoint

除此之外,还有的分析工具:

x64dbg Windows动调

GDB Linux动调

参考

原创x64dbg入门之工具使用实战-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com

汇编语言-阮一峰