大神论坛 逆向脱壳分析基础学习笔记一 数据宽度和逻辑运算

本文为本人的逆向破解脱壳学习笔记之二,为本人对以往所学的回顾和总结,可能会有谬误之处,欢迎大家指出。

陆续将不断有笔记放出,希望能对想要入门的萌新有所帮助,一起进步

更多逆向脱壳资源学习,请访问  大神论坛

数据宽度

计算机数据

数学上的数字是没有大小限制的,可以无限大。但在计算机中,由于硬件的制约,数据是有长度限制的,超过数据宽度的数据会被丢弃

同一个数据,表示无符号数和有符号数则其含义不同

  • 无符号数:正数
  • 有符号数:正数、负数

例:

当数据宽度为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 原创,欢迎分享本文,转载请保留出处

posted @ 2021-06-26 11:22  大神论坛  阅读(209)  评论(0编辑  收藏  举报