if语句分析
1.if语句的反汇编判断
if语句反汇编后的标志:
执行各类影响标志位的指令
jxx xxxx
如果遇到上面的指令,则很可能是if语句;
例如:
1、案例一
mov eax,dword ptr [ebp+8] 分析:cmp指令 影响标志位
cmp eax,dword ptr [ebp+0Ch] jle :小于或者等于就跳转到00401059
jle 00401059
2、案例二
mov eax,dword ptr [ebp+8] 分析:cmp指令 影响标志位
cmp eax,dword ptr [ebp+0Ch] jl :小于则跳转
jl 00401059
3、案例三
mov eax,dword ptr [ebp+8] jge :大于或者等于则跳转
cmp eax,dword ptr [ebp+0Ch]
jge 00401059
4、案例四
mov eax,dword ptr [ebp+8] jg :大于则跳转
cmp eax,dword ptr [ebp+0Ch]
jg 00401059
函数反汇编分析实例:
2.if...else语句的反汇编判断
反汇编标志性语句:
IF_BEGIN:
先执行各类影响标志位的指令
jxx ELSE_BEGIN
......
IF_END:
jmp END
ELSE_BEGIN:
......
ELSE_END:
END:
特点分析:
1、如果不跳转,那么会执行到jmp处,jmp直接跳转到END处
2、如果跳转,则会直接跳过jmp END处的代码,直接执行后面的代码
总结:
跳转执行一部分代码,不跳转执行另外一部分代码
第一个jxx跳转的地址前面有一个jmp ,可以判断是if...else...语句
例如:
3.IF...ELSE IF...ELSE IF..多分支语句的反汇编判断
IF_BEGIN:
影响标志位的指令
jxx ELSE_IF_BEGIN
......
IF_END:
jmp END
ELSE_IF_BEGIN:
影响标志位的指令
jxx ELSE_BEGIN
......
ELSE_IF_END:
jmp END
ELSE_BEGIN:
......
ELSE_END:
END:
......
分析:
1、当每个条件跳转指令要跳转的地址前面都有jmp 指令
2、这些jmp指令跳转的地址都是一样的
3、如果某个分支没有条件判断,则为else部分
4.函数内部功能分析
函数反汇编代码:
1、分析参数
a=[ebp+8],b=[ebp+10],c=[ebp+c];
2、分析局部变量
x=0,y=1,z=2;
3、分析全局变量
没看到直接寻址所以没有全局变量;
4、功能分析
if(a<=c){
}else if(c>=b){
} else if(a>b){
}else{}
5、返回值分析
返回x+1
6、还原成C函数
if(a<=c){
x=y-1;
}else if(c>=b){
x=z+1;
} else if(a>b){
x=y+z;
}else{
x=y+z-1;
}
return x+1;