//有漏洞 并且开启了随机基址的程序 溢出点VerifyPassword返回地址
#include<windows.h>
#include<tchar.h>
#include <iostream>
#define PASSWORD "1234"
void* VerifyPassword(byte* pRet, void* pszPassword, int nSize) {char szBuffer[50] = { 0 };*pRet = strcmp(PASSWORD, (char*)pszPassword);return memcpy(szBuffer, pszPassword, nSize); //通过拷贝溢出
}
int _tmain(int argc, _TCHAR* argv[]) {void* pszPassword = NULL;int   nFileSize = 0;byte  bFlag = FALSE;FILE* fp;LoadLibraryA("user32.dll");if (fopen_s(&fp, "password.txt", "rb")) {MessageBoxA(NULL, "打开文件失败", "error", NULL);return 0;}fseek(fp, 0, SEEK_END);nFileSize = ftell(fp);rewind(fp);pszPassword = ZeroMemory(malloc(nFileSize), nFileSize);fread(pszPassword, nFileSize, 1, fp);VerifyPassword(&bFlag, pszPassword, nFileSize);if (bFlag) printf("密码错误\n");else       printf("密码正确\n");fclose(fp);system("pause");return 0;
}

此次绕过随机基址的方法是覆盖RVA 首先看基址为FE0000 在函数返回前 看返回地址基址是可以变化的 但是他的RVA是无法改变的 119e 所以我们只要覆盖两个字节的rva就达到了执行我们代码的目的

看上图的eax寄存器 就是我们memcpy的返回值 也就是拷贝缓冲区的首地址 我们只要精心构造文件 让他刚好覆盖RVA那两个字节的同时 最后拼接好的地址里的指令是call eax或jmp eax,push eax ret这样的指令 也就达到了执行shellcode的条件

由于我重新运行了程序 所以基址到00EE0000了 必须在本模块查找我们需要的指令 FFE0(jmp eax)

找到指令 rva为1122

构造文件用1122替换函数返回地址的rva

再次走到函数返回的地方 会返回到我们填写的地址去执行

eax就是缓冲区首地址 

于是就成功的跑到我们预想的位置执行代码了

bypass 随机基址相关推荐

  1. 去掉PE文件随机基址的方法

    用010Editer打开点击下面箭头所指的NtHeader然后在上方变蓝的数据块内找到4081,然后修改为0081即可(懂得PE文件的朋友可以也可以一层一层自己找到这个字段,就是WORD IMAGE_ ...

  2. PE文件关闭随机基址

    1.使用010Editor打开exe或者dll文件 dll不建议关闭随机基址,否则多个dll可能会冲突 2. 找到下图的WORD字段 将IMAGE_DLLCHARACTERISTICS_DYNAMIC ...

  3. 手工脱壳之AsPack压缩脱壳-随机基址

    一.工具及壳介绍 二.脱壳 1.ESP定律脱壳 2.单步跟踪脱壳 3.基址重定位的修复 一.工具及壳介绍 使用工具:Ollydbg.PEID.ImportREC.LoadPE.010 Editor 查 ...

  4. win7下反汇编程序程序基址改变问题

    windows vista开始有动态基地址的功能,只要pe头Dll Characteristics有0x40每次加载时基地址都不一样 自己的程序: 要想基址固定,在链接器中去掉/DYNAMICBASE ...

  5. 32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址

    32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址 一丶基址,随机基址的理解 首先,全局变量的地址,我们都知道是固定的,是在PE文件中有保存的 但是高版本有了随机基址,那么要怎么解决这 ...

  6. 190514-读取基址与偏移的几种方式

    基址分为固定基址,与随机基址 一般的EXE里 数据段和代码段 相关的地址是固定的 通常DLL里找到的基址都是动态的 常见的基址 形式 一.固定基址 标题 先说固定的基址 举个例子 某个游戏的角色相关的 ...

  7. 【翻译】ILR-我的Gadgets去哪里了——ILR: Where’d My Gadgets Go?

    ILR-我的Gadgets去哪里了 [文章为google-translate的直译结果,最近暂时没有时间修改翻译内容.google-translate的翻译结果中有很多明显的错误,遇到类似的问题,请读 ...

  8. 逆向分析c++ vector向量

    测试源码 #include<stdio.h> #include<stdlib.h> #include <iostream> #include <vector& ...

  9. Windows PE变形练手3-把通用模板机器码直接覆盖目标PE

    把通用模板机器码直覆盖目标PE 这个地方真是尝试了好久,遇到很多坑点,Win PE那本书上的东西有点不够,也就直接写书上的例子会发现很多地方不是说的那样,里面提供的信息太少了,就比如里面并没有提被注入 ...

最新文章

  1. 教你如何解决Python模块导包没有找到的问题
  2. (转).NET导出Excel的四种方法及评测
  3. linux send 失败_linux高性能网络编程之tcp连接的内存使用
  4. Spark 任务调度机制详解
  5. csv文件用excel打开有多行是空的,用sublime打开空白行没有''处理方案
  6. python 创建文件夹1003python 创建文件夹_在python中创建动态文件名
  7. linux 窗口不能移动的替换命令
  8. Spring-web-RequestContextHolder/RequestAttributes/HttpServletRequest
  9. cass参考手册_什么?你还不会测绘?南方CASS教程+视频讲解+插件汇总,快来学!...
  10. python虚拟环境搭建mac_在MAC上安装Python虚拟环境
  11. localStorage、cookie的使用总结
  12. 2015年7月15日 JS第一课(JS,声明变量,数据类型)
  13. 请熟悉ECO开发的朋友解答我的一些小问题!
  14. GMF:示例Mindmap 练习一
  15. 【论文阅读】深度学习与多种机器学习方法在不同的药物发现数据集进行对比
  16. QT Designer 设计主窗口时如何更改工具栏默认顺序
  17. 上海万应云——大数据精准招商系统
  18. java安卓读取txt中字符串分割为map
  19. uniapp银行卡卡片
  20. 求所有质因子(Java)

热门文章

  1. python嵌入式开发实战_嵌入式Qt实战教程 PDF 高清版
  2. NetCore使用DotNetCore.CAP框架
  3. 2.6.1 ADSL技术
  4. oracle创建序列语法
  5. ollydbg调试总结(一)
  6. 平行志愿计算机录取顺序,平行志愿中多个院校在录取时有先后顺序吗?
  7. C#窗体控件—Label
  8. 中春出租车计价器检定系统 钱龙软件
  9. fastboot 源码分析1
  10. Office2007与Microsoft Office SharePoint2007的配置和注意事项!