本次要做的尝试是通过修改导出表的函数地址,实现程序功能的更改,实现这个最大的限制就是堆栈平衡问题。

先写一个DLL和EXE为了测试。

DLL代码如下:

这样的话有两个导出函数(我们假设是一个密码验证之后执行的函数):

EXE测试代码如下:

也就是简单模拟下DLL调用,默认情况下因为密码错误,所以执行结果是这样:

然后开始一步一步分析处理问题:

1.确定需要替换函数堆栈平衡

首先IDA看下两个导出函数的调用堆栈,也就是看下参数是否一样,不然直接调换位置会导致函数调用之后堆栈不平衡:

可以确定,这两个函数的调用堆栈相同,可以直接替换。

2.从PE头开始,一步一步找到导出函数地址数组(AddressOfFunctions)

可以知道导出表的地址和大小,这个地址是RVA,根据这个RVA可以计算出来FOA。RVA-FOA之间的转换我写过总结,还写了个工具当时。需要的可以翻翻我上传的东西。这里不细说直接计算:

这样0xCF30的位置应该是存的导出表相关。找到这个位置:

黑色部分是对应的如下这个结构:

红色框部分就是倒数第三个,导出函数地址RVA,继续计算FOA

然后找到FOA 0xCF58处的一个DWORD数组,这个存的是导出函数地址,RVA。

最后把这两个地址进行交换就行了。然后运行测试exe,实现错误密码登录成功,当然这只是个演示程序,如果是实现功能的话,还可以直接OD加载进来,跑一下,在IF的地方把汇编代码的比较函数改了就行了。这个在WindowsPE的第一节我就写过操作流程,这里不细说了。

最后就是我写完这些分析的时候发现有点SB了,咱们来看下这个:

其实可以直接根据那个提供的地址,得到下面的两个地址,没看错的话,应该是一个是VA,一个是RVA,基址是10000000。稍等我去查下:

woc基址还真是这个。这样的话直接全局搜索这个地址然后替换就行了啊。额...不过没事。毕竟是为了学习吗。无所谓了。为了方便一些不太了解导出表的小伙伴,我最后在传一个导出表的结构吧。如果看不懂了可以看下这个结构理解下:

Windows PE导出表编程2(重组导出表函数地址)的更多相关文章

  1. Windows系统调用架构分析—也谈KiFastCallEntry函数地址的获取

    为什么要写这篇文章 1.      因为最近在学习<软件调试>这本书,看到书中的某个调试历程中讲了Windows的系统调用的实现机制,其中讲到了从Ring3跳转到Ring0之后直接进入了K ...

  2. WindowsPE 第五章 导出表编程-1(枚举导出表)

    导出表编程-1-枚举导出表 开始前先回忆一下导出表: 1.枚举dll函数的导出函数名字: 思路: (1)加载dll到内存里. (2)获取PE头,逐步找到可选头部. (3)然后找到里面的第一个结构(导出 ...

  3. Windows PE导出表编程4(重构导出表实现私有函数导出)

    本次是尝试调用DLL里面的私有函数. 一: 之前先探索一下,首先可以考虑用偏移量来调用,就是如果知道了某个私有函数和某个导出的公共函数的相对便宜的话,直接加载dll获取公共函数地址,然后自己手动去偏移 ...

  4. Windows PE导出表编程3(暴力覆盖导出函数)

    今天要尝试的导出表相关编程内容是:覆盖函数地址部分的指令代码. 这种覆盖技术,是将AddressOfFunctions指向的地址空间指令字节码实施覆盖,这种技术又繁衍出两种: 暴力覆盖,即将所有的代码 ...

  5. 【学习】Windows PE文件学习(一:导出表)

    今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见 ...

  6. PE格式第六讲,导出表

    PE格式第六讲,导出表 请注意,下方字数比较多,其实结构挺简单,但是你如果把博客内容弄明白了,对你受益匪浅,千万不要看到字数多就懵了,其实字数多代表它重要.特别是第五步, 各种表中之间的关系. 作者: ...

  7. Windows Pe 第三章 PE头文件-EX-相关编程-2(RVA_FOA转换)

    RVA-FOA之间转换 1.首先PE头加载到内存之后是和文件头内容一样的,就算是偏移不同,一个是磁盘扇区大小(400H)另一个是内存页大小(1000H),但是因为两个都是开头位置,所以相同. 2.看下 ...

  8. 利用PE数据目录的导入表获取函数名及其地址

    PE文件是以64字节的DOS文件头开始的(IMAGE_DOS_HEADER),接着是一段小DOS程序,然后是248字节的 NT文件头(IMAGE_NT_HEADERS),NT的文件头位置由IMAGE_ ...

  9. Windows Pe 第三章 PE头文件(上)

    第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...

随机推荐

  1. Amazon Connect 配置ccp端的soft phone配置(客服坐席工作站配置)

    本文参考:  Amazon Connect 配置ccp端的soft phone配置(客服坐席工作站配置) [官网]:https://aws.amazon.com/cn/connect/ 应用场景 在应 ...

  2. FreeBSD 开发已经迁移至 git

    FreeBSD 开发已经迁移至 git 全部预计于 2021 年 3 月完成迁移. https://git.freebsd.org/src.git 或者 https://cgit.freebsd.or ...

  3. JS逆向-抠代码的第二天【手把手学会抠代码】

    今天的学习项目:沃支付:https://epay.10010.com/auth/login 清空浏览器缓存后,打开网页,输入手机号,密码222222,按照网站要求填入验证码(sorry,我没有账号密码 ...

  4. SpringBoot Shiro 权限注解不起作用

    最近在学习springboot结合shiro做权限管理时碰到一个问题. 问题如下: 我在userRealm中的doGetAuthorizationInfo方法中给用户添加了权限,然后在Controll ...

  5. pta 简单求和

    6-1 简单求和 (10 分)   本题要求实现一个函数,求给定的N个整数的和. 函数接口定义: int Sum ( int List[], int N ); 其中给定整数存放在数组List[]中,正 ...

  6. 前端 | vxe-table 翻页保留复选框状态

    0 前言 在前端开发过程中时常会遇到表格相关的显示与处理.组件库通常都会提供表格组件,对于展示.简单操作这些常用功能通常也够用:但如果需要更多的定制或进行比较复杂的操作,组件库自带的组件可能会捉襟见肘 ...

  7. 简单创建ASP.NET网站(1)

    闲话 公司员工辞职了,我从原来的Delphi开发转型到ASP.NET开发,接受同时的相关工作,因为网上搜了视频学习,还是不觉得有什么提升,一脸懵逼,所以就买了书籍自己慢慢学习,为了加深记忆,我就记录一 ...

  8. 树结构系列(三):B树、B+树

    树结构系列(三):B树.B+树 文章首发于「陈树义」公众号及个人博客 shuyi.tech,欢迎访问更多有趣有价值的文章. 文章首发于「陈树义」公众号及个人博客 shuyi.tech 平衡二叉树的查找 ...

  9. 01-MySQL Linux安装

    一.检查当前系统是否安装过mysql rpm -qa|grep mysql 或 ps -ef|grep mysql 二.安装mysql服务端 rpm -ivh MySQL-server-5.5.48- ...

  10. Apache Hudi C位!云计算一哥AWS EMR 2020年度回顾

    1. 概述 成千上万的客户在Amazon EMR上使用Apache Spark,Apache Hive,Apache HBase,Apache Flink,Apache Hudi和Presto运行大规 ...