解讀 GenerateHashList

解讀 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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章