精华内容
下载资源
问答
  • 写这个源码的初衷是写一款DLL加密壳的 EXE已经实现了 只是不支持DLL 当然利用这个源码可以编写DLL加壳 只是我不想再往深处写 毕竟DLL要求兼容性特别强 不太适合我的猥琐加密 所以放弃写DLL加密了 有兴趣可以看看源码...
  • 写这个源码的初衷是写一款DLL加密壳的 EXE已经实现了 只是不支持DLL 当然利用这个源码可以编写DLL加壳 只是我不想再往深处写 毕竟DLL要求兼容性特别强 不太适合我的猥琐加密 所以放弃写DLL加密了 有兴趣可以看看源码...
  • 写这个源码的初衷是写一款DLL加密壳的 EXE已经实现了 只是不支持DLL 当然利用这个源码可以编写DLL加壳 只是我不想再往深处写 毕竟DLL要求兼容性特别强 不太适合我的猥琐加密 所以放弃写DLL加密了 有兴趣可以看看...
  • DLL重定位资源修改

    2011-07-14 15:00:16
    可自动修改DLL镜像基址,DLL重定位资源修改。
  • DLL 重定位

    千次阅读 2010-11-06 10:08:00
    DLL 重定位在32位代码中,涉及到直接寻址的指令都是需要重定位的(而在DOS的16位代码中,只有涉及到段操作的指令才是需要重定位的,对此有兴趣的读者可以参考 相关的资料),对于操作系统来说,其任务就是在对...

    DLL 重定位

    在32位代码中,涉及到直接寻址的指令都是需要重定位的(而在DOS的16位代码中,只有涉及到段操作的指令才是需要重定位的,对此有兴趣的读者可以参考 相关的资料),对于操作系统来说,其任务就是在对可执行程序透明的情况下完成重定位操作,在现实中,重定位信息是在编译的时候由编译器生成并被保留     在可执行文件中的,在程序被执行前由操作系统根据重定位信息修正代码,这样在开发程序的时候就不用考虑重定位问题了。 

    重定位信息在DLL文件中被存放在重定位表中 
        重定位的算法可以描述为:将直接寻址指令中的双字地址加上模块实际装入地址与模块建议装入地址之差。为了进行这个运算,需要有3个数据,首先是需要修正的机器码地址;其次是模块的建议装入地址;最后是模块的实际装入地址。这就是第一个问题的答案。 

    在这3个数据中,模块的建议装入地址已经在PE文件头中定义了,而模块的实际装入地址是Windows装载器确定的,到装载文件的时候自然会知道,所以第二个问题的答案很简单,那就是应该被保存在重定位表中的仅仅是需要修正的代码的地址。 

    事实上正是如此,DLL文件的重定位表中保存的就是一大堆需要修正的代码的地址。 
        重定位表一般会被单独存放在一个可丢弃的以“.reloc”命名的节中,但是这并不是必然的,因为重定位表放在其他节中也是合法的,惟一可以肯定的是,如 果重定位表存在的话,它的地址肯定可以在DLL文件头中的数据目录中找到。如表17.4所示,重定位表的位置和大小可以从数据目录中的第6个 IMAGE_DATA_DIRECTORY结构中获取 

        虽然重定位表中的有用数据是那些需要重定位机器码的地址指针,但为了节省空间,DLL文件对存放的方式做了一些优化。 
        在正常的情况下,每个32位的指针占用4个字节,如果有n个重定位项,那么重定位表的总大小是4×n字节大小。 
        直接寻址指令在程序中还是比较多的,在比较靠近的重定位表项中,32位指针的高位地址总是相同的,如果把这些相近表项的高位地址统一表示,那么就可以省略 一部分的空间,当按照一个内存页来分割时,在一个页面中寻址需要的指针位数是12位(一页等于4096字节,等于2的12次方),假如将这12位凑齐16 位放入一个字类型的数据中,并用一个附加的双字来表示页的起始指针,另一个双字来表示本页中重定位项数的话,那么占用的总空间会是4+4+2×n字节大 小,计算一下就可以发现,当某个内存页中的重定位项多于4项的时候,后一种方法的占用空间就会比前面的方法要小。
    展开全文
  • DLL重定位和绑定

    2014-05-16 17:11:26
    DLL重定位与绑定的原理: 实践:

    DLL重定位与绑定的原理:

    实践:

    展开全文
  • dll基地址重定位

    2019-07-10 22:07:35
    基地址重定位:当进行多个dll动态库合起来编译成一个exe文件的时候,每个dll和exe都有默认的基地址,当加载器加载exe的时候,其实的某个dll会发生基地址改变,因此当加载完后,之前dll里面的指令和加载之后的不一样...

    1、定义

    基地址重定位:当进行多个dll动态库合起来编译成一个exe文件的时候,每个dll和exe都有默认的基地址,当加载器加载exe的时候,其实的某个dll会发生基地址改变,因此当加载完后,之前dll里面的指令和加载之后的不一样,导致映像文件里的机器代码指令(包含的硬编码地址)与加载后的不一样,此时需要通过rebase进行基地址重定位。

    2、常出现的地方&常见的打印错误方式

    常出现的地址:

    (1)git更新代码的时候

    (2)mingw进行编译代码的时候

    (3)其他进行代码操作的行为等

    常见的打印错误方式:

    xxxxxxxx....VirtualAlloc pointer is null, Win32 error 487

    xxxxxxxx....Couldn‘t reserve space for cygwin‘s heap, Win32 error 0

    等等

    3、解决方法

    基本都是由于编辑器或者工具bin下面的msys-1.0.dll这个库的基地址导致,因此需要重定位这个基地址。

    网上可以下载rebase工具或者自己安装了对应出错问题对应的编辑器或者工具上面都会自带rebase.exe,都可以在相应的目录下面找到。

    eg:

    error 0解决方法:

    rebase.exe -b 0 0x50000000 xxxxxx\bin\msys-1.0.dll

    error 487解决方法:

    rebase.exe -b 0x760000000 xxxxxxx\bin\msys-1.0.dll

     

     

     

    展开全文
  • 一种隐藏注入DLL的方式,DLL重定位

    千次阅读 2010-10-03 22:43:00
    不知道是war3本身就有这个功能,还是老外确实那么BT地实现了,这个是后话,正在研究中~~~ 对Mh.Pdll分析了下,发现他是注入dll实现的,因为有些功能必须是在DLL中完成,不像以前的全图,只是小小地patch...

    from 老外的一款war3的外挂,呵呵,就是WUtil啦

    不得不PF,居然可以把魔法值像血条那样显示,其实这个愿望以前想过,但真的不知道如何去实现。

    不知道是war3本身就有这个功能,还是老外确实那么BT地实现了,这个是后话,正在研究中~~~

    对Mh.Pdll分析了下,发现他是注入dll实现的,因为有些功能必须是在DLL中完成,不像以前的全图,只是小小地patch下game.dll。而我发现war3运行后不能发现注入的dll模块(比如processExplorer不能发现),难道他用了我的lpk.dll同样的trick?

    非也,lpk.dll隐藏技术是基于peb的,仔细分析了MH.pdll后,发现他注入的思路还有点特别。虽然它也是基于远线程的。

    一般远线程dll注入都是把dll路径写入目标进程,然后CreateRemoteThread中把LoadLiberaryA/W作为线程起始地址。因为加载dll用的标准的LoadLiberaryA/W,所以用processExplorer之类会在目标进程发现这个dll。

    WUtil的伎俩是:Loader本身会加载Mh.pdll,这样mh.pdll里面IAT已经构建完成——这个不好说的,就是所有需要用的系统API都得到了的意思。其次就是重定位,在目标进程VirtualAllocEx一段跟本DLL相同大小的内存空间,得到其内存起始地址,A。在本进程也VirtualAlloc一段跟本dll相同大小的空间,B。对本进程分配的内存进行重定位操作,注意基址是按A计算,差值是本DLL基址和A之差。重定位当然需要读重定位表,也就是dlll中.reloc那段,相关结构可以参考一些资料,我这里没有去查,不过不难,直接张贴IDA中分析的吧。

    dwXXX = v10 - v6;                                             // 差值
    do
    {
        pBlockRVA = *(_DWORD *)pcurReloc;
        dwBlockSize = *(_DWORD *)(pcurReloc + 4);
        dwCurSize = 8;
        pcurReloc += 8;
        if ( dwBlockSize > 8 )
        {
          do
          {
            itemRVA = *(_WORD *)pcurReloc;
            pcurReloc += 2;
            dwCurSize += 2;
            if ( itemRVA >> 12 )
            {
              if ( itemRVA >> 12 != 3 )
                return 4;
              *(_DWORD *)((char *)modBase + pBlockRVA + (itemRVA & 0xFFF)) += dwXXX;
            }
          }
          while ( dwCurSize < dwBlockSize );
        }
    }
    while ( dwBlockSize );

    最后把B全部WriteProcessMemory到目标进程然后CreateRemoteThread调用某个函数地址就OK拉。一般CreateRemoteThread用了就玩完了,可以设置下Wait下远线程的句柄,函数调用实现后马上就释放内存,什么痕迹也没留下。最后,就是dll导出接口的函数需要自己确定下地址。不知道时候是不是可以过某些杀软的反远线程DLL注入。

    哎,表达能力太差,大概只有自己看得懂。

    要点说下:差不多就是模拟系统的LoadLiberary,不过由于loader中已经加载了dll,所以IAT部分不用考虑了,只需解决重定位问题。

     

    相关代码我已经开源:
    http://lynnmh.googlecode.com/files/manabars 1.4.zip

     

    FROM:http://hi.baidu.com/lynnux/blog/item/581c69365bb4293a0b55a914.html/cmtid/b4026e1f48d75dfbe1fe0b9d#b4026e1f48d75dfbe1fe0b9d

    展开全文
  • dll重定位

    千次阅读 2012-07-19 09:57:41
    dll的建议装载地址在编译的时候就已经确定了,多个dll加载时建议装入地址会冲突,windows的装载器会根据pe文件的重定位表将需要修正的地址进行修正。 修正时需要三个值 1.实际的装载地址(windows自己知道了...
  • DLL文件脱壳(重定位表修复部分)

    万次阅读 2013-02-15 12:50:39
    标 题:DLL文件脱壳(重定位表修复部分)作 者:kanxue 时 间:2008-03-16 10:42 链 接:http://bbs.pediy.com/showthread.php?t=61334   13.5 DLL文件脱壳   DLL文件的脱壳与EXE文件步骤差不多,所不同...
  • //0x0001 文件中没有重定位(relocation)、0x0002 文件是一个可执行程序exe(也就是說不是OBJ 或LIB)、0x2000 文件是dll   } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;  -Optional Header 包含了PE...
  •   如果需要修改exe,dll等的二进制代码,遇到添加绝对地址时,需要将绝对地址的位置添加进重定位表,确保添加代码的正确。那如何手工添加?首先需要了解重定位表在PE文件中的解析,本文默认读者具有这方面功底。 ...
  • 使用rebase进行dll基地址重定位

    千次阅读 2012-08-20 14:27:04
    假设有3个模块,一个user.exe,另外两个是A.dll,B.dll。  在编译链接各个模块时,我利用VS默认的base address,这样user.exe的默认基地址是0x00400000h,A或B的基地址是0x10000000h。这样,当加载器加载User.exe...
  • PE文件重定位

    千次阅读 2014-09-12 22:10:38
    PE格式是Windows环境下可执行文件(如:exe,dll)的格式,而Windows下面的程序,例如动态链接库无法加载到它本身期望加载的地址的时候,便会发生重定位。那么,重定位是如何实现的呢?   一.PE文件格式的结构 ...
  • 然后,使用重定位命令重定位 .dll rebase –b 40000 –R C:/projects/projectRoot/debug –G Rebase.txt   也可以在工程中的选择 post_build step 标签上的 post_build Command 选项。 2.   显示的为每...
  • 重定位表修改办法.rar

    2021-06-09 16:34:42
    1.重定位表的修改方法,而不是修改入口点函数,根据相对地址偏移的方法。 2:重定位表的内容: 第[0001]项 数据项的数据为:[0006] 数据属性为:[3] ... RVA里面的地址相当于注册在重定位表里面,dll加载时会自动修改。
  • 1 ; -------------------------------- ...函数刚开始的时候栈顶地址 一定存在于kernel32.dll地址空间内 181 ; 正合适以此寻找kernel32.dll的基址 182 mov eax, dword ptr [esp] 183 ...
  • RelocX重定位修复

    2017-03-27 21:46:58
    RelocX DLL脱壳后的重定位修复工具,挺方便的,不用自己找重定位地址,试过多次基本都可以很快搞定重定位修复
  • PE重定位练习

    2018-10-07 15:37:17
    该文件包含一个dll和PEview,和文章中的截图对应,方便大家更好的理解PE重定位原理
  • DLL引入表重定位 .reloc

    千次阅读 2009-03-27 18:48:00
     重定位的基本原理:重定位以来与PE头文件的.reloc段,该段以索引的方式指出代码段中所有需要修正的数的地址,该地址以 RVA 相对虚地址的方式来表示,即该数值表示到基地址的偏移量。.reloc段由一系列子项组成,每...
  • 根据无法启动的现象,联想到我2015年的一篇博客《静态编译的EXE重定位项不能多于65536个》,我怀疑是静态编译时重定位项过多引起的。 根据我提供的线索,作者很快找到了易语言论坛的这篇帖子,很快就解决了问题.....
  • 基址重定位

    2020-02-06 19:21:46
    基址重定位概念 当向程序的虚拟内存加载PE文件时,...对于DLL文件来说,多个DLL文件使用调用其本身的EXE文件的地址空间,不能保证ImageBase所指向的地址没有被其他DLL文件占用,所以DLL文件当中必须包含重定位信息,...
  • **为什么重定位?** 重定位就是修正PE文件的地址。 PE文件有着默认的基址(ImageBase默认为0x40000000),理论上当PE要加载的时候,就会占据这个地址,但是当这个地址因为一些原因,被占用而不能被加载时,PE文件就被...
  • 重定位表结构解析

    2021-10-24 11:47:28
    目录预备知识一、相关实验实验目的实验环境实验步骤一实验步骤二实验步骤三 预备知识 一、相关实验 本实验要求您已经认真学习和完成了《IMAGE_DOS_HEADER解析》、《PE头之IMAGE_FILE_...2)了解PE文件的重定位表结构
  • 重定位表详解

    千次阅读 2019-05-10 17:53:36
    DLL却是必须需要重定位信息的,因为DLL不一定加载到它默认的ImageBase上。重定位表作为一个单独的区块放到区块表中,其名字一般为**.relc**。 PE文件通过将所有可能的修改的数值存放到一个数组里,以一种统一的...
  • 目录 重定位表定位以及解析(手动FileBuffer) 代码定位重定位表并打印其数据 修改ImageBase并修复其重定位数据 移动重定位表 ...基址重定位信息所处的节通常被命名为.reloc,基址重定位表包含了映像中所有需
  • 四、重定位表(Relocation Table)解析

    千次阅读 2018-07-21 14:40:38
    1、重定位表的作用 重定位表(Relocation Table)用于在程序加载到内存中时,进行内存地址的修正。为什么要进行内存地址的修正?我们举个例子来说:test.exe可执行程序需要三个动态链接库dll(a.dll,b.dll,c.dll...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼原贴:...在远程注入代码的时候,代码重定位用得比较多.但是还有2种取巧的方法就不用代码重定位,其中一种移植行查,一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,169
精华内容 8,467
关键字:

dll重定位

友情链接: wangshangshangcheng.rar