攻防世界:logmein 关于地址的探究

攻防世界

下载文件!首先先放到exeinfope(我目前使用这个的主要作用是查看,是否有壳,以及64/32位数,文件是exe还是elf)。

可以看到,无壳,是linux下的elf,如果要调试得先,打开linux的linux_server64服务我今天还搞了32位的,因为64位的linux默认不安装32位的库什么的。要自己配置。然后直接用IDE打开

里面看看function name(函数部分,右上角),发现函数很少,都不用搜索。直接看这个main函数。这个逻辑比较简单,有一定c语言代码基础的都看得懂,这边解释一下这个,__int64,在windows程序里面优先使用的(在linux和mac是long long或int64_t)是有符号数(无符号的很明显unsigned __int64 有个unsigned),8字节数,qword(quad word)这个word是字(不是字节)一个字=两个字节。

就不细究逻辑了,因为很简单,我们直接看关键部分

不知道,你们是什么版本的,我一开始做的时候,压根就没想那么多,直接就打算用python脚本跑答案(这种东西还是python方便啊,c真的好麻烦)。结果想也知道那个V8是越界了的哪有V8[-8]这是什么玩意啊。后面就去找别人的wp

如果你运气好,出生就在罗马呢,可以看到,这个关键代码是不一样的,我还以为我的IDA出问题了,我才用了不到3天啊。结果就很有意思,这两种都是对的。


首先,和c语言一样,这些东西呢要入栈,入栈的规则就是,从高地址到低地址开始分布,后面出栈就是低地址到高地址出去,看这个V7是先入栈8个字节,后面就是V8进去,

可以看到,我这个图片那个0028是V7的首地址,后面过了8个字节才到0020,这是那个V8的地址。所以,我之前的V8[-8]其实就是指向的V7的地址。所以逻辑就没什么问题了

这里可以看到,我们给V7加了一个逆序。至于为什么这样,依旧是和内存有关

像这种V7这样的,进入的是栈空间,会出现要逆序的主要原因就是,这里面V7[0]!=“e”,而是等于“h”,所以在原文按 i 引用V7会出现要逆序的问题。这就和栈的特性有关了,像很多数组一样的信息,你把鼠标放在上面就会有char[],int[]这种出现,还可以在内存中找到他的值在哪里Hex View-1这里面,这里面的值基本是正常顺序,不需要逆序的,你可以在这里面寻找。

在栈中的值就不一样了,到栈的地址来看,定义变量的时候,也就是入栈,是从高地址到低地址开始的,不过这种V7的赋值就像是数组赋值一样,在小端里面,数组赋值是从V7[0]才是低地址,随着索引的增加,地址也是依次往上增加的。所以在内存中,这个看上去应该是高地址的“e”其实是整个数组里面地址最小的存在,再结合,运算逻辑中也是从V7[0]开始配对的,所以,实际的配对顺序就是“harambe”

然后得到结果RC3-2016-X0RISGUD

其实也可以总结一样,大多数需要逆序的情况大多数据是在栈中的,位置在stack,而那些数组和字符串什么的,可以直接在Hex View-1里面找到,这些基本上是顺序的,就这两个位置需要注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值