typedef struct CALL_ARGUMENT_DATA
{
PFN_RtlInitUnicodeString fnRtlInitUnicodeString; // 加载unicode字符串
PFN_LdrLoadDll fnLdrLoadDll; // 加载dll的函数
// 下面5个是 LdrLoadDll 需要使用的数据, DllName通过RtlInitUnicodeString来提供被 LdrLoadDll 使用
WCHAR DllName[zxsq-anti-bbcode-260]; // dll完整路径
PWCHAR DllPath; // LdrLoadDll第一个参数, Dll路径, 可以为0
ULONG Flags; // LdrLoadDll第二个参数, 标识
UNICODE_STRING UnicodeString; // LdrLoadDll第三个参数, dll路径 UNICODE_STRING 结构
HANDLE hModule; // LdrLoadDll第四个参数, 模块地址, 注入后模块地址保存到这里
// 下面这些成员是获取函数地址使用的数据
PFN_LdrGetProcedureAddress fnLdrGetProcedureAddress; // 获取函数地址
PFN_RtlInitAnsiString fnRtlInitAnsiString; // 加载ansi字符串
ANSI_STRING AnsiString; // 获取函数名的ansi字符串结构
ULONG Ordinal; // LdrGetProcedureAddress 第三个参数
PFN_CallFun fun; // LdrGetProcedureAddress第四个参数, 被调用的函数名 函数原型, GetProcAddress() 得到的函数
PFN_MessageBox pfn_MessageBox; // 信息框函数地址
BOOL isDebug; // 是否调试, 调试的话就弹出信息框
char funName[zxsq-anti-bbcode-260]; // 被调用的函数名
DWORD funArg; // 传递到被调用的函数参数
LPVOID funRet; // 被调用函数的返回值
char argData[zxsq-anti-bbcode-2000]; // 传递到函数里的数据, 参数数据最大支持2000个字节
}*LPCALL_ARGUMENT_DATA;
55 push ebp
8B EC mov ebp,esp
8B 45 08 mov eax,dword ptr [ebp+8]
83 B8 40 02 00 00 00 cmp dword ptr [eax+00000240h],0
74 18 je 00106A37
6A 00 push 0
6A 00 push 0
8B 4D 08 mov ecx,dword ptr [ebp+8]
83 C1 08 add ecx,8
51 push ecx
6A 00 push 0
8B 55 08 mov edx,dword ptr [ebp+8]
8B 82 3C 02 00 00 mov eax,dword ptr [edx+0000023Ch]
FF D0 call eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
83 B9 20 02 00 00 00 cmp dword ptr [ecx+00000220h],0
75 46 jne 00106A89
8B 55 08 mov edx,dword ptr [ebp+8]
83 C2 08 add edx,8
52 push edx
8B 45 08 mov eax,dword ptr [ebp+8]
05 18 02 00 00 add eax,218h
50 push eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
8B 11 mov edx,dword ptr [zxsq-anti-bbcode-ecx]
FF D2 call edx
8B 45 08 mov eax,dword ptr [ebp+8]
05 20 02 00 00 add eax,220h
50 push eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
81 C1 18 02 00 00 add ecx,218h
51 push ecx
8B 55 08 mov edx,dword ptr [ebp+8]
8B 82 14 02 00 00 mov eax,dword ptr [edx+00000214h]
50 push eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
8B 91 10 02 00 00 mov edx,dword ptr [ecx+00000210h]
52 push edx
8B 45 08 mov eax,dword ptr [ebp+8]
8B 48 04 mov ecx,dword ptr [eax+4]
FF D1 call ecx
8B 55 08 mov edx,dword ptr [ebp+8]
83 BA 20 02 00 00 00 cmp dword ptr [edx+00000220h],0
75 07 jne 00106A9C
33 C0 xor eax,eax
E9 83 00 00 00 jmp 00106B1F
8B 45 08 mov eax,dword ptr [ebp+8]
05 44 02 00 00 add eax,244h
50 push eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
81 C1 2C 02 00 00 add ecx,22Ch
51 push ecx
8B 55 08 mov edx,dword ptr [ebp+8]
8B 82 28 02 00 00 mov eax,dword ptr [edx+00000228h]
FF D0 call eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
81 C1 38 02 00 00 add ecx,238h
51 push ecx
8B 55 08 mov edx,dword ptr [ebp+8]
8B 82 34 02 00 00 mov eax,dword ptr [edx+00000234h]
50 push eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
81 C1 2C 02 00 00 add ecx,22Ch
51 push ecx
8B 55 08 mov edx,dword ptr [ebp+8]
8B 82 20 02 00 00 mov eax,dword ptr [edx+00000220h]
50 push eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
8B 91 24 02 00 00 mov edx,dword ptr [ecx+00000224h]
FF D2 call edx
85 C0 test eax,eax
74 04 je 00106AF5
33 C0 xor eax,eax
EB 2A jmp 00106B1F
8B 45 08 mov eax,dword ptr [ebp+8]
8B 4D 08 mov ecx,dword ptr [ebp+8]
03 88 48 03 00 00 add ecx,dword ptr [eax+00000348h]
51 push ecx
8B 55 08 mov edx,dword ptr [ebp+8]
8B 82 38 02 00 00 mov eax,dword ptr [edx+00000238h]
FF D0 call eax
8B 4D 08 mov ecx,dword ptr [ebp+8]
89 81 4C 03 00 00 mov dword ptr [ecx+0000034Ch],eax
8B 55 08 mov edx,dword ptr [ebp+8]
8B 82 4C 03 00 00 mov eax,dword ptr [edx+0000034Ch]
5D pop ebp
C2 04 00 ret 4