数值系统#
常用的数值系统有(二进制) 、decimal (十进制) 和 hexadecimal (十六进制) 。
Binary(二进制):仅以 0 和 1 字符表示数字。
Decimal(十进制):使用 0~9 共 10 个字符表示数字。
Hexadecimal(十六进制):使用 0~9 加上 A~F 共 16 个字符表示数字。
在 Python 交互中输入 0x45, 由于开头的 0x 将会被解释为十六进制数。直接按回车可将 0x45 转换为十进制数,输出结果为 69。


如果需要将十进制转换为十六进制数,可以使用 hex () 函数。

Bin () 函数将其他进制的数字转换为二进制数。输出结果是 1000101。开头的 0b 代表这是一个二进制数,
十进制和十六进制转换为二进制数

二进制数转换为十进制和十六进制

所有直接输入的数字在按回车后会转换为十进制数输出,通过 Python 函数hex()和bin()可以转换为十六进制或者二进制数输出。
为了方便起见,通过菜单VIEW-CALCULATOR, 可以打开 IDA 内置的转换器。
该转换器能够同时显示数字转换为各种进制的结果。也会显示数字对应的ASCII字符。例如0x45对应的字符是E。

几乎所有逆向工作都要涉及十六进制数,那么问题是如何用 32 位十六进制表示一个负数。在一个 32 位二进制数中,第一个比特 (bit) 上的 0 用来表示正数,1 来表示负数。

在计算器中将 0x7fffffff 再加上 1, 最高位变成 1, 其他位变成了 0。

IDA 转换器在输入的时候默认都是正数,除非我们在数字前面加上 “-” 号。
最大负数 - 1 对应十六进制 0xffffffff,最小负数 0x80000000。如果不考虑正负,所有的数从0到0xffffffff都是正值。考虑正负,0x0到0x7fffffff是所有的正数,0xffffffff到0x80000000 是所有的负数。

ASCII 码字符#
http://www.asciima.com/ascii/12.html
十六进制转字符#
chr()

IDA 中的搜索功能#

- 下一条可执行指令 (NEXT CODE) : 这个功能用于搜索下一条可执行指令 (CODE) 。如果中间有一部分不是可执行指令,这部分将会被跳过。
- 下一处数据(Next data):这个功能用于搜索下一处数据。

- 下一处已探查项 (NEXT EXPLORED) : 搜索下一处可执行指令或者数据。
- 下一处未探查项 (NEXT UNEXPLORED) : 搜索下一处非执行指令且非数据。
搜索硬编码值 (SEARCH INMEDIATE) : 该功能用于搜素可执行指令以及数据项中的常量。

打开新窗口,显示搜索后的内容

搜素文本 (TEXT) : 搜索输入的文本,支持正则表达式。如果读者选择了单个搜索,还需要使用下一处文本 (NEXT TEXT) 来继续搜索。

搜索结果视图

搜索字节序列 (SEQUENCE OF BYTES) : 搜索输入的字节序列。

搜索结果视图

点击相应的搜索结果,ida 会进入到反汇编视图中。

搜索非完整函数 (NOT FUNCTION) : 搜索下一处不完整的函数。

004013D7 地址上单独的 RET 指令无法识别为函数。有时候,因为一些非法指令导致有些函数无法被 IDA 识别出来。