解讀 GenerateHashList
把幾個初始條件串用固定的符號連接起來:
a4 a1 !a3 , a2 # a5 \n
typedefHRESULT(__fastcall *PGENERATE_HASH_LIST)(
_LUNICODE_STRINGconst &,
_LUNICODE_STRINGconst &,
_LUNICODE_STRINGconst &,
_LUNICODE_STRINGconst &,
_LUNICODE_STRINGconst &,
_LUNICODE_STRING *
);
staticPGENERATE_HASH_LISTGenerateHashList;
GenerateHashList = (PGENERATE_HASH_LIST)CalcFunctionAddress(phWCP, pfb_GenerateHashList);
LUNICODE_STRINGa1;
RtlInitLUnicodeString(&a1, L"a1");
LUNICODE_STRINGa2;
RtlInitLUnicodeString(&a2, L"a2");
LUNICODE_STRINGa3;
RtlInitLUnicodeString(&a3, L"a3");
LUNICODE_STRINGa4;
RtlInitLUnicodeString(&a4, L"a4");
LUNICODE_STRINGa5;
RtlInitLUnicodeString(&a5, L"a5");
PLUNICODE_STRINGa6 = newLUNICODE_STRING();
GenerateHashList(a1, a2, a3, a4, a5, a6);
GenerateHashList(
struct_LUNICODE_STRING const &,
struct_LUNICODE_STRING const &,
struct_LUNICODE_STRING const &,
struct_LUNICODE_STRING const &,
struct_LUNICODE_STRING const &,
classWindows::Auto<struct _LUNICODE_STRING> *
)
//----- (101AC81A)--------------------------------------------------------
signed int __fastcall `anonymous namespace'::GenerateHashList(int a1, int a2, _DWORD *a3, int a4, inta5, int a6)
{
v6 =a3;
v7 =(_DWORD
*)a2;
v19 =a4;
v20 =a1;
v21 =a5;
v25 =a3;
v26 =a2;
Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close(a6);
v27 =0;
v28 =0;
v29 =0;
v16 =0;
v17 =0;
v18 =0;
v13 =0;
v14 =0;
v15 =0;
v10 =0;
v11 =0;
v12 =0;
v22 =0;
v23 =0;
v24 =0;
if (*a3
||*v7
)
{
v16 =*(_DWORD*)v20;
v17 =*(_DWORD*)(v20+
4);
v18 =*(_DWORD*)(v20+
8);
v8 =RtlInitLUnicodeStringFromNullTerminatedString(L"!",
(int)&v13);
if (v8 <
0||
(v8=RtlInitLUnicodeStringFromNullTerminatedString(L"#",
(int)&v22), v8
<0)
)
{
LABEL_10:
Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((int)&v27);
return v8;
}
v7 =(_DWORD
*)v26;
v6 =v25;
}
if (*v6
)
{
if (*v7
)
{
v8 =RtlInitLUnicodeStringFromNullTerminatedString(L",",
(int)&v10);
}
}
v30 =*(_DWORD*)v19;
v31 =*(_DWORD*)(v19+
4);
v32 =*(_DWORD*)(v19+
8);
v33 =v16;
v34 =v17;
v35 =v18;
v36 =v13;
v37 =v14;
v38 =v15;
v39 =*v25;
v40 =v25[1];
v41 =v25[2];
v42 =v10;
v43 =v11;
v44 =v12;
v45 =*(_DWORD*)v26;
v46 =*(_DWORD*)(v26+
4);
v47 =*(_DWORD*)(v26+
8);
v48 =v22;
v49 =v23;
v50 =v24;
v51 =*(_DWORD*)v21;
v52 =*(_DWORD*)(v21+
4);
v53 =*(_DWORD*)(v21+
8);
v8 = RtlConcatenateLUnicodeStrings(0, 8u,
&v30,
(int)&v27);
v22 = v27;
v23 =v28;
v24 =v29;
v27 =*(_DWORD*)a6;
v28 =*(_DWORD*)(a6+
4);
v29 =*(_DWORD*)(a6+
8);
*(_DWORD
*)a6
=v22;
*(_DWORD
*)(a6
+
4) = v23;
*(_DWORD
*)(a6
+
8) = v24;
Windows::AutoPODBase<_LUNICODE_STRING,Windows::Auto<_LUNICODE_STRING>>::Close((int)&v27);
return 0;
}