逆向分析入门之汇编语言基础1_自学笔记1

逆向分析入门_自学笔记2

逆向分析入门_自学笔记3

1.程序在内存在如何存储?

二进制存储

进制运算:

8进制加法

用加法表

1+1=2

 

 

 

 

 

 

1+2=3

2+2=4

 

 

 

 

 

1+3=4

2+3=5

3+3=6

 

 

 

 

1+4=5

2+4=6

3+4=7

4+4=10

 

 

 

1+5=6

2+5=7

3+5=10

4+5=11

5+5=12

 

 

1+6=7

2+6=10

3+6=11

4+6=12

5+6=13

6+6=14

 

1+7=10

2+7=11

3+7=12

4+7=13

5+7=14

6+7=15

7+7=16

 

乘法表

1*1=1

 

 

 

 

 

 

1*2=2

2*2=4

 

 

 

 

 

1*3=3

2*3=6

3*3=11

 

 

 

 

1*4=4

2*4=10

3*4=14

4*4=20

 

 

 

1*5=5

2*5=12

3*5=17

4*5=24

5*5=31

 

 

1*6=6

2*6=14

3*6=22

4*6=30

5*6=36

6*6=44

 

1*7=7

2*7=16

3*7=25

4*7=34

5*7=43

6*7=52

7*7=61

二进制与十六进制的映射

十六进制: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

2.从整体上了解一个EXE程序

任何一个在Windows上运行的可执行文件都要遵守一定的格式,这个格式就是PE文件结构,比如exe,dll,部分sys.

为什么要了解PE文件结构?

想要分析一个程序,那么有几件事情必须做:

第一:程序从哪里开始执行?

第二:代码存在哪里?

第三:数据存在哪里?

3.数据宽度和逻辑运算

一:数据宽度:由于受硬件的制约,数据都是有长度限制的(超过最多宽度的数据会被丢弃。)

二:4位宽度表示:(假设计算机只能存储4位2进制数){则最多能存16个数}

实例1:4位宽度表示:(假设计算机只能存储4位2进制数){则最多能存16个数}

(1).无符号数:0 1 2 3 4 5 6 7 8 9 A B C D E F

(2).有符号数:

                             

实例2:8位宽度表示:(假设计算机只能存储8位2进制数)(2个16进制数){则最多能存256个数}

无符号数:0 1 2 3 4 5……FF(十进制255)

有符号数:

正数:0 1 2 3 4 5……7F

负数:-1   -2   -3  -4   -5……-128 

           FF FE FD FC FB……80                

                                                                                           

(三).几个重要的计量单位:

BYTE 字节 =8bit

WORD 字 =2字节=16bit

DWORD 双字=4字节=32bit

 

(四).逻辑运算

(1).或(or |):只要有一个为1就是1

         1011000101

or      1001100110

--------------------------

          1011100111 

(2).与(and &):两个都为1才是1

(3).异(xor ^): 不一样为1

(4).非(not !):!1是0,!0是1

 

逻辑运算的具体应用:

(1).cpu是如何计算2+3=?

容器X(存2):0010

容器Y(存3):0011      容器R(存异或的结果):0001

 

先来异或(xor)

         0010

xor    0011

------------------

         0001

如何确定上面计算是否结束(用 与&),然后让结果左移1位

        0010

&      0011

------------------

        0010

左移:(原来)0010 << 1(左移1位)==0100

若左移的结果为0000,则R中存的就是计算结果;否则把R赋值给X,把左移运算的结果赋值给Y

X:0001

Y:0100           R:0101

         0001

xor    0100

------------------

         0101

 

        0001

&      0100

------------------

        0000

0000 <<1==0000,所以运算结束,R:0101就是结果 (0101)2=(5)10

 

(2).如果想获取某一个值得第N位的值是多少?

如:8F(想知道它的第4位,是0还是1)

           10001111

and     00001000

------------------------

           10001111

所以第4位是1

 

(3).最简单的加密算法(异或^ ):

要加密的数据:(2015)16                                                    

密钥:(54)16(两位密钥,所以两位两位的加密)   54:01010100                            

加密过程:

              20                                15

         00100000                          00010101

^       01010100                  ^       01010100

---------------------          -------------------------------

         01110100                           01000001

加密后的结果:        74                                41

 

解密过程:

               74                                41

        01110100                            01000001

^       01010100                  ^       01010100

---------------------          -------------------------------

        00100000                            00010101

解密后的结果:        20                                15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值