您的位置:首页 > 其它

《加密与解密》学习笔记(二) - 加密算法和PE文件

2016-08-09 14:00 344 查看
又看了两章,果然越来越难,准备先做些题,用到哪些知识再学。这次还把罗云彬老师书中的TLS(线性局部存储)给学了。

6加密算法
6.1单向散列算法
哈希算法,任意长度消息压缩至固定长度,不可逆
MD5,SHA,PIPE-MD,HAVAL,N-Hash
6.1.1MD5(消息摘要算法)
原理略
结果
将任意长度的字符串变幻成128位的大整数,不可逆
错误用法
if(MD5(用户名) == 序列号)
正确的注册码;
else
错误的注册码;
//序列号明文,这样就很容易破解
工具:KANAL
MD5变形
改变初始化4个常数
改变填充方法
改变Hash变换的处理过程
6.1.2SHA(安全散列算法)
跟MD5很像
6.2对称加密算法
6.3非对称加密算法
6.4CRC32、Base64
6.5常用库
Miracl大数库/C/C++
FGInt/

10PE文件格式
10.1PE的基本概念略
基地址
RVA
FOV
10.2MS-DOS头略
10.3PE头
10.4节
10.5导入表、导入地址表
10.6绑定导入表
10.7导出表
10.8重定位表
10.9资源表
10.10TLS初始化
---------------------------------
-补充:《PE》第九章线程局部存储-
---------------------------------
9.1Windows进程与线程
9.1.1Windows体系结构
分层:用户模式+内核模式
API调用转到ntdll.dll(桥梁)中,转到内核ntoskrnl.exe中运行
9.1.2.1内核模式进程创建
创建进程
创建线程绑定进程,否则进程无用,进程上可有多线程
9.1.2.2
创建进程,线程就跟着创建好了
9.2线程局部存储
解决多线程变量同步问题,定义一套数据结构,不同的线程拥有不同的值
在进程中创建全局表,通过线程ID去获取/写入数据
9.3动态TLS——无法确定线程的数量
调用TlsAlloc向进程申请索引,创建空间
每个线程
TlsSetValue
TlsGetValue
调用TlsFree收回空间
//一个索引作为参数,系统自己搞定多线程到底用哪个,全局变量最大40h(64Byte)
9.4静态TLS
无需调用API函数,在PE文件内部定义变量,.tls,类似导入表,通过结构的描述,系统自动处理
定位
第10个
组成
IMAGE_TLS_DIRECTORY32
StartAddressOfRawData	//TLS模板起始地址,VA,需有重定位信息,创建线程被复制
EndAddressOfRawData		//TLS模板结束地址,VA,需有重定位信息,不包括0
AddressOfIndes			//TLS索引的位置
AddressOfCallBacks		//TLS回调函数数组指针,一个线程创建时调用一次,结束时调用一次
SizeofZeroFill			//填充0的个数
Characteristics			//保留
补充
TLS数据初始化和TLS回调函数都在入口点之前执行,很多病毒或外壳程序利用这一点执行一些特殊操作
程序结束时,回调函数又被执行一次。一般的TLS回调函数都是空的
---------------------------------
-补充------------OVER------------
---------------------------------
10.12延迟加载导入表
10.13异常表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息