0day2安全——笔记1
第一章
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的更多相关文章
- 0day2安全——笔记4(修改临界变量)
第二章 修改临界变量 #include <stdio.h> #include <string.h> #define PASSWORD "1234567" i ...
- 0day2安全——笔记3
第二章 函数调用约定 不同的操作系统,语言和编译器调用函数的原理差不多,但是具体的调用约定有差异. C语言VC++编译的函数传参顺序如下图所示(默认使用__stdcall调用约定) 函数调用步骤(__ ...
- 0day2安全——笔记2
第二章 内存的不同用途 windows应用—>编译连接—>PE文件—>进程 进程使用的内存 1.代码区:储存着被装入执行的二进制机器代码,处理器会到这个区域取指和执行 2.数据区:用 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
随机推荐
- 【每天一题】LeetCode 0026. 删除排序数组中的重复项
开源地址:https://github.com/jiauzhang/algorithms 题目描述 /* * https://leetcode-cn.com/problems/remove-dupli ...
- mac环境 python3.7 lzma.py 报错解决
import pandas as pd 在使用pandas时报Could not import the lzma module解决方法: 1.安装了 backports.lzma pip3 insta ...
- 什么是 AQS?简单说一下 ReentrantLock 的原理?
AQS 简介 java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchr ...
- Ubuntu 18.04安装MySQL
安装 MySQL 服务端 sudo apt-get install mysql-server 等待安装完成. 检查 mysql 服务状态 servive mysql status 登录 mysql 客 ...
- CentOS7 安装Python3.6.8
CentOS7 安装Python3.6.8 1. 安装依赖环境 yum -y groupinstall "Development tools" yum -y install zli ...
- 文件迁移到FileTable中
看此文档前,先参考一下文档 https://blog.csdn.net/downmoon/article/details/24374609 环境:阿里云ECS SQL Server 2017 + De ...
- web项目踩坑过程
sql函数设计: 一开始本来是直接用Java的jdbc直接传输操作语句的.但后来学了存储过程发现存储过程可以提高不少的效率.就重构了自己对数据库的操作代码.包括:开启,查找,修改,关闭. 开启:直接使 ...
- Linux系统学习 十、DHCP服务器—介绍和原理
介绍: DHCP服务作用(动态主机配置协议) 为大量客户机自动分配地址.提供几种管理 减轻管理和维护成本.提高网络配置效率 可分配的地址信息主要包括: 网卡的IP地址.子网掩码 对应的网路地址.广播地 ...
- Cocos2d-x3.0网络通信学习(一)
配置:win7+Cocos2d-x.3.0+VS2012 摘要:建立基本的http通信并得到返回信息. 一.添加项目与编译库 1.添加头文件 在需要用到Http网络相关类的文件中加入头文件 #incl ...
- 基于django的个人博客网站建立(七)
基于django的个人博客网站建立(七) 前言 网站效果可点击这里访问 这次在原来的基础上添加或修改一些小功能 具体内容 1.代码高亮 在原来的blog-details.html页面添加下面的代码: ...