首页 > 其他分享 >《加密与解密》- 第一章 - 基础知识 - 笔记

《加密与解密》- 第一章 - 基础知识 - 笔记

时间:2023-06-02 15:23:10浏览次数:61  
标签:加密 Windows 32 解密 基础知识 64 消息 dll 内存

(纠正了书中一些不正确的地方,如P11中2**64bytes等于16TB已修改为16EB)

1.1 什么是加密与解密

1.1.1 软件的加密与解密

1.1.2 软件逆向工程

内容:

  1. 去除使用限制或者添加功能
  2. 获得源代码
  3. 硬件的复制和模拟

要求品质:

  1. 保持好奇,崇尚自由
  2. 勤奋+毅力
  3. 精通至少一门编程语言,尤其是编程思想
  4. 扎实的汇编和系统编程功底

1.1.3 逆向分析技术

分析软件途径:

  1. 已被公开的使用方法及文档等(理解设计思想和编程思路)
  2. 静态分析技术
  3. 动态分析技术
    1. 粗跟踪(快速猜测函数的功能,而不是每个都跟)
    2. 细跟踪(对关键函数具体分析)

1.2 文本字符

1.2.1 ASCII和Unicode字符集

ASCII

7位编码,占用1B

ANSI

ASCII的扩展,占用1BANSI是系统预设

(还有同样占用1B的Symbol、OEM等)

Unicode

一套编码方案,内含多种编码方案

ASCII的拓展,占用不定,取决于编码方案和原始数据大小

常用Utf-8

ASCII到Unicode的转换:高位补0

补充:字符编码总结

1.2.2 字节存储顺序

字节序分为大端序和小端序,这是面向处理器的。

大端序(Little-endian):高位字节存入低地址,低位字节存入高地址

小端序(Big-endian):高位字节存入高地址,低位字节存入低地址

(x86用Little-endian,网络协议和PowerPC用Big-endian)

1.3 Windows操作系统

1.3.1 Win32API

兼容性:

win32 兼容 win16

win64 兼容 win32

但win64 不兼容 win16

主要子系统:

Kernel:操作系统核心功能服务,如进程线程控制,内存管理,文件访问等

User:处理用户接口,如键盘鼠标输入,窗口和菜单管理

GDI图形设备接口,允许在屏幕和打印机显示文本和图形

(还有一些其他的dll在这里没有列出)

函数字符集中,"A" 表示 "ANSI","W"表示"Widechars"(Unicode

例子:Windows 2000 的 MessageBox

分为MessageBoxAMessageBoxW

调用链:MessageBoxA->MessageBoxExA->MessageBoxExW

可以看出,在Windows 2000下,MessageBox最终调用的是Unicode版本的代码

Win32程序大量调用API,通过下API断点可以带来极大方便

1.3.2 WOW64

即Windows-On-Windows 64-bit

功能:为Win32程序在64位OS运行提供环境

位置:C:\Windows\System32

(补充:64位系统文件在 C:\Windows\System32)

运行

64应用程序:

需要加载(64位)

C:\Windows\System32\kernel32.dll

C:\Windows\System32\user32.dll

C:\Windows\System32\ntdll.dll

32应用程序:

  1. 建立ntdll.dll(32位)所需环境
  2. CPU模式切换到32
  3. 执行32位解释器
  4. ntdll.dll(32位)调用重定向ntdll.dll(64位)
  5. 转换到原生的64环境,产生64位系统调用
  6. 系统调用返回后,把输出参数转化32
  7. 返回32模式

局限

  1. 不支持16位应用程序运行
  2. 不支持32位内核模式的驱动程序
  3. 不支持64位dll的加载

(同样,64位下不能加载32位dll)

1.3.3 Windows消息机制

Windows是消息驱动式系统

消息提供程序之间程序与系统间通信手段

消息队列:分为系统消息队列应用程序消息队列两种

Windows监控所有输入设备

事件处理流程:

  1. Windows取得事件,放入系统消息队列
  2. 系统消息队列复制该消息相应的应用程序队列
  3. 应用程序检索每个消息并发给相应窗口函数
  4. 窗口函数处理消息

(上述过程几乎没有例外,消息具有非抢先性)

常用消息和函数简介

  1. SendMessage(函数)
    1. 功能:把消息发给某窗口,消息处理完才返回值
    2. 返回值:取决于具体消息,发送成功返回非零值
  2. WM_COMMAND(消息)
    1. 功能:从菜单或按钮中选择命令或控件,或快捷键被释放时发送
    2. 返回值:若被应用程序处理,则返回0
  3. WM_DESTROY(消息)
    1. 功能:窗口被销毁时发送
    2. 返回值:若被应用程序处理,则返回0
  4. WM_GETTEXT(消息)
    1. 功能:把对应窗口的文本复制到呼叫程序提供的缓冲区中
    2. 返回值:被复制的字符数
  5. WM_QUIT(消息)
    1. 功能:调用PostQuitMessage时产生
    2. 返回值:没有返回值
  6. WM_LBUTTONDOWN(消息)
    1. 功能:当光标停留在一个窗口的客户区且按下鼠标左键,则消息被发送。若动作未被捕获,发给光标下的窗口;否则给捕获的窗口。
    2. 返回值:若被应用程序处理,则返回0

1.3.4 虚拟内存

本质:通过映射,让每个程序看似独享整个内存大小(32位下为4GB)

物理内存中,操作系统和系统DLL时刻被映射,用户程序只在自己的时间片被映射,用户DLL在此基础上被选择性映射。

实现和过程:

  1. 程序启动,这其实等于系统创建一个进程,并分配一定的空间地址(只是地址,并不是分配这么多空间)
  2. 把代码映射到虚拟地址的代码段,然后把只把当前需要执行的指令放到物理内存(虚拟地址要经过映射才能得到物理地址,故一般不相等)
  3. 使用DLL的话,DLL也放到虚拟地址里,要用时才载入物理内存
  4. 其他项目(数据、堆栈)也从物理内存分配并被映射到虚拟地址
  5. 程序开始执行,遇到内存访问则映射到物理内存取出,放回虚拟地址。

位置:存放在磁盘中,要用的时候再挪到内存(加速可以通过页表等,但对我们的问题不重要)

好处:简化内存管理,避免多任务环境下应用程序的冲突

64下,虚拟内存理论大小16EB。由于用不了这么大,系统实际支持内存少很多,但完全够用。

 

标签:加密,Windows,32,解密,基础知识,64,消息,dll,内存
From: https://www.cnblogs.com/Carykd/p/17451859.html

相关文章

  • 深度解密 TCP 协议(三次握手、四次挥手、拥塞控制、性能优化)
    作者:@古明地盆喜欢这篇文章的话,就点个关注吧,或者关注一下我的公众号也可以,会持续分享高质量Python文章,以及其它相关内容。:点击查看公众号楔子巨人的肩膀:公众号《小林coding》随着你工作经验的积累,你会越来越意识到底层网络协议的重要性。比如我们时时刻刻在使用的HTTP协议......
  • 强化学习基础篇【1】:基础知识点、马尔科夫决策过程、蒙特卡洛策略梯度定理、REINFORCE
    强化学习基础篇【1】:基础知识点、马尔科夫决策过程、蒙特卡洛策略梯度定理、REINFORCE算法1.强化学习基础知识点智能体(agent):智能体是强化学习算法的主体,它能够根据经验做出主观判断并执行动作,是整个智能系统的核心。环境(environment):智能体以外的一切统称为环境,环境在与智能体......
  • 关于AWS-VPC的创建与基础知识
    关于VPC的创建,有如下几个基础知识:1、当您创建VPC时,必须为这个VPC指定IPv4CIDR块。允许的块大小介于 /16 网络掩码(65,536个IP地址)和 /28 网络掩码(16个IP地址)之间2、一个VPC可以有多个 IPv4CIDR块,即多个网段,但是建议是使用 RFC1918中所指定的那三......
  • 编解码、加解密常见特征
    编码编码:Base系列、Unicode、Escape、URL、Hex;https://book.hacktricks.xyz/crypto-and-stego/crypto-ctfs-tricksbase系列Base64是我们最常见的编码,除此之外,其实还有Base16、Base32、Base58、Base85、Base100等,他们之间最明显的区别就是使用了不同数量的可打印字符对任意......
  • Jasypt加密SpringBoot配置文件和自动加密数据库敏感信息
    Jasypt是开源的加密和解密的组件。和Spring提供了很好的集成。一、加密SpringBoot配置文件 新建SpringBoot项目,添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>......
  • JavaScript 基础知识总结
    概述JavaScript基础分为三个部分:ECMAScript:JavaScript的语法标准。包括变量、表达式、运算符、函数、if语句、for语句等。DOM:DocumentObjectModel(文档对象模型),操作页面上的元素的API。比如让盒子移动、变色、改变大小、轮播图等等。BOM:BrowserObjectModel(浏览器对象模型),操......
  • 文件加解密
    JAVApackagecom.test;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;/***加密解密类**@author*@version1.00*/publicclassTest{ //staticbooleandebug=false; //加密KEY不能随便改动 staticfina......
  • Springboot实现ENC加密jasypt-spring-boot-starter
    依赖:<!--配置文件加密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version>&l......
  • 使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!
    sslpayload取1024字节,然后使用VAE检测异常的ssl流。代码如下:fromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerimportnumpyasnpimporttensorflowastfimporttflearnfrommatplotlibimportpyplotaspltimport......
  • 超级加解密转换工具——todo,编解码 md5 sha解密可以到https://www.cmd5.com/ 注意有sa
    超级加解密转换工具V2.1绿色免费版       超级加解密转换工具可以说一款万能加密解密转换工具,支持75种方式多种转换,火星最强软件!MD5、16位MD5、MD4、拼音、大小写转换、简繁转换、GBK《-》Big5、GBK简体《-》Big5、GBK《-》SJIS、火星文转换、数字到大写金额、迅雷Thunder......