首页 > 其他分享 >《逆向工程核心原理》学习笔记3

《逆向工程核心原理》学习笔记3

时间:2023-03-09 15:34:46浏览次数:33  
标签:逆向 ESP E5% 栈顶 笔记 修改 eax 原理

《逆向工程核心原理》学习笔记3

http://blog.iz4.cc/note/2021/11/%E3%80%8A%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B%E6%A0%B8%E5%BF%83%E5%8E%9F%E7%90%86%E3%80%8B%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B03/

逆向工程核心原理第五章

image-20211122201000078

栈的作用
  • 暂时保存函数内的局部变量
  • 调用函数时传递参数
  • 保存函数返回后的地址
栈的特征
  • 栈的内存结果如上图所示,栈底==>栈顶 是从高地址到低地址扩展。一个进程中,栈顶指针(ESP)初始状态指向栈底端。当执行PUSH命令将数据压入栈时,栈顶指针就会上移到栈顶端,反之当执行POP命令从栈中弹出数据,若栈为空,则栈顶指针重新移动到栈的底端。

  • 下面测试栈实际是怎样运作的,用Ollydbg打开任意一个exe,这里还是用之前的LittleEndian.exe为例,在main函数起始位置下断点,运行后如下图,可以看到初始时ESP值为"006FFCF8"

    image-20211122202044385

  • 按空格修改汇编指令为push 100,F7运行,然后查看ESP的变化,从下图的寄存器窗口可以看到ESP的值变为了"006FFCF4",比原来少了4个字节,并且从右下角的栈窗口可以看到006FFCF4存放的值为100,也就是我们压入栈的数据

    截屏2021-11-22 下午8.24.35

  • 按空格修改汇编指令为pop eax,F7运行,如下图,可以看到ESP的值变回了"006FFCF8",而且EAX的值变成了100,这说明pop eax指令含义是从栈弹出数据并赋值给EAX。继续观察右下角的栈窗口,可以看到光标停在了"006FFCF8",代表栈顶指针指向该位置,而且可以看到"006FFCF4"的值仍为4,说明pop指令并不会去修改数据的值,只是移动栈顶指针。

    截屏2021-11-22 下午8.29.47


逆向工程核心原理第6章

分析abex' crackme1
  • 首先运行crackme,大致了解软件,运行后如下图,只有一个弹窗

    image-20211122214315722

  • 点击确定后弹出另外一个窗

    image-20211122214510630

  • 从弹窗提示的内容可以知道,需要做的是让软件将我们的硬盘识别为CD-ROM

  • 接下来,用Ollydbg打开crackme

  • 从截图可以看到,跟我们之前自己编译得到的HelloWrold.exe不同,软件的EP代码非常短,这是因为这个crackme是使用汇编语言编写的

    image-20211122214725326

  • 从图中代码,基本可以知道,软件运行时会获取我们的C盘的盘类型:CD-ROM or Other,我们需要做的是让软件识别为 CD-ROM

    image-20211122215044068

  • 修改方式有多种,例如:可以修改00401026地址处代码,将je short 0040103D改为jmp short 0040103D,这里"je"代表"jump if equal","je"改为"jmp"即无条件跳转至地址"0040103D"处,修改后运行,点确定后可以看到弹出跟最初不一样的窗口,破解成功

    image-20211122215508393

  • 还可以将cmp eax, esi的前几行汇编代码修改为mov eax, esi,这样在程序比较eax和esi值之前,我们让它们值变为一样,这样也可以达到跟上面一样的效果

  •  如何保存修改????copy to executable-->弹窗-->save file!
  •  

     然后即可本地保存运行了!!!

标签:逆向,ESP,E5%,栈顶,笔记,修改,eax,原理
From: https://www.cnblogs.com/bonelee/p/17198589.html

相关文章

  • 【学习总结】计算机组成原理
    参考笔记:CSDN:从前慢-计算机组成原理:B站王道考研视频下发现的CSDN:从前慢-操作系统END......
  • 94某书参数逆向
    就这里,打断点开始扣(过程就不详细描述了)扣完补补补完成完美解密用execjs调用:解决......
  • Flutter 笔记
    FlutterFlutter核心原理底层绘制采用OpenGL,调用原生绘图接口,实现高性能什么是UI框架?由于操作系统直接操作API来绘制图片十分繁琐,将操作系统原生API封装在一个编程框架......
  • 论文笔记(一):基于特征动态对齐和细化的VI图像融合--平移鲁棒融合
    文章标题Featuredynamicalignmentandrefinementforinfrared–visibleimagefusion:TranslationrobustfusionHuafengLi,云南昆明科技大学;JunzhiZhao,云南......
  • 【笔记】docker compose安装
    1、查看当前最新dockercompose发行版本https://github.com/docker/compose/releases2、运行如下命令,下载DockerCompose的当前稳定版本sudocurl-L"https://githu......
  • 【笔记】docker镜像相关命令
    1.显示当前docker下的所有镜像dockerimages2.从远程仓库查看指定名称的镜像dockersearch镜像名只列出N个镜像,默认25个dockersearch--limitN镜像名3.下载镜......
  • 【笔记】docker服务启停、容器删除相关命令
    一、docker服务启停命令1.1.启动dockersystemctlstartdocker1.2.关闭dockersystemctlstopdocker1.3.重启dockersystemctlrestartdocker1.4.查看docker运......
  • 【笔记】nginx配置
    一、创建Nginx运行使用的用户1.1创建system用户组/usr/sbin/groupaddsystem1.2创建用户nginx/usr/sbin/useradd-gsystemnginx1.3查看默认配置文件cat/usr/local......
  • 【WinForm】 自学笔记一:项目创建以及基本操作
    这两年C#客户端开发比较火,有很多WinForm以及WPF的开发需求。为了跟上时代发展的步伐,开始学习相关的知识。笔记内容以个人实际学习情况为主,记录基本情况,可能不够详细......
  • R语言学习笔记二
    ggplot2cookbook可视化工具htmlwidgets地图leaflet时间序列dygraph网络networkD3带R接口的javascript可视化工具包plotly所有图形工具的完整列表#接下来所使用......