一周学习总结4_《加密与解密》学习

第一章-基础知识篇

第二章-动态分析技术

基础知识

字节存储顺序

Big-ending:高位字节存入低地址,低位字节存入高地址。
Little-ending:低位字节存入低地址,高位字节存入高地址。

ASCII与Unicode

ASCII:七位的编码标准,编码取值范围00h-7Fh
Unicode:所有字符都是16位,其中所有的七位ASCII码都被扩充到16位(高位扩充0)。
如ASCII:70h 65h 64h 69h 79h
其Unicode十六进制形式写作:
0070h 0065h 0064h 0069h 0079h

动态分析技术

爆破法
test eax eax ; eax=0表示注册失败,为1表示注册成功
je short 0040122E;若不跳转则成功

只要不发生跳转就可以判断注册成功
je为两个字节,所以可以用两个nop来代替

test eax eax;
nop;
nop;

此时输入为任意都可注册成功
这种通过屏蔽程序的某些功能或改变程序流程使程序的保护方式失效的方法称为爆破

常用断点

INT3断点

因其机器码是0xCC,也被称为“CC指令”
优点是可以设置无数个断点,缺点是改变了原机器码,容易被软件检测到
躲过检测的方法是将断点设在函数内部或末尾,例如将断点设在函数入口的下一行。

硬件断点

硬件断点和DRx寄存器有关。
DRx寄存器有8个(DR0-DR7)
DR0-DR3:用于保存需要监视的地址,例如设置硬件断点
硬件断点是使用这四个寄存器设定地址,所以最多可以设置四个断点
硬件断点不会修改指令首字节为“CC”,所以更难检测,缺点是只能使用四个断点。

内存断点

原理是对所设地址赋予不可访问/不可写入属性,这样当访问/写入的时候就会产生异常。
内存断点不会修改原始代码,在遇到代码校验且硬件断点失灵的情况下,可以使用内存断点。
这里要注意的是,硬件访问/写入断点是在触发硬件断点的下一条指令处下断,而内存断点是在触发断点的指令处下断。

内存访问一次性断点

用于对整个内存块设置该类断点。
这个断点是一次性断点,当所在段被读取或执行时就会中断。中断发生以后,断点将被删除。

消息断点

windows本身是由消息驱动的,如果调试没有合适的断点,可以尝试使用消息断点。当某个特定窗口函数接受到某个特定消息时,消息断点将使程序中断。消息断点与INT3断点区别在于:INT3断点可以在程序启动之前设置,消息断点只有在窗口被创建之后才能被设置并拦截消息。

条件断点

条件断点是一个带有条件表达式的普通INT3断点
例如按寄存器条件中断:

bp 401476 eax==0400000

按储存器条件中断:
例如在CreateFileA函数打开所需文件时中断:

bp CreateFileA, [STRING [esp+4]]=="c:\\1212.txt"

原意是想把书的前四章做个总结,但写着写着就觉得不对劲,感觉这样抄书实在没啥营养可言,并且很多知识没有经过实践自己也都还不能说会用,这波确实是上当了。一周学习总结4_《加密与解密》学习_第1张图片

你可能感兴趣的:(一周学习总结4_《加密与解密》学习)