BUUCTF [FlareOn6]Overlong1

查壳

拖进ida静态分析、

看到函数经过第一把算出Test直接调用MessageBoxA弹出一些内容

弹出字符应该就是byte_402008中的28个字符

跟进该函数

发现该函数中并不只28个字符,后边没打印的就是flag

查看对应汇编指令

看到入栈数量为1C,只需要修改该处数量大小即可完整弹出字符

(经尝试直接在ida中修改后效果不佳,我们直接在010中修改)

这里插入一下RVA-FOA的转换

ImageBase: 模块基址.程序一开始的地址.

VA: 全名virtualAddress 虚拟地址. 就是内存中虚拟地址. 例如 0x00401000

RVA: RV 地址0x00401000的RVA就是 0x1000. RVA = 虚拟地址-ImageBase

FOA: 文件偏移. 就是文件中所在的地址.

RVA和FOA的转换

PE文件中的节等模块加载到内存时,节的数据布局和文件中的内存布局基本保持不变。所以可以根据这个数据位置相对不变的特点来由RVA正确换算出到数据相对文件的偏移。即,每个节(section)中的数据的起始位置相对节的起始位置是不变的,不管节是在文件中还是被加载到内存中。

1.判断指定的RVA在那个节中 2.求得该节的起始地址RVA 3.求出偏移量Offset=RVA-节起始RVA 4.FOA = Offset+该节在磁盘中的起始地址

步骤:我们知道该指令在ida中的地址为 0x4011C9(也就是在内存中的地址)首先找到RVA VA-imagbasw=11C9  然后再找RVA位于那个节区 且相对偏移量是多少,这里直接用工具

11c9位于test字段 减去该段VA 得到相对偏移量(1c9) 加上该节在硬盘中的位置0x400为0x5C9,在010找到相对位置

对应的6A 1C就是 push 1C

修改1C为B0即可

再次运行

得到flag{I_a_M_t_h_e_e_n_C_o_D_i_n_g@flare-on.com}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值