-
-
[原创]fmifs.dll导出函数参数分析和整理
-
发表于:
2013-7-18 12:36
15989
-
(大牛飘过吧!~)
很久以前,发现一本叫逆向工程解密的书,当时,对于只会看MSDN的我和小伙伴们都惊呆了!居然可以通过逆向,分析出未文档化函数的接口参数,加以利用。果断瞧瞧,学习一把。后来我们碰到未文档化的函数时,我们都懂的……
上次发现fmifs.dll以及该动态链接库的导出函数,并且未文档化,我们也来分析一下。(大神曰:此dll功能强大!)转入正题……
分析未文档化函数的使用:
一般途径:
1、能找到一个系统中的调用例子,进行分析,这样可以看到该函数的参数具体形式(如SHFormatDrive中调用了FormatEx);
2、没有调用例子,通过分析该函数的代码,找出函数各个参数的使用限制,猜测参数的具体形式;
快捷途径:
1、搜索引擎,瞧瞧,有没有研究过,有直接拿过来就行;
2、某年某月,windows流出了古老的代码,过去翻翻,看有用得着的东西没有(这个的确快捷好用,别说,以前真不知道,那码怎么用,看哪里……);
走一般途径,各种锻炼;走快捷途径,各种速度;各种通吃也行,看你想要啥?……
该DLL共导出17个函数(应该说是16个,有一个初始化的fmifs的是DLLEntryPoint),从函数名可以看出,大致分为三类:查询xxx函数,设置xxx函数,具体操作xxx函数。
各种函数传参和返回时:
传入信息时,可以是字符串,或者各种标志信息标志信息中,可能一个DWORD只表示一种状态(如:enum 类型),也可能一个DWORD包含多种信息(如:CreateFile,中各种 标志1|标志2),就看这个DWORD是否涉及位运算;
返回信息时,一般是传入一个地址,然后通过指针往一个地址写东西,通过写的长度,可以判断这个指针所指缓冲区的大小。
分析时碰到的实例:
实例一:
char __stdcall QueryAvailableFileSystemFormat(unsigned int a1, void *a2, int a3, int a4, int a5)
{
memcpy(a2, (char *)&dword_696D5008 + 22 * a1, 2 * wcslen((const wchar_t *)&dword_696D5008 + 11 * a1) + 2);
*(_BYTE *)a3 = byte_696D501A[v6];
*(_BYTE *)a4 = byte_696D501B[v6];
*(_BYTE *)a5 = byte_696D501C[v6];
}
char __stdcall QueryDeviceInformation(int a1, int a2, unsigned int a3)
{
……
if ( (unsigned __int8)WSTRING__Initialize(&v6, a1, -1)&& ……)
{
……
*(_DWORD *)a2 = -(v8 != 0) & 0x10 | -(v9 != 0) & 0x41 | -((_BYTE)v10 != 0) & 0x20 | -(BYTE1(v10) != 0) & 0x40;
}
……
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!