逆向学习之路 -- 《加密与解密》读书笔记 -- 基础知识笔记
逆向工程(Reverse Engineering)
是指根据已有的产物和结果,通过分析来推导出具体的实现方法。对于软件来说,“可执行程序-->反编译-->源代码”的过程就是逆向工程。
- 永远保持好奇心,崇尚自由——既能促使探索,也能抵抗商业利益和欲望的侵袭。
- 勤奋与毅力。“让我们搞清楚作为一名逆向工作者需要具备的基本条件,其实那并不是扎实的汇编功底和编程基础——可以完全不懂这些,秘诀就是勤奋加上执着!记住并做到这两点,你一样可以变得优秀。”
- 精通至少一门编程语言——不仅是代码,更重要的是编程思想
- 扎实的汇编功底和系统编程知识
你想工程应该是一门优雅的艺术,而不是一些低层次者手中粗陋的工具;逆向工程的目的是学习与再利用;逆向工程的精神是“Freedom”
逆向分析技术
1. 通过软件使用说明和操作格式分析软件
2. 静态分析技术(静态分析工具IDA)
3. 动态分析技术(OllyDbg或WinDbg)
粗跟踪: 是指在跟踪时要大块大块地跟踪。也就是说,在遇到调用指令(CALL)、重复操作指令(REP),循坏操作指令(LOOP)等时一般不要跟踪,而要根据执行结果分析该段程序的功能。
文本字符:计算机存储的信息都是用二进制数表示的,屏幕上显示的字符都是二进制数转换之后的记过。如果要处理文本,就必须先把文本转换为相应的二进制数。
ASCII 美国信息交换标准码 (American Standard Code for Information Interchange)
现代的ASCII是一个7位的编码标准,编码的取值范围实际上是00h~7Fh,包括26个小写字母、26个大写字母、10个数字、32个符号、33个控制代码及空格,共128个代码。(不同的计算机厂商对ASCII进行了扩充,增加了128个附加字符,它们的值在127以上的部分是不统一的,取值范围变成了00h~0FFh)
Unicode 是ASCII字符编码的一个扩展,在Windows中用2字节对其进行编码,被称为宽字符集(Widechars)。Unicode是第一种双字节编码机制字符集,使用0~65535的双字节无符号整数对每个字符进行编码。在Unicode中,所有字符都是16位,其中所有7位ASCII码都被扩充为16位(高位扩充的是零)
endian 字节序 表示数据在存储器中存放的顺序
Big-endian: 大端序; 高危字节存入低地址,地位字节存入高地址。 # 相当于升序?
Little-endian:小段序;低位字节存入低地址,高位字节存入高地址。 # 相当于降序?
Win32 API 函数
用16位Windows的API(Windows1.0~Windows3.1)称作“Win16”,用于32位Windows的API(Windows9x/NT/2000/XP/7/10)称作"Win32”。64位Windows API的名称和功能没有变化还是使用的Win32函数名,只不过是用64位代码实现的。
API 应用程序编程接口(Application Programming Interface)
动态链接库(DLL)
# 早期Windows的主要部分只需要在3个动态链接库中实现
Kernel(由KERNEL32.DLL):操作系统核心功能服务,包括进程与线程控制、内存管理、文件访问等。
User(由USER32.DLL):负责处理用户接口,包括键盘和鼠标输入、窗口和菜单管理等。
GDI(由GDI32.DLL):图形设备接口,允许程序在品目和打印机上显示文本和图形。
--------------------------------------------------------------------------------
ADVAPI32.DLL 对象安全性、注册表操作
COMCTL32.DLL 通用控件
COMDLG32.DLL 公共对话框
SHELL32.DLL 用户界面外壳
NETAPI32.DLL 网络
# 虽然WinAPI 是基于C语言的接口,但是WinAPI中的函数可以由不同的语言编写的程序调用,因此,我们只要在调用时遵循调用的规范即可。
WOW64 (Windows-on-Windows 64-bit) 是64位windows操作系统的子系统,可以使大多数32位应用程序在不进行修改的情况下运行64位操作系统上
Windows 消息机制
Windows是一个消息(Message)驱动式系统。
虚拟内存
Windows是一个分时的多任务操作系统
虚拟内存的实现方法和过程:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2019-09-02 Phonics 自然拼读法 ou ow oi oy au aw oo oo ea Teacher:Lamb
2019-09-02 English trip V2-B 20 Happy Holiday Teacher: Russell