zoukankan      html  css  js  c++  java
  • Windows PE导出表编程4(重构导出表实现私有函数导出)

    本次是尝试调用DLL里面的私有函数。

    一:

      之前先探索一下,首先可以考虑用偏移量来调用,就是如果知道了某个私有函数和某个导出的公共函数的相对便宜的话,直接加载dll获取公共函数地址,然后自己手动去偏移调用就行了。先测试一发,就是根据MessageBoxA的地址来偏移到MessageBoxB的地址,然后去调用。


    答案和预期的一样,是可以调用的,但是问题是上面的两个MessageBoxAB都是导出函数,那如果偏移的是私有函数是否可以调用成功?接下来是实验这个。
    二:

    我自己写了一个dll代码如下:



    编译之后看到的导出函数是FA,如下图。


    然后简单调试一次,获得当时的三个函数的地址,计算出剩下的两个私有函数和导出函数的相对位置,结果如下。

    dwFA = 1599737888

    dwFB = 1599737936  48  0x30 

    dwFC = 1599737952  64  0x40

    然后尝试调用一发,结果是和预期的一样的。下面是调用代码。


    三:

    最后来换个思路,我们直接尝试重构导出表来把私有函数编程导出函数,先是根据PE头计算RVA。。。等找到导出表位置及其内容,如下:


    我翻译一下这些字段,如下:


    本来是想整体把导出表换个位置,不过我看后面还有一大推空的位置,干脆就直接接在后面的了,也就是导出表的起始位置不变,大小和内容改变了,从新计算偏移以及添加导出函数名称,地址,序号等等,结果如下(这个地方倒腾了快1小时,虽然不难,但是要一点点算):

    然后就是手动的把我们自己重组的导出表填在下面:


    之后别忘记一件事,就是去PE头把导出表大小改了,一共是增加了0X1A大小。

    大功告成,来看下结果:

     


    噢耶,结果是自己想要的,开心。

  • 相关阅读:
    优化 Markdown 在 Notepad++ 中的使用体验
    error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
    Git: 代码冲突常见解决方法
    fatal error c1001 编译器中发生内部错误 OpenMesh6.3
    error C2448 函数样式初始值设定项类似函数定义
    VS Code 配置Python
    15分钟掌握 Git
    notepad++快捷键
    【Python笔记】第4章 操作列表
    【MySQL】MySQL按中文排序
  • 原文地址:https://www.cnblogs.com/csnd/p/12062102.html
Copyright © 2011-2022 走看看