狂神汇编原理

1.汇编(可以破解软件,写外挂…)

------计算器语言-----
2.机器语言 0和1 c+±>汇编—>二进制

INC   --抽象-->编译器    0100 0000
 DEC
 MUL
 DIV

3.进制 10进制(10个手指) 可以自己定义进制,作为进制加密解密,查数

1进制 一进一 写出2 ->1 1
2进制 0 1 10 11 100 101 110 111 1000
3进制 0 1 2 10 11 12 20 21 22 100 101
八进制 八进一 0 1 2 3 4 5 6 7
十进制 进一 0 1 2 3 4 5 6 7 8 9
十六进制 f进一 0 1 2 3 4 5 6 7 8 9 a b c d e f

4.八进制

2+3=5 //位置在5 23=6 //位置在进制表的6 4+5=11 //9,减法的本质是加法
4
5=24 //位置20 234/4=47 //反向找可以除的 ,x/4=234 写出进制表,类似 九九乘法表和加法表

5.二级进制 0 1有无电子 ,摩尔定律

  量子计算机: 昆比特(量子比特包含光子(正交偏振方向)和磁场(电子自旋方向))

6.数据宽度(给类型定义宽度)在内存中的长度

bit 0 1
Byte 0-0xFF (8个1) (255)
Word 0-0xFFFF (16位)
DWord 0-0xFFFFFFFF (32位,如32个0)

7.有符号数和无符号(怎么表示正负号)
1001 1010 16进制 0x9A(4位4位)
1 0011010 #最高位是符号位0正1负
8.有了符号怎么计算

  1. 无符号 原码=反码=补码
    2 的原码 0000 0010 反 0000 0010 补0000 0010

  2. 有符号 原码=反码(原码取反,最高位不用取)=补码(反码二进制最后+1)
    -2的原码 1000 0010 反码 1111 1101补码 1111 1110

9.寄存器

//往eax存-1,查看到存入FFFF FFFF(32位)
4*8=32位的计算机 1个F,4个1 ,如果是64位计算机,就是
64个1,16个F mov eax,-1 //计算机是以补码存储的

10.运算
2*8最高效的计算方式

  1. 与运算 and 1&1=1 1&0=0
    图or
    狂神汇编原理_第1张图片
    图and
    狂神汇编原理_第2张图片
  2. 或 or 1| 1= 1 1 | 0=1
  3. 异或(xor ^) 不相同为1
    图xor
    狂神汇编原理_第3张图片
  1. 非(单目运算符 not ~) 就是取反原码变反码(除了符号位的)
    1101 1000–>0010 0111
  2. 位运算
    左移 shl<<1 0000 0001—> 0000 0010 #高位丢弃,
    右移 shr>>1 0000 0001–>0000 0000#低位丢弃
  1. 加法
    例子 1+2=3?
  1. 对原码两个数异或
    0000 0001
    0000 0010
    ->0000 0011
  2. 对原码两个数与and
    0000 0001
    0000 0010
    ->0000 0000
  3. 与运算结果左移一位
    ->0000 0000
  4. (异或结果)xor(与左移结果)
    0000 0011
    0000 0000
    0000 0011
  5. and与确认结果(确认为0没有进位,如果没有继续异或)(如 本来1111 变成 1 0000 就是进位)
    0000 0011
    0000 0000
    0000 0000

12.减法(要使用反码和补码) 负数要求补码
4+(-5)

  1. 符号位先为正, (后变负)后取反,得补码
    0000 0100 #4 正数的原码

    0000 0101—>1111 1010 —>1111 1011 #负数的原码和反码和补码

  2. 求异或
    0000 0100
    1111 1011
    1111 1111 #ff

  3. 与and确定有没有进位 16进制 10 10进制(!!!要区分符号位) 255或者 -1

13.乘除

乘 就是加法 10*3 =10+10+10 #加多少次10
除法 就是减法 10/3 =10 -3-3-3
#计算减多少次3

  1. 工具vc6 OD(找到地址改) 抓包 加密解密根据
    ollyDbg 拖入程序
    pic innerStructure
    狂神汇编原理_第4张图片
    15.寄存器(在cpu里面,速度比内存快,数量少)
  2. 通用寄存器(可以存储任意的值)
    1.32位的有8个寄存器,位数直接有对应关系 EAX AX AL是一串数字,可以分别控制
    mov add,num
    mov add1,add2
    图寄存器的关系(包含关系)
    狂神汇编原理_第5张图片

2.其他寄存器(有特定的功能,不能随便修改,开机关机…)

16.内存(寄存器小,需要数据放内存)

每个程序有4g内存(虚拟),
1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
数据宽度 bit 0/1 byte(8位) word(16位) dword(32位) qword(64位)
//多少b就是表示多少个地址
4G =4294 967 296 b /1024 =4194304 kb /1024= 4096mb/1024=4gb
//内存有编号,向内存存值
//mov 数据宽度,
mov dword ptr ds:[0x0019FF74],1 //byte改后2位
//传递值要和类型对应
mov byte ptr ds:[0x0019FF74],ffff (x) 只能传2位
//地址偏移,0x0019FF74 读写值
mov dword ptr ds:[0x0019FF70+4],1
//寄存器的值放到内存
ds:[eax]
ds:[eax+4] //修改寄存器地址的偏移
//数组,批量创建内存地址
ds:[reg+reg*{1,2,4,8}+4]

         nop 改jnz(if判断)以免导致后面产生连锁反应,右键二进制-->用aop填充
     //需要导出新的文件,右键复制到可执行文件 -->右键保存文件 全部复制

17.加壳和脱壳(a通过套b.exe的壳,防破解,然后执行加密算法才能得到a的二进制)
//实战植物大僵尸改无限太阳
cheat engine 查看内存地址变化筛选内存地址
od ctrl+g搜索内存地址改代码
sub edi,edi #血量变为0 填nop为空
//怎么在图形界面控制破解
打开进程id的api
//内存写机器码,可以改执行,程序写好了会在特定的内存地址执行

  1. EIP寄存器,代表下一条执行的指令

19.寄存器临时存数据(一直在变化)

20.od安装插件

od点击插件跳到网页,然后下载clawsearch 32的文件放32位plugin文件夹
  64位同理

你可能感兴趣的:(汇编)