zoukankan      html  css  js  c++  java
  • 逆向工程核心原理——学习笔记_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

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

        

  • 相关阅读:
    Unlocker(强力删除文件工具) 1.9.2 汉化绿色版
    js 用blob来显示存储资源,并清除其他资源
    js 创建音频声音
    兼容 线性渐变
    @font-face 兼容写法
    中国行政区域划分 爬虫工具
    前端中的spring实现
    css命名规范
    sass 备忘命令
    charles 破解命令
  • 原文地址:https://www.cnblogs.com/ha2ha2/p/7805801.html
Copyright © 2011-2022 走看看