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包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
随机推荐
- 数据库查询性能 LinqDB vs Sql查询
使用LinqDB查询Sqlite数据库数据,不管是大数据还是少量的数据,感觉特别耗时,尤其是首次查询 一个含有2.7万条数据的数据表 首次查询: 查询2.7万条数据,耗时1s 查询指定的1条数据,也要 ...
- 字节跳动——IT技术工程师面试题
.自我介绍 .项目介绍 .争对个人项目进行提问 .场景模拟 .1如何知道用户的指定视频(类似于QQ发视频)的服务是正常的 .使用appum进行自动化测试 .使用bat脚本获取进程状态,然后定时发送em ...
- CAD制图初学入门如何学好CAD?CAD大神总结5点诀窍,必须收藏
现在有很多的小伙伴们都加入到了CAD这个大家庭中,一开始都是都是一脸懵的状态,更不知要从何入手! 小编才开始也是,但是只要掌握好CAD的技巧和脊髓,一切都不是事.CAD大神总结5点诀窍,悄悄告诉你,必 ...
- delphi使用Foxit Quick PDF Library读写pdf文本和图片
简介: Debenu Quick PDF Library(PDF编程开发工具)提供一套全方位的 PDF API 函数,帮助您快速简便地处理 PDF 文件.从文档属性的基本操作到创建您自己的 PDF 查 ...
- SQLserver、MySQL、ORCAL查询数据库、表、表中字段以及字段类型
一.SQLServer命令 1.查询SQLServer中的每个数据库 SELECT * from sysdatabases 2.查询SQLServer中指定数据库的所有表名 select name f ...
- c++11 auto 与auto& 遍历vector区别
目录 说明 c++11 auto 与auto& 遍历区别 今天被这个问题坑了一天,一直以为是算法错了,debug了一天,最后暴力生成数据才发现,测试代码如下: 说明 转载请注明出处:https ...
- 服务守护DOS脚本
创建一个批处理文件,复制以下内容至文件中并保存,右键文件名,以管理员身份运行. @@@code @echo off @echo 请使用管理员身份运行此脚本 rem 运行前先打开文件修改下列变量: ...
- MySQL 主从复制问题
导致SQL线程故障原因分析及解决方案 原因 1. 版本差异,参数设定不同,比如:数据类型的差异,SQL_MODE影响 2. 要创建的数据库对象已经存在 3. 要删除或修改的对象不存在 4. DML语句 ...
- 经典案例:如何优化Oracle使用DBlink的SQL语句
转自 https://blog.csdn.net/Enmotech/article/details/78788083 作者介绍 赵全文 就职于太极计算机股份有限公司,在中央电化教育馆做Oracle D ...
- IDEA 工具自动生成JavaBean类
1.先安装GsonFormat插件:File-->Setting-->Plugins-->GsonFormat-->OK 2.new 一个新的Class空文件,然后 Alt+I ...