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

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

        

  • 相关阅读:
    如何选择自动化测试框架
    Android Crash 定位
    Tomcat 高性能实现关键点
    测试用例 自动生成工具PICT与AllPairs
    《活出生命的意义》节选
    java设计模式-Iterator
    java设计模式-State模式
    java设计模式-Command模式
    java设计模式-桥接模式
    小橘灯
  • 原文地址:https://www.cnblogs.com/ha2ha2/p/7805801.html
Copyright © 2011-2022 走看看