嘿嘿,把壳解压IAT讲具体点!!!
004BA122 . 5F pop edi ; edi指向函数名区块
004BA123 > 8B07 mov eax, dword ptr [edi] ; 共8个字节,前四个字节是库名的偏移,后四个字节为IAT表的偏移
004BA125 . 09C0 or eax, eax
004BA127 . 74 3D je short 004BA166 ; 偏移为0,表示结束,调处加载IAT表
004BA129 . 8B5F 04 mov ebx, dword ptr [edi+4] ; 读后四个字节
004BA12C . 8D8430 00600B>lea eax, dword ptr [eax+esi+B600>; esi为00401000加上B6000再加上偏移,得到函数名字符串地址
004BA133 . 01F3 add ebx, esi ; ebx为后四个字节的偏移,加上esi,即指向IAT表中的偏移!!!
004BA135 . 50 push eax ; 库名入栈
004BA136 . 83C7 08 add edi, 8 ; edi加8(跳过那8个字节)指向下一个地址
004BA139 . FF96 54610B00 call dword ptr [esi+B6154] ; 调用LoadLibrary函数
004BA13F . 92 xchg eax, edx ; 将句柄保存入edx
004BA140 > 8A07 mov al, byte ptr [edi] ; 读取1个字节
004BA142 . 47 inc edi ; 指向下一个字节
004BA143 . 08C0 or al, al ; 判断是否为函数,如果为函数值为1,0就是库名
004BA145 .^ 74 DC je short 004BA123 ; 为0(库名)跳上去,
004BA147 . 52 push edx ; kernel32.7C800000
004BA148 . 89F9 mov ecx, edi
004BA14A . 79 07 jns short 004BA153
004BA14C . 0FB707 movzx eax, word ptr [edi]
004BA14F . 47 inc edi
004BA150 . 50 push eax
004BA151 . 47 inc edi
004BA152 B9 db B9
004BA153 . 57 push edi
004BA154 . 48 dec eax
004BA155 . F2:AE repne scas byte ptr es:[edi] ; 将edi指向下一个函数名
004BA157 . 52 push edx
004BA158 . FF96 58610B00 call dword ptr [esi+B6158]
004BA15E . 5A pop edx
004BA15F . 8903 mov dword ptr [ebx], eax
004BA161 . 83C3 04 add ebx, 4
004BA164 .^ EB DA jmp short 004BA140
楼主方法不错值得敬仰,呵呵,基本上脱离了工具,全手工搞定!!!