网络安全编程:C语言逆向之if…else…结构分析
番茄系统家园 · 2022-02-06 02:08:19

. if…else…分支结构例子程序
首先来写一个简单的C语言代码例子,然后对例子代码进行介绍。例子代码如下:
2. 逆向反汇编解析
上述代码非常短且很简单,用IDA看其反汇编代码。固定模式的头部和尾部位置省略不看,主要看其关键的反汇编代码,具体如下:
以上3行反汇编代码是对定义的变量的初始化,在IDA中可以通过快捷键将其重命名。将以上3个变量重命名后,看其余的反汇编代码,具体如下:
将以上反汇编分为3段进行观察,第1段的地址范围是0040103D至00401056,第2段的地址范围是00401058至00401071,第3段的地址范围是00401073至00401081。除了第3段代码外,前面两段的代码有一个共同的特征:cmp/ jxx / printf / jmp。这部分功能的特征就是if…else…的特征所在。看一下IDA绘制的该段反汇编代码的反汇编流程结构,如图1所示。

图1 if…else…反汇编流程结构
在C语言代码中,影响程序流程的是两个关键的比较,分别是“>”和“”(大于号)在反汇编中对应的是“jle”(小于等于则跳转),“
注意观察00401043和0040105E这两个地址,jxx指令会跳过紧接着其后面的指令部分,而跳转的目的地址上面都有一条jmp无条件跳转指令。也就是说,jxx和jmp之间的部分是C语言代码中比较表达式成功后执行的代码。在反汇编代码中,如果条件跳转指令没有发生跳转,则执行其后的指令。这样的反汇编指令与C语言的流程是相同的。当条件跳转指令发生跳转后,执行完相应的指令后会执行jmp指令跳到某个地址。注意观察,两条jmp跳转的目的地址都为00401084。
3. if…else…结构小结
从例子中可以找出C语言if…else…结构与反汇编代码的对应结构,具体如下:
以上就是if…else…分支结构的大体形式。
免责声明: 凡标注转载/编译字样内容并非本站原创,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如果你觉得本文好,欢迎推荐给朋友阅读;本文链接: https://m.nndssk.com/dngz/331772tZfXXv.html。
