Jche
qwqqqqqq

《逆向工程核心原理》-1

2021-12-10 读书笔记-1

starts

《逆向工程核心原理》这本书是在todo list里最开头的,除了动手实践补充书上的知识也很重要,加班加点稍微写点笔记,让自己能看到些自己做了学了的东西吧。

重要的

在开头书里写的是关于逆向工程。很重要的章节,告诉我要学什么,“嗯,先学这些概念吧,其他慢慢学”,不贪心,不急躁,希望自己也能体会到其中的乐趣,对生活和学习都热情以待吧。

前几章节主要讲了基本的调试程序和寄存器,但这些都是非常重要的部分,而我却一直记不住,写一些笔记来加深一下自己的印象。

习惯

首先讲了调试一个简单的hello world的程序,但在调试中需要养成良好的习惯,使调试更加方便且看起来清楚。

1.学会添加注释和标签,书中示范的是od,但不论用什么调试软件,在需要的地方添加合适的注释都是需要养成的习惯。

2.在ida调试时需要对函数名称进行重命名,以方便自己的解读。进入函数看伪代码时可以通过快捷键来简化代码,或者根据分析重定义函数类型,这些在b站ida代码修复视频中有详细介绍。

暂时没有想到其他的,如果以后发现就补充上去。

调试

在书中介绍了四种调试hello world代码的方法,单步f8在代码量非常大的情况下是不可能使用的,一般来说我们会猜测并且设置断点,而在程序破解等实例中我们可以使用字符串检索法API断点法来实现定位调用的函数。字符串检索在字符串被加密时也是不可行的,所以需要了解API的定义。

API是操作系统对用户应用程序提供的一系列函数,实现于xxx.dll文件。我们可以通过添加API断点来找出程序中调用函数的部分,从而找到关键代码。

字节序

即大端序和小端序,BE与LE,分别采用正序和逆序的方式存储字节,大端序内存地址低位存储内存数据高位,内存地址高位位存储内存数据低位,而小端序则高存高,低存低,所以小端序是逆序输出,大端序为正序输出

寄存器

反复查看寄存器是调试中必不可少的部分,也是很吃耐心的一部分,通过了解不同寄存器的作用可以大大缩短调试的时间,更快的了解程序的运行过程和数据的变化。也是看汇编指令的基础。

以E开头的寄存器为32位,分别为EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP。是八个通用寄存器。

以S结尾的6个段寄存器分别为CS,DC,SS,ES,FS,GS,他们都是16位的。

还有EFLAGS(程序状态与控制寄存器)和EIP指令指针寄存器。(32位)

平常看的最多的是通用寄存器,用于传送和暂存数据。有些寄存器可以分为高低位的独立寄存器,例如EAX,有32位。AX是EAX的低16位,AH又是AX的高8位,AL是AX的低8位。在调试时可以根据需要使用的字节数来观察独立寄存器的变化。

EAX:累加器(数据) EBP:扩展基址指针寄存器(栈内数据指针)

EBX:基址寄存器(数据指针) ESI:源变址寄存器(字符串操作源指针)

ECX:计数器(字符串和循环操作) EDI:目的变址寄存器(字符串操作目标指针)

EDX:数据寄存器(I/O指针) ESP:栈指针寄存器(栈指针)

ESP与EBP相互协调作用,EBP暂存ESP的值,ESP为栈顶指针,最后得到的值返回ESP。

段寄存器在这里没有详细的阐述,只是做了简单的介绍,等到后面了解了再记录。

程序状态寄存器中我们常常会看到的指令大概时ZF,即运算结果为0则它的值为1,常用作判断指令,与cmp等指令连用,OF和CF都是溢出数据时返回1,OF为有符号数据,CF为无符号数据。

指令指针寄存器最后的就是EIP,即为指令地址,在寄存器窗口点击EIP即可返回到当下执行的地方。

END

其实看的内容比这些要多,这些都是基础但非常重要的知识,包括后面的栈和基础的汇编指令,但实在是太困了就先搁置下来,下次一起记录。

2021.12.10/02:25 晚安。

Author: John Doe

Link: http://example.com/2021/12/10/%E3%80%8A%E9%80%86%E5%90%91%E6%A0%B8%E5%BF%83%E5%8E%9F%E7%90%86%E3%80%8B-1/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
normal归纳
NextPost >
python字节流与字符串与aes解密函数
CATALOG
  1. 1. starts
  2. 2. 重要的
  3. 3. 习惯
  4. 4. 调试
  5. 5. 字节序
  6. 6. 寄存器
  7. 7. END