开启逆向之旅
在将来,我们主要用到Windows下最老牌的C语言编译器,Visual C++ 6.0 这款工具;值得注意的是,这款工具在64位操作系统上运行时有时候会出现兼容性的问题,它和32位操作系统相处的比较和谐。因此建议在32位Windows虚拟机下倒腾这个软件(我的虚拟机是win7 32bits 盗版……QAQ),会出现较少的Bug。可能会结合一些Linux反汇编工具来了解不同汇编器的区别和不同。
前期需要掌握的知识:(推荐书籍《汇编语言》王爽)
1.汇编语言的常用指令
赋值指令mov,加减乘除指令add sub inc dec mul div,逻辑运算指令or and not xor test,[逻辑/算术]移位(循环移位)指令系列,栈操作指令push pop细节,循环指令,地址传送指令lea,比较指令cmp,无条件跳转指令jmp,条件跳转指令一系列,函数调用和返回指令call ret细节
2.若干种寻址方式
3.常用的寄存器分类
普通寄存器,指针寄存器,变址寄存器,标志寄存器,段寄存器 以及对应功能。
寄存器 | 16位 | 32位 | 64位 |
---|---|---|---|
累加寄存器 | AX | EAX | RAX |
基址寄存器 | BX | EBX | RBX |
计数寄存器 | CX | ECX | RCX |
数据寄存器 | DX | EDX | RDX |
堆栈基指针 | BP | EBP | RBP |
变址寄存器 | SI | ESI | RSI |
堆栈顶指针 | SP | ESP | RSP |
指令指针 | IP | EIP | RIP |
参考网址:https://blog.csdn.net/luoyhang003/article/details/46786591
4. debug常用命令的使用(32bits Windows dos下可以使用,64bits dos没这个命令)
-r 读取所有寄存器内容
-a 在cs:ip处写入汇编代码
-d 读取(可以指定起始地址)内存区内容,默认从开始位置ds:ip显示128字节空间
-u 查看cs:ip处(可指定开始位置)的反汇编(机器码)得到的汇编代码
-t/-p 单步执行
5.asm文件编写规范以及ml指令、debug指令的结合操作
推荐入门的书籍: 《解密数据解密的关键技术》第一、二章的内容。