banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

《从零开始学IDA逆向》学习笔记-2(数值运算)

image

数值系统#

常用的数值系统有(二进制) 、decimal (十进制) 和 hexadecimal (十六进制) 。

Binary(二进制):仅以 0 和 1 字符表示数字。
Decimal(十进制):使用 0~9 共 10 个字符表示数字。
Hexadecimal(十六进制):使用 0~9 加上 A~F 共 16 个字符表示数字。

在 Python 交互中输入 0x45, 由于开头的 0x 将会被解释为十六进制数。直接按回车可将 0x45 转换为十进制数,输出结果为 69。

image

image

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

image

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

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

image

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

image

所有直接输入的数字在按回车后会转换为十进制数输出,通过 Python 函数hex()bin()可以转换为十六进制或者二进制数输出。

为了方便起见,通过菜单VIEW-CALCULATOR, 可以打开 IDA 内置的转换器。
该转换器能够同时显示数字转换为各种进制的结果。也会显示数字对应的ASCII字符。例如0x45对应的字符是E

image

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

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

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

image

ASCII 码字符#

http://www.asciima.com/ascii/12.html

十六进制转字符#

chr()

image

IDA 中的搜索功能#

image

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

image

  • 下一处已探查项 (NEXT EXPLORED) : 搜索下一处可执行指令或者数据。
  • 下一处未探查项 (NEXT UNEXPLORED) : 搜索下一处非执行指令且非数据。

搜索硬编码值 (SEARCH INMEDIATE) : 该功能用于搜素可执行指令以及数据项中的常量。

image

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

image

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

image

搜索结果视图

image

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

image

搜索结果视图

image

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

image

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

image

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。