首页
社区
课程
招聘
[求助]关于输入表隐藏的问题。
发表于: 2016-12-3 11:20 3501

[求助]关于输入表隐藏的问题。

2016-12-3 11:20
3501
打算写一个隐藏整个输入表的程序。

步骤如下:
1、重构一个新的输入表,包含"kernel32.dll"中的“LoadLibrary"和"GetProcAddress"两个导入函数。
2、修改DATA DIRECTORY中导入表和IAT两个表的指针到重构的那个输入表中,记录旧的输入表IID 结构体RVA。
3、在程序入口点添加代码,利用步骤1中的两个函数和步骤2中的IID结构体数组RVA 遍历旧的输入表,填充IAT。

遇到问题了。。。
前面2个步骤都没问题了,载入x32dbg跟踪,其输入表被windows成功解析。
但是在程序进入入口点前(也就是执行我们添加的代码前),会先执行一段不知道干什么的代码:
然后卡在这一句上,
00401C70 | FF 25 DC 60 40 00        | jmp dword ptr ds:[4060DC]                |
分析原来的程序,这一句汇编指令是调用RtcInitializeCriticalsection。

而由于这段代码比我们添加在入口点处的代码更早执行,所以旧输入表IAT来不及被填充,所以发生错误。

谁知道是怎么回事?
这个只是一个MinGW编译的helloworld程序,不知道为什么代码段会有比入口点更早执行的代码?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1787
活跃值: (345)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
看看tls。
2016-12-3 12:15
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是TLS的问题,TLS清空。
发现Helloworld程序输入表隐藏成功且可以执行了。
- -
但是换成更复杂的程序还是出错~.~
2016-12-3 19:15
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还有一个问题。。。。。。。
6. ImageImportDescriptor:
    OriginalFirstThunk:  0x00080DD8
    TimeDateStamp:       0x00000000  (GMT: Thu Jan 01 00:00:00 1970)
    ForwarderChain:      0x00000000
    Name:                0x00081AA0  ("OLEAUT32.dll")
    FirstThunk:          0x000573A8

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x0008
    0x0006
    0x0002
这样的输入表,由于没有函数名,会导致我的程序出错。。
怎么破。
2016-12-3 19:22
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
GetProcAddress function
Retrieves the address of an exported function or variable from the specified dynamic-link library (DLL).
Syntax

C++

FARPROC WINAPI GetProcAddress(
  _In_ HMODULE hModule,
  _In_ LPCSTR  lpProcName
);

Parameters

hModule [in]
A handle to the DLL module that contains the function or variable. The LoadLibrary, LoadLibraryEx, LoadPackagedLibrary, or GetModuleHandle function returns this handle.
The GetProcAddress function does not retrieve addresses from modules that were loaded using the LOAD_LIBRARY_AS_DATAFILE flag. For more information, see LoadLibraryEx.
lpProcName [in]
The function or variable name, or the function's ordinal value. If this parameter is an ordinal value, it must be in the low-order word; the high-order word must be zero.
在MSDN找到答案了- -
2016-12-3 19:24
0
游客
登录 | 注册 方可回帖
返回