如果要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

本文转自 h2appy  51CTO博客,原文链接:http://blog.51cto.com/h2appy/1564887,如需转载请自行联系原作者

nop掉call指令后,如何保持堆栈平衡相关推荐

  1. 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC

    本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...

  2. 堆栈平衡:估计这是最详细的讲解堆栈平衡的了 vc++6.0

    转自:https://blog.csdn.net/lixiangminghate/article/details/43195717 #include <stdio.h> #include ...

  3. IDA pro 如何nop 掉关键点

    这个需求呢,类似于OD 中的直接nop,碰到各种奇葩的反调试,暴力nop 掉最省事了. 那么IDA pro中的nop 在哪里呢? 这个需要好好找一找,下面贴出图片 NOP 功能 老版本的IDA NOP ...

  4. ESP定律和堆栈平衡

    一.什么是ESP 二. 例说ESP与OD的对比 三. 正式开讲ESP定律 四. ESP定律的运行栗子 五. 堆栈平衡讲解 六.ESP定律的变形用法

  5. 汇编达人视频学习6(汇编眼中的函数、CALL指令执行函数、堆栈传参、堆栈平衡、外平栈、内平栈)

    title: 汇编达人视频学习6 date: 2021年8月4日 15点15分 tags: 汇编达人 categories: 汇编达人 21.汇编眼中的函数 1.什么是函数 函数就是一系列指令的集合, ...

  6. 从汇编角度理解 ebpesp 寄存器、函数调用过程、函数参数传递以及堆栈平衡

    关于函数参数的传递及堆栈指针的变化,一直缺乏系统的认识和了解,各种博客也只是片面的讲解某个局部知识点,并没有全局的把握和对栈的深刻理解.本文试图从汇编以及整体上,讲解函数调用时,堆栈的变化,以及到底是 ...

  7. 在地址随机化的操作系统环境下的堆栈平衡

    最近学习汇编以及各种和汇编有关系的课,在看汇编代码的时候发现各种对esp啊ebp的操作,最后的目的很多是为了堆栈平衡,因为如果函数调用之前和之后的堆栈不一致,就可能导致找不到数据或者找错数据.然后就想 ...

  8. 调用函数后的堆栈平衡

    对于__stdcall调用方式,调用函数的逻辑一般如下 //Caller;prolog push xx push ... call callee add esp x ; 恢复堆栈 ;epilog 一般 ...

  9. 浅谈安卓逆向月报(1)- 抖音 - ida - native层F5伪代码堆栈平衡修复

    这章主要聊聊如何修复可以F5伪代码 以最新的抖音840的so为例,这边仅仅说下如何修复F5,解决"positive sp value has been found"错误提示. 后续 ...

  10. WinRAR x64 v5.5中文版去广告过程

    之前用的别人破解的WinRAR,最近更新到5.5后,居然弹出了广告,并且是在有注册文件的情况下.这一点就说明其简体中文的代理很黑,即便对于注册用户也想弹出广告赚取流量费.最近都在苦逼的搞开发,好久没玩 ...

最新文章

  1. .NET Core 微服务学习与实践系列文章目录索引(2019版)
  2. java 求向量的均值,标准数组——向量
  3. 电大计算机网考选择题多少分,[2017年电大]电大计算机网考选择题题库精选汇总.doc...
  4. MEncoder的基础用法—6.6. 改变电影大小
  5. MVC模式在Java web 应用程序的实现
  6. leetcode-155-最小栈
  7. PHP将PPT文件转成图片
  8. 数组中元素与字节的关系
  9. canva怎么组合_教你使用Canvas合成图片
  10. JavaScript实现逆波兰式
  11. 《羊了个羊》还在火!创始人被制成展牌,竟成母校招生“活广告”?
  12. 列出对象属性,for(var i in obj)
  13. steps函数--参数意思和用法
  14. 计算机cmos参数的设置,CMOS常见的设置方法
  15. 原生JS实现韩雪冬轮播图
  16. 霍尔效应传感器的5个重要应用
  17. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
  18. 学生信息管理系统——删除学生信息(Java+web综合)
  19. 两台Exadata搭建RAC+DG
  20. 中国省份及其地级市整理JSON版(2015-08-23)

热门文章

  1. VOC 2007数据集结构
  2. m3u8文件下载及合并
  3. Mujoco中旋转轴的定义
  4. yml在线格式转换工具
  5. WinRAR4.11激活
  6. 德乐SM2258XT固态硬盘DERLER T-1不认盘量产修复工具
  7. InstallShield Crack,虚拟应用程序构建可靠
  8. android checkboxpreference属性,android – 具有自己布局的CheckBoxPreference
  9. GPS模块运用: GPS轨迹记录
  10. 报表生成器FastReport .Net基本信息介绍