加载 WCP
功能:
加载WCP.DLL,初始化几个函数:
//----- (1008CBD0)--------------------------------------------------------
signed int __userpurge WcpLoad@<eax>(
const unsigned__int16 *a1@<ecx>,
const unsigned__int16 *a2,
int a3,
HINSTANCE *a4)
{
lpLibFileName =
0;
v4 =a1;
v5 =0;
v6 =wcslen(v4);
if (v6 ==
-8
)
{
v8 =0;
}
else
{
v5 =v6 +
8;
v7 =operator new(2
*
(v6 +
8) +
4);
*v7=
0;
v8 =(WCHAR
*)(v7
+
4);
*(_DWORD
*)v7
= v5;
lpLibFileName = v8;
*v8=
0;
}
v9 =0;
v10 =v5;
while (*v8
)
{
++v8;
if (!--v10
)
goto LABEL_65;
}
if (!v10
)
{
LABEL_65:
v9 =-2147024809;
LABEL_66:
v11 =0;
goto LABEL_13;
}
v11 =v5 - v10;
LABEL_13:
if (v9 <
0)
goto LABEL_119;
v46 =0;
v12 =(char
*)&lpLibFileName[v11];
v13 =v5 - v11;
if (v5 == v11
)
goto LABEL_67;
v14 =v11 + v13
-v5 +
2147483646;
v15 =(char
*)v4
-v12;
while (v14
)
{
v16 =*(_WORD*)&v12[v15];
if (!v16
)
break;
*(_WORD
*)v12
=v16;
--v14;
v12 +=2;
if (!--v13
)
goto LABEL_67;
}
if (v13 )
{
v9 =v46;
}
else
{
LABEL_67:
v12 -=2;
v9 =-2147024774;
}
*(_WORD
*)v12
=
0;
if (v9 <
0)
{
LABEL_119:
CBSWdsLog(0x4000000u,v9,
1, "Failed toconcat string.");
v18 =lpLibFileName;
goto LABEL_42;
}
v17 =0;
v46 =0;
if (!v5
||v5 >
0x7FFFFFFF)
{
v17 =-2147024809;
v46 =-2147024809;
}
v18 =lpLibFileName;
if (v17 <
0)
goto LABEL_71;
v17 =0;
v19 =v5;
v46 =0;
v20 =lpLibFileName;
if (!v5
)
goto LABEL_70;
while (*v20
)
{
++v20;
if (!--v19
)
goto LABEL_70;
}
if (!v19
)
{
LABEL_70:
v17 =-2147024809;
v46 =-2147024809;
LABEL_71:
v21 =0;
goto LABEL_32;
}
v21 =v5 - v19;
LABEL_32:
if (v17 >=
0)
{
v46 =0;
v22 =(char
*)&lpLibFileName[v21];
v23 =v5 - v21;
if (v5 == v21
)
goto LABEL_72;
v24 =v21 + v23
-v5 +
2147483646;
v25 =(char
*)((char
*)L"wcp.dll"- v22);
while (v24
)
{
v26 =*(_WORD*)&v25[(_DWORD)v22];
if (!v26
)
break;
*(_WORD
*)v22
=v26;
--v24;
v22 +=2;
if (!--v23
)
goto LABEL_72;
}
if (!v23
)
{
LABEL_72:
v22 -=2;
v46 =-2147024774;
}
v18 =lpLibFileName;
*(_WORD
*)v22
=
0;
}
v9 =v46;
// v28 v29 是 wcp.dll
的实例句柄
v28 =LoadLibraryW(v18);
v29 =v28;
vpfnSetIsolationIMalloc = GetProcAddress(v28,"SetIsolationIMalloc");
vpfnGetIdentityAuthority = GetProcAddress(v29,"GetIdentityAuthority");
vpfnGetSystemStore = GetProcAddress(v29,"GetSystemStore");
vpfnOpenExistingOfflineStore = GetProcAddress(v29,"OpenExistingOfflineStore");
vpfnWcpInitialize = GetProcAddress(v29,"WcpInitialize");
vpfnWcpShutdown = GetProcAddress(v29,"WcpShutdown");
vpfnWcpSetHelperCallback =
(__int32(__stdcall
*)(struct ICBSHelper
*))GetProcAddress(v29,
"WcpSetHelperCallback");
vpfnWcpSetHelperCallback((struct ICBSHelper
*)&vCsiHelper);
v32 =(int
(__stdcall*)(int*))vpfnWcpInitialize;
if (!vpfnWcpInitialize
|| gulpWcpCookie
)
{
LABEL_56:
hLibModule =v29;
goto LABEL_57;
}
v46 =0;
v33 = vpfnWcpInitialize(&v46);
v27 =v33;
if (_InterlockedCompareExchange((volatile signed__int32
*)&gulpWcpCookie,v46,
0)
)
{
v43 =v46;
vpfnWcpShutdown (v43);
}
LABEL_57:
if (lpLibFileName
)
operator delete((void
*)(lpLibFileName
-2));
return v27;
}
// 100023C0: using guessed type wchar_taWcp_dll[8];
// 1019B5BC: using guessed type __int32 (__stdcall*vpfnWcpSetHelperCallback)(struct ICBSHelper *);
// 1019B8A0: using guessed type int vCsiHelper;
// 1019BA9C: using guessed type unsigned __int32gulpWcpCookie;


1613

被折叠的 条评论
为什么被折叠?



