逆向工程核心原理——学习笔记_abex' crackme#1

0x1:

调试前运行此程序

单击确定

单击确定

程序退出

 

0x2:

开始调试,使用OD载入该程序

 

 EP代码非常短,这是因为abex'crackme程序是使用汇编语言编写出来的可执行文件。

使用VC++ VC Delphi等开发工具编写程序时,除了自己编写的代码外,还有一部分启动函数是由编译器添加的,经过反编译后,代码看上去就变得非常复杂。但是如果直接使用汇编语言编写程序,汇编代码会直接变为反汇编代码。观察图中的代码可以看到,main()直接出先在EP中。

 

0x3:

分析代码

 

调用GetDriveType()函数

返回值(EAX)是3

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx

 

 

(0040101f 处的jmp指令 为无意义跳转 )

cmp eax,esi 

je short 0040103D 

比较eax和es1

如果两值相等,则跳转到40103D

如果两值不相等,则从401028继续执行

在40103D地址为消息框输出代码

 

跳转(到40103D)失败

执行00401028 处的 MessageBoxA()函数

终止进程 CALL ExitProcess

 

 

0x4:

破解:将00401026地址处的代码修改为 JMP 0040103D

选中右键复制到可执行文件,把修改后的代码保存为文件

 

ps:

栈的结构是先进后出,所以把参数压入栈时,只有按照逆序的方式压入,函数才能以正确的顺序接收到这些函数

若有在C语言中调用一个函数:    fun( a ,  b ,c)

则有    push c

      push b

    push a

    call fun

从右向左将参数压入栈,然后调用函数。 

    

转载于:https://www.cnblogs.com/ha2ha2/p/7805801.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值