nop掉call指令后,如何保持堆栈平衡
如果要nop掉的是一个call指令,如何保持堆栈平衡呢?
只要按ENTER“跟随”进入被call的函数,看一下函数的返回指令,如果是retn,就直接用Nop替换;如果是retn XXX,就把call替换成为add esp, XXX;
就这样。具体请查阅指令手册关于retn指令的说明。 我可能要气疯大家了,我也没脾气了,大家要生气的自便~!很菜的问题! 达文西,对不住您!
我用OD1加载一个OD2,F9运行起OD2,然后查看句柄,输入bp SetWindowTextA [esp+4]==003C0152下断,断在下面的位置:
代码:
004779DB |. E8 4CF20200 call 复件_吾?004A6C2C 004779E0 |. 83C4 10 add esp,10004779E3 |. 8D85 E0FEFFFF lea eax,[local.72]004779E9 |. 50 push eax ; /Text004779EA |. 8B15 7C3B4D00 mov edx,dword ptr ds:[4D3B7C] ; | 004779F0 |. 52 push edx ; |hWnd => 003C0152 ('吾爱破解 - [LCG]',class='1212121')004779F1 |. E8 C87B0300 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA004779F6 |. C705 88574D00>mov dword ptr ds:[4D5788],1 00477A00 |. 33C9 xor ecx,ecx
这里可以直接修改004779E9 push eax;eax指向“吾爱破解”地址003C0152,
比如修改成004779E9 push 003C0152;
(没错误吧!?)
还有直接修改 关键句:call <jmp.&USER32.SetWindowTextA> ,把这个call给NOP掉;
我看了一下004779E3 lea eax,[local.72]这句,汇编中显示的是lea eax,dword ptr ss:[ebp- 120],则004779E9 push eax就应该是push dword ptr ss:[ebp-120]吧(应该没错误吧!?)按照堆 栈平衡方法,是不是要修改call <jmp.&USER32.SetWindowTextA> 为sun esp,120?或者是 别的,我觉得不对劲,因为有:
push eax
push edx
就要有
pop edx
pop eax
这样才保持堆栈平衡!(我在发表愚见了)
另外,理解
引用:
只要按Enter“跟随”进入被call的函数,看一下函数的返回指令
这句,我是觉得他说的call是过程函数,而不是api函数的调用call。我先在call <jmp.&USER32.SetWindowTextA>按Enter“跟随”,进入下面一段代码:
代码:
004AF5BE $- FF25 6CD95000 jmp dword ptr ds:[<&USER32.SetWindowText>; user32.SetWindowTextA004AF5C4 $- FF25 70D95000 jmp dword ptr ds:[<&USER32.ShowCaret>] ; user32.ShowCaret 004AF5CA $- FF25 74D95000 jmp dword ptr ds:[<&USER32.ShowScrollBar>; user32.ShowScrollBar 004AF5D0 $- FF25 78D95000 jmp dword ptr ds:[<&USER32.ShowWindow>] ; user32.ShowWindow
然后在jmp dword ptr ds:[<&USER32.SetWindowText>处按Enter“跟随”,到下面一段代码:
代码:
77D17EEB > 8B4C24 04 mov ecx,dword ptr ss:[esp+4] 77D17EEF 56 push esi 77D17EF0 E8 2FBBFFFF call user32.77D13A24 77D17EF5 8BF0 mov esi,eax 77D17EF7 85F6 test esi,esi 77D17EF9 74 23 je short user32.77D17F1E 77D17EFB 56 push esi 77D17EFC E8 E8D9FFFF call user32.77D158E9 77D17F01 85C0 test eax,eax 77D17F03 6A 01 push 1 77D17F05 FF7424 10 push dword ptr ss:[esp+10] 77D17F09 6A 00 push 0 77D17F0B 6A 0C push 0C 77D17F0D 56 push esi 77D17F0E 74 12 je short user32.77D17F22 77D17F10 E8 86D4FFFF call user32.77D1539B 77D17F15 33C9 xor ecx,ecx 77D17F17 85C0 test eax,eax 77D17F19 0F9DC1 setge cl 77D17F1C 8BC1 mov eax,ecx 77D17F1E 5E pop esi77D17F1F C2 0800 retn 8
可以看到最后的是retn 8,所以我直接修改call <jmp.&USER32.SetWindowTextA>为add esp,8。
我上面的思路很乱来,中心问题就是一个,怎么进入被call的函数USER32.SetWindowTextA,并找到函数USER32.SetWindowTextA的返回指令。
另外,要看一下被call函数的汇编代码,如果代码中有对esp操作的语句,比如add esp, 4,最后是retn 2,那么用NOP替换这个call时,要用add esp 6
nop掉call指令后,如何保持堆栈平衡相关推荐
- 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC
本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...
- 堆栈平衡:估计这是最详细的讲解堆栈平衡的了 vc++6.0
转自:https://blog.csdn.net/lixiangminghate/article/details/43195717 #include <stdio.h> #include ...
- IDA pro 如何nop 掉关键点
这个需求呢,类似于OD 中的直接nop,碰到各种奇葩的反调试,暴力nop 掉最省事了. 那么IDA pro中的nop 在哪里呢? 这个需要好好找一找,下面贴出图片 NOP 功能 老版本的IDA NOP ...
- ESP定律和堆栈平衡
一.什么是ESP 二. 例说ESP与OD的对比 三. 正式开讲ESP定律 四. ESP定律的运行栗子 五. 堆栈平衡讲解 六.ESP定律的变形用法
- 汇编达人视频学习6(汇编眼中的函数、CALL指令执行函数、堆栈传参、堆栈平衡、外平栈、内平栈)
title: 汇编达人视频学习6 date: 2021年8月4日 15点15分 tags: 汇编达人 categories: 汇编达人 21.汇编眼中的函数 1.什么是函数 函数就是一系列指令的集合, ...
- 从汇编角度理解 ebpesp 寄存器、函数调用过程、函数参数传递以及堆栈平衡
关于函数参数的传递及堆栈指针的变化,一直缺乏系统的认识和了解,各种博客也只是片面的讲解某个局部知识点,并没有全局的把握和对栈的深刻理解.本文试图从汇编以及整体上,讲解函数调用时,堆栈的变化,以及到底是 ...
- 在地址随机化的操作系统环境下的堆栈平衡
最近学习汇编以及各种和汇编有关系的课,在看汇编代码的时候发现各种对esp啊ebp的操作,最后的目的很多是为了堆栈平衡,因为如果函数调用之前和之后的堆栈不一致,就可能导致找不到数据或者找错数据.然后就想 ...
- 调用函数后的堆栈平衡
对于__stdcall调用方式,调用函数的逻辑一般如下 //Caller;prolog push xx push ... call callee add esp x ; 恢复堆栈 ;epilog 一般 ...
- 浅谈安卓逆向月报(1)- 抖音 - ida - native层F5伪代码堆栈平衡修复
这章主要聊聊如何修复可以F5伪代码 以最新的抖音840的so为例,这边仅仅说下如何修复F5,解决"positive sp value has been found"错误提示. 后续 ...
- WinRAR x64 v5.5中文版去广告过程
之前用的别人破解的WinRAR,最近更新到5.5后,居然弹出了广告,并且是在有注册文件的情况下.这一点就说明其简体中文的代理很黑,即便对于注册用户也想弹出广告赚取流量费.最近都在苦逼的搞开发,好久没玩 ...
最新文章
- .NET Core 微服务学习与实践系列文章目录索引(2019版)
- java 求向量的均值,标准数组——向量
- 电大计算机网考选择题多少分,[2017年电大]电大计算机网考选择题题库精选汇总.doc...
- MEncoder的基础用法—6.6. 改变电影大小
- MVC模式在Java web 应用程序的实现
- leetcode-155-最小栈
- PHP将PPT文件转成图片
- 数组中元素与字节的关系
- canva怎么组合_教你使用Canvas合成图片
- JavaScript实现逆波兰式
- 《羊了个羊》还在火!创始人被制成展牌,竟成母校招生“活广告”?
- 列出对象属性,for(var i in obj)
- steps函数--参数意思和用法
- 计算机cmos参数的设置,CMOS常见的设置方法
- 原生JS实现韩雪冬轮播图
- 霍尔效应传感器的5个重要应用
- 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
- 学生信息管理系统——删除学生信息(Java+web综合)
- 两台Exadata搭建RAC+DG
- 中国省份及其地级市整理JSON版(2015-08-23)