吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 824|回复: 2
收起左侧

[求助] ida反汇编堆栈不平衡导致无法分析如何手动修复堆栈平衡

[复制链接]
xiaoxiaoY520 发表于 2024-1-30 16:15
起因:想了解smc是什么,找了个2020的ctf题jocker,看了网上的资料,搜到一篇比较顺眼的博客(https://blog.csdn.net/CSNN2019/article/details/115328038),大致看了一下后准备自己看看,PE文件拖进IDA后并没有他文中所说的跳错误,ida分析堆栈不平衡的错误倒是存在,但偏移有点区别,照他文中进行修复貌似不对,偏移量不同,不知是否是ida版本不同导致,我是ida7.7的。
图片.png

问题:网上搜了很多文章都是说alt+k修改ret最近的call,直到ret的sp偏移为0,但是行不通,我觉得并没有从原理上讲如何修复,纯粹是某种情况适用(也可能是我没有理解,见识少,刚遇到这个问题)。显示出ida的栈偏移值,有一块地方不是很理解,如下图:
图片.png
这一块不是对齐后创建新栈帧吗,此时esp和ebp不是在同一个地方,然后.text:00401733 004 51     push    ecx才是sp-4?为什么在text:00401731 004 89 E5     mov     ebp, esp处他就已经偏移4了,是我的ida有问题还是我理解错了,望解答。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

飘零星夜 发表于 2024-1-30 16:48
本帖最后由 飘零星夜 于 2024-1-30 16:53 编辑

我手动改,在 return 的前一条语句用 IDC 命令 add_auto_stkpnt  :
add_auto_stkpnt  

Add automatical SP register change point
     func_ea  - function start
     ea       - linear address where SP changes
                usually this is the end of the instruction which
                modifies the stack pointer (cmd.ea+cmd.size)
     delta    - difference between old and new values of SP
returns: 1-ok, 0-failed

success add_auto_stkpnt(func_ea, ea, sval_t delta);

================================================================
你的图2. 前面显示的是 当前指令执行之前,sp的压栈情况:
push 就是 压栈, -4了,所以下一条就是4, //但是此时显示的是还没执行指令的sp。 所以是 000
后面又来一次 push ,然后 push的下一条 前面就是8.
 楼主| xiaoxiaoY520 发表于 2024-1-31 10:08
飘零星夜 发表于 2024-1-30 16:48
我手动改,在 return 的前一条语句用 IDC 命令 add_auto_stkpnt  :
add_auto_stkpnt  

了解了,这边显示的是新栈帧的相对偏移。昨天晚上我试了一下,应该是我ida也有问题,换了其他ida偏移就正常了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 02:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表