《加密与解密》笔记(一)

前期未整理笔记:

 

高级语言有两种形式:

1.被编译成机器语言在CPU中执行 反汇编:机器语言->汇编语言

2.一边解释一边执行 反编译:编译后程序可以被还原成高级语言的原始结构

 

Windows程序并不是从winmain开始,而是从开始启动函数相关代码开始

 

启动函数负责对C/C++运行库进行初始化,检查指向新进程的环境变量指针,全局变量初始化,内存堆栈初始化等

 

程序简介调用函数:通过寄存器传递函数地址或动态计算函数地址

 

函数传递参数有3中形式:堆栈、寄存器、以及通过全局变量进行隐含参数的传递

 

堆栈:后进先出,栈顶指针ESP指向堆栈中第一个可用的数据项

平衡堆栈:使堆栈恢复原样

 

常见的加解密配对指令有:xor/or,add/sub,inc/doc,rol/ror

 

DOS字符串:以“$”作为终止字符

 

编译器优化时,用dex eax代替cmp,这样指令更轻,执行速度更快

 

单向函数散列算法---HASH

Eg:MD5,SHA(1/256/384/512),RIPE-MD,HAVAL,N-HASH

 

对称分组加密算法有:DES,IDEA,AES,BlonFish

 

CRC32 循环冗余校验码

 

Base64:将二进制数据编码为可显示的字母和数字,可用于图形、声音等非文本数据,MIME电子邮件格式

 

 

只要在不同的平台上提供虚拟机,把字节码翻译为对于的CPU指令集,也就实现了所谓的跨平台特性

 

.Net:独立于操作系统上的平台,可以视作虚拟机,只要.Net框架便可运行.Net程序

.Net是一系列运行与Ring3层的dll文件

{扩展了编程语言,C#,C++VB最终都编译为.Net中间语言IL

扩展了PE文件的格式,执行文件中不再保存机器码,而是IL指令和元数据

 

.Net框架进行管理,框架中的JIT引擎负责在运行时将IL即时编译为本地汇编代码再执行

 

IL最大特点是以堆栈为基础进行操作,必须保证堆栈平衡

 

流按存储结构的不同分为堆(heap)和表(table

 

StringsUTF8格式的字符串堆

Blob:二进制数据堆,存储程序中的非字符串信息

GUID:存储所有的全局唯一标识

US:Unicode格式存放的IL中的User-string

#~:元数据表流

#—:#~的未压缩(未优化)的存储,不常见

 

自然编译和伪编译

 

伪代码的运行完全依赖于堆栈

 

虚拟机的跳转地址表示法,把执行流直接引导到相应的解释单元

 

eax保存了下一条指令的操作码,每一个跳转地址是一个dword(eax+*4+基地址来索引下一条指令的解释单元)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值