首页
社区
课程
招聘
[分享]重读老文章:DLL注入的又一个梗
发表于: 2014-4-20 11:44 25814

[分享]重读老文章:DLL注入的又一个梗

2014-4-20 11:44
25814
收藏
免费 5
支持
分享
最新回复 (35)
雪    币: 154
活跃值: (91)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
26
用户模式下的远程线程能不能用这个ClientLoadLibrary来给其他进程注入Dll呢?
2014-4-24 13:26
0
雪    币: 212
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
支持Tishion,期待详细
2014-4-25 13:32
0
雪    币: 9560
活跃值: (2391)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
DLL注入的又一个梗 ,怎么都这么哏!
2014-4-29 00:55
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
在WIN7下的情况

int __stdcall __ClientLoadLibrary(int a1)
{
  HMODULE v1; // edi@4
  const WCHAR *v2; // eax@5
  HMODULE v3; // esi@6
  int v4; // edi@6
  FARPROC v5; // eax@7
  CHAR ProcName; // [sp+18h] [bp-108h]@1
  char Dst; // [sp+19h] [bp-107h]@1
  unsigned int v9; // [sp+11Ch] [bp-4h]@1
  int v10; // [sp+120h] [bp+0h]@1

  v9 = (unsigned int)&v10 ^ __security_cookie;
  ProcName = 0;
  memset(&Dst, 0, 0x103u);
  if ( *(_DWORD *)(a1 + 8) && !*(_DWORD *)(a1 + 0x14) )
    FixupCallbackPointers(a1);
  v1 = LoadLibraryExW(*(LPCWSTR *)(a1 + 0x1C), 0, 8u);
  if ( v1 )
  {
    v2 = *(const WCHAR **)(a1 + 0x24);
    if ( v2 )
    {
      v3 = v1;
      v4 = WideCharToMultiByte(0, 0x400u, v2, -1, &ProcName, 260, 0, 0);
      if ( !v4 )
        goto LABEL_16;
      v5 = GetProcAddress(v3, &ProcName);
      if ( !v5 || !InitUserApiHook(v3, v5) )    // InitUserApiHook条件不成立 导致Dll被马上卸载了
        v4 = 0;
      if ( !v4 )
LABEL_16:
        FreeLibrary(v3);
    }
  }
  return XyCallbackReturn(0);


// 参数1:DLL模块句柄 参数2:DLL导出函数的地址
signed int __stdcall InitUserApiHook(int a1, int a2)
{
  signed int v2; // edi@1
  _UNKNOWN *v3; // esi@1
  unsigned int v5; // [sp+8h] [bp-68h]@1
  int v6; // [sp+14h] [bp-5Ch]@7
  int v7; // [sp+38h] [bp-38h]@7
  int v8; // [sp+48h] [bp-28h]@7
  int (__stdcall *v9)(int); // [sp+5Ch] [bp-14h]@5

  v2 = 0;
  ResetUserApiHook(&v5);
  v3 = &gcsUserApiHook;
  RtlEnterCriticalSection(&gcsUserApiHook);
  if ( !((int (__stdcall *)(_DWORD, unsigned int *))a2)(0, &v5) || v5 <= 0 || v9 != ForceResetUserApiHook )
  {
    RtlLeaveCriticalSection(&gcsUserApiHook);
    return 0;
  }
  if ( ghmodUserApiHook )
  {
    if ( ghmodUserApiHook != a1 )               // 这里条件成立了 函数就跳出了 导致DLL被卸载 这里是什么东西不明白?
      goto LABEL_9;
    ++gcLoadUserApiHook;
  }
  else
  {
    ghmodUserApiHook = a1;
    memcpy(&guah, &v5, 0x64u);
    gpfnInitUserApi = a2;
    gcLoadUserApiHook = 1;
    gfUserApiHook = 1;
    CopyMsgMask((int)&unk_77D7978C, (int)&v6, &grgbDwpLiteHookMsg, 128);
    CopyMsgMask((int)&unk_77D797B0, (int)&v7, &grgbWndLiteHookMsg, 128);
    CopyMsgMask((int)&unk_77D797C0, (int)&v8, &grgbDlgLiteHookMsg, 128);
    v3 = &gcsUserApiHook;
  }
  v2 = 1;                                       // 表示函数成功
LABEL_9:
  RtlLeaveCriticalSection(v3);
  if ( !v2 )
    ((void (__stdcall *)(signed int, _DWORD))a2)(1, 0);
  return v2;
}
2014-4-29 15:54
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
30
这个问题DLL里做点处理就好了~
比如DLL里再加载一个DLL~
2014-4-29 16:12
0
雪    币: 255
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
mark一下 有空学习
2014-4-30 10:04
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
好啊……
2014-4-30 18:36
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
qq密码,无论是过去还是现在都能直接用键盘钩子直接搞定
2014-4-30 18:38
0
雪    币: 69
活跃值: (242)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wmg
34
v老大的文章总是点到为止~
2014-8-6 23:00
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
35
p->ptrApiString = NULL;  不更和谐么?导出函数都不用



ProcessNotifyRoutine里面user32.dll都没有,注一个Crash一个
2014-8-7 18:50
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
占坑 ...这个真的看不懂。。
2014-8-14 14:21
0
游客
登录 | 注册 方可回帖
返回
//