本文给大家讲解我们日后逆向学习和实践过程中息息相关的一些重要基础
我们要讲解的是
例如
1+1=1在什么时候是正确的?
OD,CE,IDA等工具为什么都是16进制?
计算机只认识0和1,也就2进制。
我们现实生活中常用到的是10进制。
时间呢?又有60进制,60秒为1分钟,24进制,24小时为一天等等
那么什么是进制呢?
N进制定义:由n个符号组成 逢n进位
例如 01 二进制
0123456789 十进制
那么如果我这么写呢
!@#¥% 5个符号 也可以作为5进制吧
!+!=! 没有人反对吧 (!此时的含义是0)
@+@=#
所以1879023456 这样排列的10个符号 也可以是十进制
那么 1+1=1 是不是顺理成章了呢?
有人说 这样是在玩数字游戏吗?完全没有意义啊
也并非如此,如果你的服务器把数字做成这样的解析,是不是也是一种不容易被察觉的加密呢?
答案是肯定的,当然这个例子更多的是为了让我们更深入的理解进制
第二个问题
OD,CE,IDA等工具为什么都是16进制啊?
实际上根本原因就是计算机是2进制的 16进制是2进制的简写方式,直接看二进制很难看
一串串的0和1 ,任何人都会头晕
1字节是8位也就是8个0和1
最小00000000 最大11111111
表示的范围是0到255 如果有十进制字节表示 十进制位数不满,再加1也不进位,而二进制已经进位了
来回转换也不方便,
所以我们选择了16进制
用16进制表示的话就是0到FF 再进位也跟着进位
也就是 每8位缩写成2位的16进制
这就是16进制存在的意义
否则我们不会凭空发明一种进制给自己添麻烦的
至于进制之间的转换,懂其原理即可,我们又不会总去自己计算
例如0x4A 他的含义是什么呢
是他有 4个0x10 和一个A 0x10是什么意思是逢16进的1
那么就等于 4*16+A=64+10=74