滴水逆向三期笔记和作业-c语言总结1

第八课 c语言

分析这段代码的反编译

分析: 

有时候跟反汇编不一定要进函数看,有时候从上下文就能大概猜出函数的作用

第九课 c语言2

1、什么是裸函数

可以看到plus1()函数是可以正常运行且就算是空函数也会有开栈等操作

下图可以看到裸函数plus里面是一堆int 3(断点)

这时候如果我们自己在裸函数里面写上ret,程序就能正常运行

总结:

普通函数编译器会自动帮我们操作一些堆栈,但是裸函数什么都没有,全需要我们自己写

2、调用约定

前言

这是正常调用函数的四句汇编,可以看到正常都是两个参数从右到左入栈,调用约定就是约定这些东西

常见的三个调用约定:

__cdecl():一般c++默认的调用约定;从右至左入栈,采用外平栈

__stdcall():一般windows api默认的调用约定;从右至左入栈,采用内平栈

__fastcall():从右至左入栈,剩下前两个使用edx和ecx;如果只有两个参数,都是使用mov,则不用平衡堆栈,但是还是使用的内平栈

总结:

1、fastcall运行较快

2、看堆栈平衡的代码(ret 8)去 判断函数有几个参数不一定准确,可能调用约定不一样,或者fastcall他有两个参数是mov,和堆栈没关系

3、函数入口点

真正的函数起始的地方是mainCRTStartup()

不可被替换,他帮我们做了很多初始化操作

4、数据类型

整数类型

整数类型分有符号和无符号

总结:

1、其实内存中有无符号存储到内存里面都是一样的

2、在运算中需要注意

3、有符号数在计算时汇编指令就会使用有符号的比较指令,无符号的就会使用无符号的指令,一切都是写程序的人决定的,

浮点类型

0到23位存放科学计数法后小数位,23到31位存放指数-1

作业

2、

3、

第十课 c语言3

1.编码

ASCII

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

GB2312

2.局部变量和全局变量

下面代码输出结果为1111(x=11改变了全局的x)

第十一课 c语言4

1.内存图

2.逆向参数个数

3.简单逆向if代码

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

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

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

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

6、循环反汇编

for循环

while循环

do...while循环

作业

1、ebp+8,ebp+c

2、ebp-4

3、[004225c4]

4、如果[ebp+8]大于[ebp+c],则跳转到00401064,否则[ebp+c]与[ebp-4]相加,把结果放入全局变量[004225c4]

5、

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;
    }
}

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;
}

滴水逆向三期笔记与作业——02C语言——04 IF语句逆向分析下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值