hackking 发表于 2017-12-15 21:24

新手学习反汇编之OD特征码

本帖最后由 hackking 于 2017-12-16 14:24 编辑

## 背景知识
* 汇编知识
* 进制转换

## 什么是特征码
特征码必须是某类或某个唯一的,比如,人具有思考的功能,但是所有人都具有,所以这只是人的特征。但是如果要找具体某个人,那么需要分析这个人具有哪些信息,如面部有疤痕,身高2米,长期活动范围等等。

那么反过来,需要找一个call的特征,那么要知道该功能具有什么信息。
在逆向工程中特征其实就是汇编指令对应的十六进制机器码,如:`59 89 4D F8 6A 00 6A 00`,对应的汇编代码就是:
```
59            pop ecx
894D F8       mov ,ecx
6A 00         push 0x0
6A 00         push 0x0
```

通过分析前篇test程序:

```
015D3EA0/> \55            push ebp                                 ;这里是test call
015D3EA1|.8BEC          mov ebp,esp
015D3EA3|.81EC CC000000 sub esp,0xCC
015D3EA9|.53            push ebx
015D3EAA|.56            push esi
015D3EAB|.57            push edi
015D3EAC|.51            push ecx
015D3EAD|.8DBD 34FFFFFF lea edi,
015D3EB3|.B9 33000000   mov ecx,0x33
015D3EB8|.B8 CCCCCCCC   mov eax,0xCCCCCCCC
015D3EBD|.F3:AB         rep stos dword ptr es:
015D3EBF|.59            pop ecx                                  ;test.01648053
015D3EC0|.894D F8       mov ,ecx
015D3EC3|.6A 00         push 0x0
015D3EC5|.6A 00         push 0x0
015D3EC7|.68 0C60C601   push test.01C6600C                     ;UNICODE "test"
015D3ECC|.8B4D F8       mov ecx,
015D3ECF|.E8 95D2FCFF   call test.015A1169                     ;call test1111
015D3ED4|.5F            pop edi                                  ;test.01648053
015D3ED5|.5E            pop esi                                  ;test.01648053
015D3ED6|.5B            pop ebx                                  ;test.01648053
015D3ED7|.81C4 CC000000 add esp,0xCC
015D3EDD|.3BEC          cmp ebp,esp
015D3EDF|.E8 997EFBFF   call test.0158BD7D
015D3EE4|.8BE5          mov esp,ebp
015D3EE6|.5D            pop ebp                                  ;test.01648053
015D3EE7\.C3            retn

```

=====================华丽的分割线==================

```
015D3E40/> \55            push ebp                                 ; 这里是 test2 call
015D3E41|.8BEC          mov ebp,esp
015D3E43|.81EC CC000000 sub esp,0xCC
015D3E49|.53            push ebx
015D3E4A|.56            push esi
015D3E4B|.57            push edi
015D3E4C|.51            push ecx
015D3E4D|.8DBD 34FFFFFF lea edi,
015D3E53|.B9 33000000   mov ecx,0x33
015D3E58|.B8 CCCCCCCC   mov eax,0xCCCCCCCC
015D3E5D|.F3:AB         rep stos dword ptr es:
015D3E5F|.59            pop ecx                                  ;test.015D20AB
015D3E60|.894D F8       mov ,ecx
015D3E63|.6A 00         push 0x0
015D3E65|.6A 00         push 0x0
015D3E67|.68 1860C601   push test.01C66018                     ;UNICODE "test2"
015D3E6C|.8B4D F8       mov ecx,
015D3E6F|.E8 F5D2FCFF   call test.015A1169                     ;call test2
015D3E74|.5F            pop edi                                  ;test.015D20AB
015D3E75|.5E            pop esi                                  ;test.015D20AB
015D3E76|.5B            pop ebx                                  ;test.015D20AB
015D3E77|.81C4 CC000000 add esp,0xCC
015D3E7D|.3BEC          cmp ebp,esp
015D3E7F|.E8 F97EFBFF   call test.0158BD7D
015D3E84|.8BE5          mov esp,ebp
015D3E86|.5D            pop ebp                                  ;test.015D20AB
015D3E87\.C3            retn

```


发现两个程序几乎一模一样,就参数不一样。 这个时候就需要往上一层分析他们不一样并具有唯一性的特征(一般特征都是自底向上)。因为这里函数功能都一样,所以上层跟call内部一样,只有参数不一样,但是`68 1860C601   push test.01C66018`这部分是动态变化的,所以不能作为特征码。像这种情况是很少的,所以在记录特征码时这里可以以分类的方式记录。也就是找到的都是同一种功能。
特征就是:
```
59 89 4D F8 6A 00 6A 00
```

SnakeJohn 发表于 2020-3-25 10:19

本帖最后由 SnakeJohn 于 2020-3-25 10:21 编辑

china晓五 发表于 2017-12-16 19:24
什么是特征码
特征码:就是你要找的数据附近的汇编代码,如果你要找的数据所在的程序更新了,数据改变了,你就可以用这串汇编代码快速定位你要找的更新后的数据
比如DNF的角色基址,假设更新前的基址是063721EA,特征码是00 02 0E AE,更新后要找的新基址的话,就可以用这个特征码迅速定位特征码新位置,同时定位新基址

APshaco 发表于 2017-12-16 14:28

但是68 1860C601   push test.01C66018这部分是动态变化的,所以不能作为特征码
可否这样 ;59 89 4D F8 6A 00 6A 00??????????8B 4D F8

OD用的不多,貌似应该能这样找特征码吧?

hackking 发表于 2017-12-16 14:54

APshaco 发表于 2017-12-16 14:28
但是68 1860C601   push test.01C66018这部分是动态变化的,所以不能作为特征码
可否这样 ;59 89 4D F8 6 ...

可以的,模糊查找,可以测试,这里实际上是一样的。

hbjacker 发表于 2017-12-16 15:39

这只能说明调用的是同一个例程。其他能说明什么呢?

china晓五 发表于 2017-12-16 19:24

什么是特征码

jkl718293 发表于 2017-12-17 00:51

不是很懂

戒酒的李白 发表于 2017-12-18 14:26

汇编不会

过林黑马 发表于 2018-2-12 19:45

这个特征码在什么地方能用到,不是语言的特征码,也不是什么事件的特征码吧

sunshine_昊 发表于 2018-2-14 16:54

没怎么看懂,可能书读少了

duyisu2012 发表于 2020-3-16 21:24

特征码就是一段最小功能的汇编代码,用来定位代码的,对吗?
页: [1] 2
查看完整版本: 新手学习反汇编之OD特征码