滴水逆向--01-28 C语言04_IF语句逆向分析下
IF…ELSE…语句的反汇编判断

第一个 JCC 跳转到的地址前面有一个 jmp(并且 jump 是往下跳的),就可以确定是 if…else… 语句
案例分析 demo:

IF…ELSE IF…ELSE IF…多分支语句的反汇编判断

案例分析 demo:

课后作业
-
If…else

还原成 C :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17int G;
void func(int x, int y) {
int a = G;
int b = 2;
if (x >= y) b++;
if (x < y) {
G = b;
} else {
G = a + b;
}
}
int main() {
func(4, 5);
return 0;
} -
if…elseif…elseif…

还原成 C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20int func(int x, int y, int z) {
int a = 0;
int b = 1;
int c = 2;
if (x <= y) {
a = b - 1;
}
else if (y >= z) {
a = c + 1;
}
else if (x > z) {
a = b + c;
}
else {
a = b + c - 1;
}
return a + 1;
}通过这个例子,可以发现 lea 可以用来当计算器用
题目中的这一部分:
1
2
3
400401116 mov eax,dword ptr [ebp-0Ch]
00401119 mov ecx,dword ptr [ebp-8]
0040111C lea edx,[ecx+eax-1]
00401120 mov dword ptr [ebp-4],edxlea edx, [ecx+eax-1]实现了一条顶三条的工作量,如果用正常的算数指令,需要三行:1
2
3mov edx, eax
add edx, ecx
sub edx, 1但是 lea 一条就搞定了