网络安全编程:C语言逆向之if…else…结构分析

 [[391871]]

. if…else…分支结构例子程序

首先来写一个简单的C语言代码例子,然后对例子代码进行介绍。例子代码如下: 

  1. #include <stdio.h>  
  2. int main()  
  3.  
  4.  int a = 0b = 1c = 2 
  5.  if ( a > b )  
  6.  {  
  7.  printf("%d \r\n", a);  
  8.  }  
  9.  else if ( b <= c )  
  10.  {  
  11.  printf("%d \r\n", b);  
  12.  }  
  13.  else  
  14.  {  
  15.  printf("%d \r\n", c);  
  16.  }  
  17.  return 0;  

2. 逆向反汇编解析

上述代码非常短且很简单,用IDA看其反汇编代码。固定模式的头部和尾部位置省略不看,主要看其关键的反汇编代码,具体如下: 

  1. .text:00401028 mov [ebp+var_4], 0  
  2. .text:0040102F mov [ebp+var_8], 1  
  3. .text:00401036 mov [ebp+var_C], 2 

以上3行反汇编代码是对定义的变量的初始化,在IDA中可以通过快捷键将其重命名。将以上3个变量重命名后,看其余的反汇编代码,具体如下: 

  1. .text:0040103D mov eax, [ebp+var_4]  
  2. .text:00401040 cmp eax, [ebp+var_8]  
  3. .text:00401043 jle short loc_401058  
  4. .text:00401045 mov ecx, [ebp+var_4]  
  5. .text:00401048 push ecx  
  6. .text:00401049 push offset Format ; "%d \r\n"  
  7. .text:0040104E call _printf  
  8. .text:00401053 add esp, 8  
  9. .text:00401056 jmp short loc_401084  
  10. .text:00401058 ; -------------------------------------------------  
  11. .text:00401058  
  12. .text:00401058 loc_401058: ; CODE XREF: _main+33j  
  13. .text:00401058 mov edx, [ebp+var_8]  
  14. .text:0040105B cmp edx, [ebp+var_C]  
  15. .text:0040105E jg short loc_401073  
  16. .text:00401060 mov eax, [ebp+var_8]  
  17. .text:00401063 push eax  
  18. .text:00401064 push offset Format ; "%d \r\n"  
  19. .text:00401069 call _printf  
  20. .text:0040106E add esp, 8  
  21. .text:00401071 jmp short loc_401084  
  22. .text:00401073 ; --------------------------------------------------  
  23. .text:00401073 
  24. .text:00401073 loc_401073: ; CODE XREF: _main+4Ej  
  25. .text:00401073 mov ecx, [ebp+var_C] 
  26. .text:00401076 push ecx  
  27. .text:00401077 push offset Format ; "%d \r\n"  
  28. .text:0040107C call _printf  
  29. .text:00401081 add esp, 8  
  30. .text:00401084  
  31. .text:00401084 loc_401084: ; CODE XREF: _main+46j  
  32. .text:00401084 ; _main+61j 

将以上反汇编分为3段进行观察,第1段的地址范围是0040103D至00401056,第2段的地址范围是00401058至00401071,第3段的地址范围是00401073至00401081。除了第3段代码外,前面两段的代码有一个共同的特征:cmp / jxx / printf / jmp。这部分功能的特征就是if…else…的特征所在。看一下IDA绘制的该段反汇编代码的反汇编流程结构,如图1所示。

图1  if…else…反汇编流程结构

在C语言代码中,影响程序流程的是两个关键的比较,分别是“>”和“<=”。在反汇编代码中,影响主要流程的是两个条件跳转指令,分别是“jle”和“jg”。C语言代码中,“>”(大于号)在反汇编中对应的是“jle”(小于等于则跳转),“<=”(小于等于号)在反汇编中对应的是“jg”(大于则跳转)。

注意观察00401043和0040105E这两个地址,jxx指令会跳过紧接着其后面的指令部分,而跳转的目的地址上面都有一条jmp无条件跳转指令。也就是说,jxx和jmp之间的部分是C语言代码中比较表达式成功后执行的代码。在反汇编代码中,如果条件跳转指令没有发生跳转,则执行其后的指令。这样的反汇编指令与C语言的流程是相同的。当条件跳转指令发生跳转后,执行完相应的指令后会执行jmp指令跳到某个地址。注意观察,两条jmp跳转的目的地址都为00401084。

3. if…else…结构小结

从例子中可以找出C语言if…else…结构与反汇编代码的对应结构,具体如下: 

  1. ; 初始化变量  
  2.  mov xxx, xxx  
  3.  mov xxx, xxx  
  4.  ; 比较跳转  
  5.  cmp xxx, xxx  
  6.  jxx _else_if  
  7.  ; 一系列处理指令  
  8.  ……  
  9.  jmp _if_else 结束位置  
  10. _else_if:  
  11.  mov xxx, xxx  
  12.  ; 比较跳转  
  13.  cmp xxx, xxx  
  14.  jxx _else  
  15.  ; 一系列处理治理  
  16.  ……  
  17.  jmp _if_else 结束位置  
  18. _else:  
  19.  ; 一系列处理指令  
  20.  ……  
  21.  _if_else 结束位置: 

以上就是if…else…分支结构的大体形式。 

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/141004.html<

(0)
管理的头像管理
上一篇2025-03-04 05:07
下一篇 2025-03-04 05:08

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注