17.x86游戏实战-深剖堆栈

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:16.x86游戏实战-汇编指令push pop pushad popad

到这就把逆向中常用的汇编指令写完了,接下来写一个c++程序,然后通过OD调试这个C++程序

本次目的是为了后面逆向的时候知道怎么找参数、返回值、栈怎么用栈是怎么回事,下方的例子很重要,也很简单,应该跟着看一遍就能懂,如果不懂看后面的逆向实战,看多了就懂了

c++代码,如下,下图中调用了一个MessageBoxA函数,这是为了定位我们main函数

鼠标放到项目上右击然后选属性然后设置一下优化禁用,上图add函数太简单,编译器的优化会把add函数删除

使用OD附加程序,如果先运行程序不能附加,那就把exe文件拖到OD里通过这样的方式来附加

如下图跳转到MessageBoxA函数中

然后在OD的弹框里点了确定之后,会来到下图位置,下图红框是一个jmp指令,它会调转到MessageBoxA函数里,直接双击下图红框位置就可以跳过去

OD跳转到MessageBoxA函数中之后在下图红框位置打断点

MessageBoxA函数就是弹个框,如下图红框里的东西

如下图打了断点之后点确定

点了确定就会断点住

然后选取消断点,然后单步步过,这里它与上方的地址不一样,是因为程序重启了

然后就能看到add函数了,如下图红框,怎么就确认下图红框是add函数?

双击点call就能跳转到函数位置,如下图可以看到函数的名字,很显然不是add函数,它是一个检查ESP的函数

然后双击到了上图位置,再单机下图红框位置的C就能回去

add函数有两个参数a、b,如下图红框,参数会给push到栈里

执行完push

然后如下图红框,当前断点的下一行是0x141D17,也就是下图红框的位置

在调用add函数进入add函数之前栈的情况

然后按F7,单步步入进add函数中,这里直接按F8,让它jmp(跳转)过去

F8之后来到了add函数中

现在栈的情况

然后如下图,执行了push ebp 和 mov ebp,esp,ebp它的值永远指向栈底(栈里第一个数据),esp永远指向栈顶(栈里最后一个数据),下图的操作是把栈底改了,一个函数一个栈底

然后执行sub esp,0C0 这个栈它的内存地址是从大到小的使用,减就是加,加就是减,它是反着的

现在栈的情况

然后继续往下走,有三个push

然后下图红框的俩函数都是检查用的,编译器给加的,不用管它

然后来到下图红框位置,ebp是栈底,栈底的附近是上一个函数的栈里的数据,也就是main函数里的数据

右击栈选择转到ebp

然后下图红框的代码,ebp+8和ebp+c它们的值,也就是给add函数传入的4和6

然后执行

然后执行add指令

然后add函数就结束了,接下来就是恢复栈的操作

然后add函数的返回值,如下图红框,放在eax寄存器中,一般返回值都会放在eax寄存器中

然后add函数结束返回,看到还有个add esp, 8这样的代码,这是为了给参数平栈,调用add函数是push了两个值,add esp,8就是为了把这两个值从栈里删除

然后执行add esp, 8,这里的删除并不是真的删除,只是修改了栈顶,通过把修改最后一个数据的指向来实现的删除栈里的数据(后面往栈里添加数据直接覆盖),然后这里的add esp,8叫外平栈,还有内平栈,内平栈是在add函数中做从栈里删除参数的操作,后面遇到了会写

 c++代码

#include <iostream>
#include "Windows.h"

int add(int a, int b) {
	return a + b;
}

int main()
{
	MessageBoxA(0,0,0,0);
	int a = add(4, 6);
	printf("%d", a);
}

 

  • 49
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值