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

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

嘿嘿,基本上差不多了。

二进制学习 wsample01a.exe的更多相关文章

  1. 二进制学习——Blob,ArrayBuffer、File、FileReader和FormData的区别

    前言: Blob.ArrayBuffer.File.fileReader.formData这些名词总是经常看到,知道一点又好像不知道,像是同一个东西好像又不是,总是模模糊糊,最近终于下决心要弄清楚. ...

  2. C++学习(四)(C语言部分)之 二进制

    二进制学习时的笔记(其实也没什么用,留着给自己看的) 二进制简介只有 0 1 优点:1.二进制状态简单2.可靠性.稳定性高3.运算规则简单,简化设计4.通用性强 二进制计算正数二进制十进制转二进制(除 ...

  3. Python 学习笔记 编程基础汇总000

    编程基础知识汇总000 1.计算机结构 2.编程语言分类 3.字符编码由来 计算机结构 计算机组成五大部件: 控制器.运算器.存储器.输入.输出 控制器(Controler):对程序规定的控制信息进行 ...

  4. pwn学习日记Day18 《程序员的自我修养》读书笔记

    知识杂项 obj文件:当前源代码编译成二进制目标文件 exe文件:将.obj文件与库文件.lib等文件链接生成的可执行文件 一个现代编译器的主要工作流程如下: 源程序(source code)→ 预处 ...

  5. COM编程概述

    所谓COM,英文为Componet Object Model,中文为组件对象模型(其实这种解释只有在考试卷上才具有一点实际意义). [1]为什么需要COM? COM是为了解决OLE问题而产生的.COM ...

  6. COM 编程基础

    DirectX 采用了 COM 标准.而 DirectShow 是一套完全基于 COM 的应用系统.要想深入学习 DirectShow,掌握一些 COM 编程的基础知识是必不可少的. 一.COM 是什 ...

  7. NoSql之MongoDB--Windows下数据库配置及初步使用

    1.NoSql简介 NoSql(Not Only Sql)指的是非关系型的数据库.下一代数据库主要解决几个要点:非关系型的.分布式的.开源的.水平可扩展的.原始的目的是为了大规模web应用,这场 运动 ...

  8. VC++源文件编码

    目录 第1章源代码文件    1 1.1 研究思路    1 1.2 实验结果    3 1.3 #pragma setlocale    4 1.4 /source-charset    5 1.5 ...

  9. 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

    32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...

随机推荐

  1. 遍历List过程中同时修改

    public static void Main() { List<int> list = new List<int>(); ,,,,,,,,,}; list.AddRange( ...

  2. marks学习2

    控件的大小单位用dp  控件的高度和宽度 sp字体的单位 控件的字体的大小.可缩放字体. 内边距 padding控件的边缘到控件内荣的距离

  3. HTML学习笔记Day13

    一.HTML+CSS代码实现三角形 (一)transparent透明属性实现代码编写三角 <!DOCTYPE html> <html> <head> <met ...

  4. Vue(基础七)_webpack使用工具(下)

    一.前言  1.webpack.config文件配置                                          2.webpack打包css文件                 ...

  5. OpenStack的基础原理

    OpenStack的基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其 ...

  6. Windows server 2008 R2远程桌面3389端口号修改

    修改 Windows 服务器默认远程端口 https://help.aliyun.com/document_detail/51644.html?spm=5176.doc51644.6.784.4iAH ...

  7. nginx 限速最容易理解的说明

    nginx 限速研究汇报 写在前面 这两天服务器带宽爆了,情况如下图: 出于降低带宽峰值的原因,我开始各种疯狂的研究nginx限速.下面是我研究过程中的心得!(花了好几个小时的时间写的人生第一篇技术类 ...

  8. JAVA核心技术I---JAVA基础知识(类的继承)

    一:基本概念同C++一致 二:继承演示 .将共同点提取出来,即形成了父类/基类/超类 –Parent class/Base class/Super class .而其他类则自动成为子类/派生类 –Ch ...

  9. python 面向对象(三)类与类之间的关系 初始化方法一些类

    ###################总结################# 面试的时候 让写python一些特殊方法 __init__ 创建对象的时候初始化 __new__对象实例化调用第一个方法 ...

  10. UVA - 11732 "strcmp()" Anyone? (trie)

    https://vjudge.net/problem/UVA-11732 题意 给定n个字符串,问用strcmp函数比较这些字符串共用多少次比较. strcmp函数的实现 int strcmp(cha ...