本文为本人的逆向破解脱壳学习笔记之二,为本人对以往所学的回顾和总结,可能会有谬误之处,欢迎大家指出。
陆续将不断有笔记放出,希望能对想要入门的萌新有所帮助,一起进步
更多逆向脱壳资源学习,请访问 大神论坛
数据宽度
计算机数据
数学上的数字是没有大小限制的,可以无限大。但在计算机中,由于硬件的制约,数据是有长度限制的,超过数据宽度的数据会被丢弃
同一个数据,表示无符号数和有符号数则其含义不同
- 无符号数:正数
- 有符号数:正数、负数
例:
当数据宽度为4时,即数据只能存储4位2进制位0000~1111
无符号数:
有符号数:
正数:
负数:
可以发现当数据为1011,把数据看作无符号数时,数据表示为B
把数据看作有符号数时,数据表示为-5
无符号数的表示范围为0~2^4-1即0~15\ 有符号数的表示范围为-23~23-1即-8~7
几个重要的计量单位
BYTE 字节 8BIT
WORD 字 16BIT 2字节
DWORD 双字 32BIT 4字节
逻辑运算
或运算(or |)
只要有一个为1则结果为1
与运算(and &)
两个都是1结果才为1
异或运算(xor ^)
相同为0 不同为1
非运算(not !)
取反 1是0 0是1
CPU如何计算2+3?
X:0010
Y:0011
先异或
R:0001
异或完以后要判断是否运算结束
将两个数进行与运算 然后左移一位
0010<<1 ==0100
如果结果全为0,结果则为我们所要的结果
否则,把上面异或得到的值赋值到X
把左移后的结果赋值到Y
X:0001
Y:0100
重复操作
先异或
R:0101
再将两个数进行与运算 然后左移一位
左移完结果全是0,结果则为我们所要的
最终结果为0101=5
CPU如何计算2-3?
X:0010
Y:1101
先异或
R:1111
将两个数进行与运算 然后左移一位
0000<<1=0000
如果结果全为0,结果则为我们所要的结果
最终结果为1111 = -1
如何取某个值的第N位的数值
与操作
如我们想要查看23h这个十六进制数的第3位则可以进行如下运算:
先将23h转化为二进制:0010 0011
最简单的加密算法
通过异或加密数据 再次异或后则解密数据
要加密的数据:2021:0010 0000 0010 0001
密钥:54:0101 0100
高位:0111 0100 = 74
低位:0111 0101 = 75
原本的2021加密成了7475
然后再次进行异或操作进行解密:
高位:0010 0000 = 20
本系列逆向脱壳基础学习都在下方链接中,欢迎学习交流,一起进步
https://www.dslt.tech/article-128-1.html
版权声明:本文由 lyl610abc 原创,欢迎分享本文,转载请保留出处