首页
社区
课程
招聘
[己解决]第16章外壳开发中重定位的问题
2009-8-24 10:28 4096

[己解决]第16章外壳开发中重定位的问题

2009-8-24 10:28
4096
ShellStart0 LABEL        DWORD
        pushad                    ; 外壳入口点
        call        next0
;**********************************************************

;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;                   以下是自构造的外壳的输入表
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportTableBegin  LABEL        DWORD
ImportTable         DD        AddressFirst-ImportTable  ;OriginalFirstThunk
                 DD        0,0                       ;TimeDataStamp,ForwardChain
AppImpRVA1         DD        DllName-ImportTable       ;Name
AppImpRVA2         DD        AddressFirst-ImportTable  ;FirstThunk
                 DD        0,0,0,0,0
AddressFirst         DD        FirstFunc-ImportTable     ;指向IMAGE_tHUNK_DATA
AddressSecond         DD        SecondFunc-ImportTable    ;指向IMAGE_tHUNK_DATA
AddressThird         DD        ThirdFunc-ImportTable     ;指向IMAGE_tHUNK_DATA
                 DD        0
DllName                 DB        'KERNEL32.dll'
                 DW        0
FirstFunc         DW        0       
                 DB        'GetProcAddress',0
SecondFunc         DW        0
                 DB        'GetModuleHandleA',0
ThirdFunc         DW        0
                 DB        'LoadLibraryA',0
ImportTableEnd  LABEL        DWORD
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;               以下是自构造的假重定位表(处理DLL时用)
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RelocBaseBegin  LABEL        DWORD
RelocBase         DD        0
                 DD        08h
                 DD        0
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;                以下是需要由加壳程序修正的变量
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SHELL_DATA_0                LABEL        DWORD
ShellBase         DD        0
ShellPackSize         DD        0
TlsTable         DB        18h dup (?)

;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;               外壳引导段使用的变量空间
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Virtualalloc         DB        'VirtualAlloc',0
VirtualallocADDR DD        0
imagebase         DD        0
ShellStep         DD        0
ShellBase2         DD        0

;**********************************************************
next0:
        pop        ebp
        sub        ebp,(ImportTable-ShellStart0)

请问为什么这个得到shellstart0的这句为什么不是sub ebp,(next0-ShellStart0)?
难道中间的IAT不算吗?多谢哦

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hkai 2009-8-24 10:31
2
0
明白了,用OD跟了一下,发现call压入堆栈的下一条指令地址....原来还以为是子程序的地址

给大家添麻烦了
游客
登录 | 注册 方可回帖
返回