大神论坛

找回密码
快速注册
查看: 958 | 回复: 0

[语言编程类] 大神论坛 逆向脱壳分析基础学习笔记二 数据宽度和逻辑运算

主题

帖子

5

积分

初入江湖

UID
20
积分
5
精华
威望
10 点
违规
大神币
68 枚
注册时间
2021-03-14 10:40
发表于 2021-03-14 15:24
本帖最后由 kay2kay 于 2021-03-14 15:24 编辑

本文为本人的滴水逆向破解脱壳学习笔记之一,为本人对以往所学的回顾和总结,可能会有谬误之处,欢迎大家指出。
陆续将不断有笔记放出,希望能对想要入门的萌新有所帮助,一起进步


所有笔记链接:

大神论坛 逆向脱壳分析基础学习笔记一 进制篇
大神论坛 逆向脱壳分析基础学习笔记二 数据宽度和逻辑运算
大神论坛 逆向脱壳分析基础学习笔记三 通用寄存器和内存读写
大神论坛 逆向脱壳分析基础学习笔记四 堆栈篇
大神论坛 逆向脱壳分析基础学习笔记五 标志寄存器 
大神论坛 逆向脱壳分析基础学习笔记六 汇编跳转和比较指令
大神论坛 逆向脱壳分析基础学习笔记七 堆栈图(重点)(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记八 反汇编分析C语言
大神论坛 逆向脱壳分析基础学习笔记九 C语言内联汇编和调用协定
大神论坛 逆向脱壳分析基础学习笔记十 汇编寻找C程序入口(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记十一 汇编C语言基本类型
大神论坛 逆向脱壳分析基础学习笔记十二 汇编 全局和局部 变量(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记十三 汇编C语言类型转换(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记十四 汇编嵌套if else(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记十五 汇编比较三种循环(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记十六 汇编一维数组(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记十七 汇编二维数组 位移 乘法(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记十八 汇编 结构体和内存对齐(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记十九 汇编switch比较if else(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记二十 汇编 指针(一)(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记二十一 汇编 指针(二)(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记二十二 汇编 指针(三)(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记二十三 汇编 指针(四)(需登录才能访问)
大神论坛 逆向脱壳分析基础学习笔记二十四 汇编 指针(五) 系列完结(需登录才能访问)

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

数据宽度

计算机数据

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


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

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

例:

当数据宽度为4时,即数据只能存储4位2进制位0000~1111

无符号数:

数据0123456789101112131415
十六进制0123456789ABCDEF
二进制0000000100100011010001010110011110001001101010111100110111101111

有符号数:

正数:

数据01234567
十六进制01234567
二进制00001001000110100010101100111

负数:

数据-1-2-3-4-5-6-7-8
十六进制FEDCBA98
二进制11111110110111001011101010011000

可以发现当数据为1011,把数据看作无符号数时,数据表示为B

把数据看作有符号数时,数据表示为-5

无符号数的表示范围为0~2^4-1即0~15\\ 有符号数的表示范围为-2^3~2^3-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

先异或

image-20210227225741221

R:0001

异或完以后要判断是否运算结束

将两个数进行与运算 然后左移一位

image-20210227225805371

0010<<1 ==0100

如果结果全为0,结果则为我们所要的结果

否则,把上面异或得到的值赋值到X

把左移后的结果赋值到Y

X:0001

Y:0100

重复操作

先异或

image-20210227225832210

R:0101

再将两个数进行与运算 然后左移一位

image-20210227225849434

左移完结果全是0,结果则为我们所要的

最终结果为0101=5

CPU如何计算2-3?

X:0010

Y:1101

先异或

image-20210227225905554

R:1111

将两个数进行与运算 然后左移一位

image-20210227225917490

0000<<1=0000

如果结果全为0,结果则为我们所要的结果

最终结果为1111 = -1

如何取某个值的第N位的数值

与操作

如我们想要查看23h这个十六进制数的第3位则可以进行如下运算:

先将23h转化为二进制:0010 0011

image-20210227225942716

最简单的加密算法

通过异或加密数据 再次异或后则解密数据

要加密的数据:2021:0010 0000 0010 0001

密钥:54:0101 0100

image-20210227225957586

高位:0111 0100 = 74

image-20210227230009730

低位:0111 0101 = 75

原本的2021加密成了7475

然后再次进行异或操作进行解密:

image-20210227230024513

高位:0010 0000 = 20

image-20210227230037298

低位:0010 0100 = 21

解密回了原来的数值2021

返回顶部