【逆向工程核心原理】第六章——分析abex‘crackme #1

abex’crackme #1

先运行abex’crackme #1这个程序
在这里插入图片描述
意思是:“让我认为你的硬盘是个光驱。”
在这里插入图片描述
按"确定",显示"这不是一个光驱!"

开始调试

  • 一进来可以看懂mian函数的代码。说明不是用高级语言写的代码,高级语言一般会加启动函数。这我们认为用汇编语言写的
    在这里插入图片描述
    在这里插入图片描述

  • 按F8逐步执行,运行到40100E的时候点一下消息框 “确定”,之后继续F8执行
    在这里插入图片描述

  • 执行到0040101D时,我们可观察到:EAX=00000003,ESI=00401000
    在这里插入图片描述

  • INC INCREASE 自增1,ESI=00401001
    在这里插入图片描述

  • DEC DECREASE 自减1,EAX=00000002
    在这里插入图片描述

  • 在401024处,EAX=00000001,ESI=00401003
    在这里插入图片描述

  • CMP EAX,ESI,COMPARE 将EAX和ESI做对比,内部通过EAX-ESI完成,若两操作数相等,CMP=0,ZF=1.如果不等,ZF=0
    在这里插入图片描述

  • JE 40103D 有条件跳转。如果ZF=1.就跳转40103D,否则不跳转

分析及操作

我们希望是显示00401044这一地址的内容,也就希望跳转到40103D。有以下方法:

1.构造完全相等的寄存器

1>让EAX=ESI。更改前面的INC或DEC,使得EAX=ESI

2>在00401024处修改 Disassembly
如:CMP EAX,ESI改为CMP EAX,EAX

2.进行无条件跳转

按空格键修改指令,将JE替换成JMP
在这里插入图片描述

进行无条件跳转,跳转到第3个对话框:
在这里插入图片描述

按F9运行,成功弹出消息框:
在这里插入图片描述

将参数压入栈

C语言:
函数名(参数1,参数2 ,参数3,参数4)

汇编语言:
Push 参数4
Push 参数3
Push 参数2
Push 参数1
CALL 函数入口地址

比较C语言代码与汇编代码可以看到,函数调用时的参数顺序(正序)与参数入栈时的顺序(逆序)相反。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值