• 二进制学习 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、 修改汇编跳转

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

     

    嘿嘿,基本上差不多了。

  • 相关阅读:
    es6里面的arr方法
    for循环比较
    window.location各属性的值
    浏览器的缓存机制
    es6中的双箭头函数
    前端开发模拟数据------webpack-api-mocker
    对象的深拷贝和浅拷贝
    Web应用程序的安全问题
    this指向问题
    postman使用篇最全整理
  • 原文地址:https://www.cnblogs.com/zhaijiahui/p/7169315.html
Copyright © 2020-2023  润新知