zoukankan      html  css  js  c++  java
  • 二进制学习 wsample01a.exe

    有趣的二进制学习 wsample01a.exe

    这是一个基础的入门小程序,点击运行后发现弹出小框,Hello! Windows

     

    用ida静态分析程序,这一段是程序的主逻辑,也是全部逻辑:)

     

    可以看到程序只有一个分支test eax,eax是判断条件,直接决定程序的走向。

    从头来看

    String2 = 2012

    String1 = 获取输入的数据

    lstrcmpW(eax) 执行函数

    Caption “MESSAGE” 设置弹框标题

    进入test判断,分两种情况

    1、输入的是2012,if eax=0: ZF=1 jnz跳转不实现

    else:ZF=0 jnz跳转实现

    00401000  /$  55               push ebp

    00401001  |.  8BEC             mov ebp,esp

    00401003  |.  8B45 10          mov eax,[arg.3] 读取输入的内容给eax

    00401006  |.  68 04214000      push wsample0.00402104                   ; /2012

    0040100B  |.  50               push eax                                 ; |String1 = 00000001 ???

    0040100C  |.  FF15 00204000    call dword ptr ds:[<&KERNEL32.lstrcmpW>] ; lstrcmpW

    00401012  |.  6A 00            push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL

    00401014  |.  68 10214000      push wsample0.00402110                   ; |MESSAGE

    00401019  |.  85C0             test eax,eax                             ; |

    0040101B  |. /75 18            jnz short wsample0.00401035              ; |

    这个程序的逻辑已经理清了,接下来通过修改值来改变程序的走向。

    1、 修改ZF值

    test比较之后的关键跳转jnz,这个跳转有ZF控制,修改ZF值,改变跳转走向。

     

    2、 修改汇编跳转

    直接改变跳转语句,实现程序走向的改变

     

    嘿嘿,基本上差不多了。

  • 相关阅读:
    递归---Day29
    File类---Day28
    线程池---Day26
    微信公众号运营人员必备的软件工具网站合集
    消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
    itoa函数的递归实现(二级指针实现)
    二叉树——查找两个任意节点的最近祖先
    C#多线程(二)
    C#多线程(一)
    Websocket协议之php实现
  • 原文地址:https://www.cnblogs.com/zhaijiahui/p/7169315.html
Copyright © 2011-2022 走看看