-
-
[旧帖]
[原创]C三种循环结构逆向分析
0.00雪花
-
发表于:
2013-4-28 19:32
3483
-
[旧帖] [原创]C三种循环结构逆向分析
0.00雪花
之前分析的一篇东西申请邀请码
C语言的3种循环分析
---forward
C语言中一共有三种类型的循环语句while语句、do语句和for语句,同样都是循环语句但是从汇编的角度来看他们有着不同的循环流程,做了次简单的逆向分析如下
(1)while循环
While在进入循环前会先进行判断,根据比较的结果来决定是否进行循环,如下面代码(到时候我会打包一起上传)
int a,b;
scanf("%d",&b); /*此处省略N多行反汇编代码*/
a=0;
00401039 mov dword ptr [ebp-4],0
while(a<b){ /*根据值得比较判断是否进入循环*/
00401040 mov ecx,dword ptr [ebp-4]
00401043 cmp ecx,dword ptr [ebp-8]
00401046 jge main+54h (00401064)
printf("%d\n",a);
00401048 mov edx,dword ptr [ebp-4]
0040104B push edx
0040104C push offset string "%d\n" (0042501c)
00401051 call printf (00401090)
00401056 add esp,8
a++;
00401059 mov eax,dword ptr [ebp-4]
0040105C add eax,1
0040105F mov dword ptr [ebp-4],eax
} /*jmp指令直接跳到起始处,重新开始*/
00401062 jmp main+30h (00401040)
15: return 0;
00401064 xor eax,eax
在这里要区分if和while,经过反汇编后的while(a<b)与if条件判断的结构非常相似。都是比较相反,比较完之后都往下跳。光从这一点来看它们是一样的,无法直观的的分辨。看看jge的目标地址00401064上面有一个jmp指令并且是指向循环起始处的,很明显这个是个循环语句。可以根据这一个特性来辨别if判断和while判断。利用IDA的流程图分析更为直观 如图
篇幅有限,直接下载pdf附件吧
简单的做下分析,又不到之处欢迎指出
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!