• 逆向工程核心原理——学习笔记_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

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

        

  • 相关阅读:
    VSTO安装部署(完美解决XP+2007)
    尝试Office 2003 VSTO的开发、部署
    数据容量大小
    Nginx 学习
    Windows环境下使用Nginx搭建负载均衡
    HTML块元素与内联元素嵌套规则
    js中try、catch、finally的执行规则
    总结下var、let 和 const 的区别
    解决window.onload延迟加载问题
    移动端meta设置大全
  • 原文地址:https://www.cnblogs.com/ha2ha2/p/7805801.html
Copyright © 2020-2023  润新知