本帖最后由 kay2kay 于 2021-03-14 15:24 编辑
本文为本人的滴水逆向破解脱壳学习笔记之一,为本人对以往所学的回顾和总结,可能会有谬误之处,欢迎大家指出。 陆续将不断有笔记放出,希望能对想要入门的萌新有所帮助,一起进步 所有笔记链接:
大神论坛 逆向脱壳分析基础学习笔记一 进制篇 大神论坛 逆向脱壳分析基础学习笔记二 数据宽度和逻辑运算 大神论坛 逆向脱壳分析基础学习笔记三 通用寄存器和内存读写 大神论坛 逆向脱壳分析基础学习笔记四 堆栈篇 大神论坛 逆向脱壳分析基础学习笔记五 标志寄存器 大神论坛 逆向脱壳分析基础学习笔记六 汇编跳转和比较指令 大神论坛 逆向脱壳分析基础学习笔记七 堆栈图(重点)(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记八 反汇编分析C语言 大神论坛 逆向脱壳分析基础学习笔记九 C语言内联汇编和调用协定 大神论坛 逆向脱壳分析基础学习笔记十 汇编寻找C程序入口(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记十一 汇编C语言基本类型 大神论坛 逆向脱壳分析基础学习笔记十二 汇编 全局和局部 变量(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记十三 汇编C语言类型转换(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记十四 汇编嵌套if else(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记十五 汇编比较三种循环(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记十六 汇编一维数组(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记十七 汇编二维数组 位移 乘法(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记十八 汇编 结构体和内存对齐(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记十九 汇编switch比较if else(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记二十 汇编 指针(一)(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记二十一 汇编 指针(二)(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记二十二 汇编 指针(三)(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记二十三 汇编 指针(四)(需登录才能访问) 大神论坛 逆向脱壳分析基础学习笔记二十四 汇编 指针(五) 系列完结(需登录才能访问) 更多逆向脱壳资源,请访问 大神论坛数据宽度计算机数据数学上的数字是没有大小限制的,可以无限大。但在计算机中,由于硬件的制约,数据是有长度限制的,超过数据宽度的数据会被丢弃
同一个数据,表示无符号数和有符号数则其含义不同 例: 当数据宽度为4时,即数据只能存储4位2进制位0000~1111 无符号数: 数据 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|
十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 二进制 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
有符号数: 正数: 数据 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|
十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 二进制 | 0 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
负数: 数据 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 |
---|
十六进制 | F | E | D | C | B | A | 9 | 8 | 二进制 | 1111 | 1110 | 1101 | 1100 | 1011 | 1010 | 1001 | 1000 |
可以发现当数据为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 先异或 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 低位:0010 0100 = 21 解密回了原来的数值2021
|