滴水逆向笔记系列-c语言总结2-10.变量-11.if逆向-12.正向基础

第十课 c语言3

1.编码

ASCII

标准的ASCII编码只需要七位,第八位在拓展ASCII编码使用
image.png
image.png

GB2312

image.png
image.png

2.局部变量和全局变量

下面代码输出结果为1111(x=11改变了全局的x)
image.png
452136177.jpg
452138067.jpg

第十一课 c语言4

1.内存图

image.png

2.逆向参数个数

472327817.jpg

3.简单逆向if代码

472363432.jpg

4.if...else...反汇编判断

image.png

  • 跳转执行一部分代码,不跳转则执行另外一部分代码
  • 第一个jxx命令跳转的地址前面有一个jmp,则可以判断是if...else...语句

练习示例

image.png

5.if..else if....else if..反编译判断

image.png

  • 当每个jxx命令跳转指令要跳转的地址前面都有jmp命令
  • 这些jmp指令跳转的地址都是一样的
  • 如果某个分支没有条件判断,则为else部分

6、循环反汇编

for循环

image.png

while循环

image.png

do...while循环

image.png

作业

image.png
image.png

1、ebp+8,ebp+c
2、ebp-4
3、[004225c4]
4、如果[ebp+8]大于[ebp+c],则跳转到00401064,否则[ebp+c]与[ebp-4]相加,把结果放入全局变量[004225c4]
5、
image.png
1、分析参数
[ebp+8]a、[ebp+c]b
2、分析局部变量
[ebp-4]x、[ebp-8]y
3、分析全局变量
[004225c4]c
4、功能分析
x=c,y=2,若a>=b则y++,若a>=b则c=x+y,则否则c=y,
5、返回值分析
全局变量被修改
6、还原成c

int c;
int function(int x,int y)
{
	int x = c;
    int y = 2;
    if(a>=b)
    {
        y++;
    }
    if(a>=b)
    {
        c = x+y;
    }
    else
    {
        c = y;
    }
}

image.png
1、分析参数
[ebp+8]x、[ebp+c]y、[ebp+10]i
2、分析局部变量
[ebp-4]a、[ebp-8]b、[ebp-c]c
3、分析全局变量

4、功能分析
a=0,b=1,c=2,若x<=y,a=b-1且跳到00401123,否则(若y>=i则a=c+1且跳转00401123,否则(若x>i则a=b+c且跳转00401123,否则))最后00401123地址是return a+1
5、返回值分析

6、还原成c

int function(int x , int y , int i)
{
	int a = 0;
    int b = 1;
    int c = 2;
    if(x<=y)
    {
        a=b-1;
    }
    else if(y>=i)
    {
        a = c + 1;
    }
    else if(x>i)
    {
        a = b + c;
    }
    else
    {
        a = b + c - 1;
    }
    return a + 1;
}

http://lihuaxi.xjx100.cn/news/1334730.html?action=onClick

第十二课 c语言5(正向基础)

1.类型转换(movsx,movzx)

小转大

image.png

  • movsx使用符号位先填上,再把数据传过去
  • movzx使用0先填上,再把数据传过去

image.png
image.png
image.png
image.png
image.png
image.png

大转小

image.png
高位会丢失

表达式

  • 运算中表达式会以最大宽度存放数据

image.png

  • 当表达式同时存在有符号数和无符号数时,表达式的结构将转换成无符号数

image.png

疑点

image.pngimage.pngimage.png
海哥这里讲乱了,是因为%d是有符号输出,想要输出无符号要用%u

2.循环

  • for循环执行顺序

image.png
注:循环变量放在里面和外面的区别
image.png

作业

尝试运行后解释其运行结果
1、
image.png
从ebp-14开始存,到ebp-4是数组最后一个值,越界一个数组将存到ebp,越界两个数组将存到ebp+4,也就是eip的地址
-331353660.jpg
2、
image.png

image.png
2、image.png

posted @ 2024-03-14 13:25  小新07  阅读(34)  评论(0编辑  收藏  举报