第一章

PE和内存之间的映射

节偏移

文件偏移地址(File Offset Address):数据在PE文件中的地址

装载地址(Image Base):PE装入内存的基地址

虚拟内存地址(Virtual Address,VA):PE文件中的指令被装入内存后的地址

相对虚拟地址(Relative Virtual Address,RVA):相对虚拟地址是虚拟内存地址相对于映射基址(装载地址)的偏移量

关系:

VA = Image Base + RVA

节偏移=文件虚拟地址偏移量-文件物理地址偏移量

文件偏移地址=虚拟内存地址-装载基址-节偏移

例:虚拟内存地址为0x4010D4,文件虚拟地址偏移量为1000h,文件物理地址偏移量为200h

文件偏移地址=0x4010D4-0x400000(1000h-200h)=0x2D4  (注意十六进程的换算)

分析和破解win32控制台程序

环境如下

系统:windows7 x64虚拟机

软件:IDA Pro、UltraEdit

编译器:vc++6.0

注意:尽量不用vs或其他IDE,否则反编译时出现的伪代码不同,有些IDE编译会加入IDE的一些代码提高软件安全性等(笔者使用了vs2017,反编译出来没有main函数)

代码:

#include <stdio.h>
#include <string.h>
#define PASSWORD "123456" int verfity(char *password) {
int i;
i = strcmp(password, PASSWORD);
return i; } int main() { char password[];
int i;
printf("please input pwd:\n");
while () {
scanf("%s",password); i = verfity(password);
if (i){
printf("fail!please input pwd:\n");
}
else{
printf("success\n");
break; }
}
return ; }

载入IDA,这里选择第一个(进行PE分析)

进入main函数,按F12查看函数的流程图

经过分析后我们发现破解的关键点在于怎么跳过验证(两个字符串对比)

我们可以从字符串对比的判断JZ(为零则跳)作为切入点

按空格键进入汇编代码,找到JZ的虚拟地址004010D4

根据前面虚拟内存计算的例子,可以得出文件偏移地址是0x2D4

打开UltraEdit,进入0x2D4的位置,把74(机器指令JZ)修改为75(机器指令JNZ)

保存程序,破解完成!

关于机器指令和汇编指令可以参考: https://blog.csdn.net/ida0918/article/details/52655615

0day2安全——笔记1的更多相关文章

  1. 0day2安全——笔记4(修改临界变量)

    第二章 修改临界变量 #include <stdio.h> #include <string.h> #define PASSWORD "1234567" i ...

  2. 0day2安全——笔记3

    第二章 函数调用约定 不同的操作系统,语言和编译器调用函数的原理差不多,但是具体的调用约定有差异. C语言VC++编译的函数传参顺序如下图所示(默认使用__stdcall调用约定) 函数调用步骤(__ ...

  3. 0day2安全——笔记2

    第二章 内存的不同用途 windows应用—>编译连接—>PE文件—>进程 进程使用的内存 1.代码区:储存着被装入执行的二进制机器代码,处理器会到这个区域取指和执行 2.数据区:用 ...

  4. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  7. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  8. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  9. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

随机推荐

  1. 简单“三步”让你的网站支持https!

    关于Let's Encrypt Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust.EFF等组织人员发起 ...

  2. RocketMq在SparkStreaming中的应用总结

    其实Rocketmq的给第三方的插件已经全了,如果大家有兴趣的话请移步https://github.com/apache/rocketmq-externals.本文主要是结合笔者已有的rmq在spar ...

  3. 关于c# winform 键盘响应右边键盘消息响应事件的上下左右方向键没有反应

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11835642.html 记录一下这个小坑,c# winform 键盘响应右边键盘的上下左右方向 ...

  4. C#后台架构师成长之路-基础体系篇章大纲

    如下基础知识点,如果不熟透,以后容易弄笑话..... 1. 常用数据类型:整型:int .浮点型:double.布尔型:bool.... 2. 变量命名规范.赋值基础语法.数据类型的转换.运算符和选择 ...

  5. 使用Active Database Duplication创建跨平台Data Guard设置 (Windows/Linux) (Doc ID 881421.1)

    Using Active Database Duplication to Create Cross Platform Data Guard Setup (Windows/Linux) (Doc ID ...

  6. 如何下载Twitter视频?最简单的保存推特视频的方法

    Twitter上面的短视频越来越流行了,但是推特官方并没有提供下载通道.如果你想下载这些小视频到电脑或者手机(安卓/iPhone),该如何操作呢?下面介绍一种最简单的方法. 下载Twitter视频我们 ...

  7. Docker 运行应用程序

    一.docker run 镜像 执行的命令 docker run组合来运行一个容器:镜像文件不存在的话,会自动拉取(下载): 下图执行的命令的具体意思:docker 以ubuntu:15.10镜像创建 ...

  8. Java类BufferedImage

    https://docs.oracle.com/javase/7/docs/api/java/awt/image/BandedSampleModel.html

  9. MyBatis PropertyTokenizer

    PropertyTokenizer package org.apache.ibatis.reflection.property; import java.util.Iterator; /* 例1: 参 ...

  10. Spring Boot 2.2.2.RELEASE 版本中文参考文档

    写在前面 在我初次接触MongoDB的时候,是为了做一个监控系统和日志分析系统.当时在用Java操作MongoDB数据里的数据的时候,都是在网上查找Demo示例然后完成的功能,相信大家也同样的体会,网 ...