C语言逆向(2)if语句与JCC
上一章节的学习后,通过本章节强化加深技能,顺便学习逆向if else结构代码的基础知识。
if语句的较为典型的标识为:
1 |
|
如果是带有else代码块的语句,即if else,则类似:
1 |
|
由于if语句与JCC关系密切,可进行查表法:JCC速查
下面通过三道练习题来练习逆向if与if else结构代码。
练习题1
分析以下函数:
1 |
|
分析参数
- 各寄存器没有从外部直接赋值
- 函数内使用了ebp+8 与 ebp+0C ,易知栈上有两个参数
分析局部变量
函数内仅使用ebp-4一处局部变量
分析全局变量
根据:
1 |
|
可知[0x004225c4]为一处全局变量
功能分析
1 |
|
可知该函数功能为:如果参数1小于等于参数2,则将参数2累加到全局变量中。
返回值分析
函数直到尾声也没有清空eax内的值,也未对eax的值进行更新,可知返回值为全局变量累加之前存储的数值
还原成C函数
1 |
|
练习题2
分析以下函数:
1 |
|
分析参数
- 各寄存器没有从外部直接赋值
- 函数内使用了ebp+8 与 ebp+0C ,易知栈上有两个参数
分析局部变量
函数内仅使用ebp-4与ebp-8两个局部变量
分析全局变量
根据:
1 |
|
可知[0x004225c4]为一处全局变量
分析功能
1 |
|
分析返回值
函数永远返回第一个参数
还原成C函数
1 |
|
练习题3
分析以下函数:
1 |
|
分析参数
函数内各条件分支判断条件,均使用了ebp + 0x8、epb + 0xc、ebp + 0x10,各寄存器均没有提前赋值,可知栈上有三个参数。
分析局部变量
函数内共有3个局部变量,分别是ebp - 4、ebp - 8 、ebp - c,初始值分别为0、1、2
分析全局变量
函数内未使用全局变量
分析功能
1 |
|
分析返回值
函数最终返回局部变量a,即ebp-4的值。
返回时会在a的基础上再加1。
还原成C函数
1 |
|
C语言逆向(2)if语句与JCC
http://dubhehub.github.io/blogs/2023121121101963755.html