Сейчас на форуме: zombi-vadim, zds (+4 невидимых)

 [email protected] —› Программирование —› Работа с PEB
Посл.ответ Сообщение

Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 08 ноября 2013 09:00
· Личное сообщение · #1

Пытаюсь скрыть dll в процессе.
Выкидываю звено из пеба
Code:
  1.   Entry -> Blink -> Flink = Entry -> Flink;

IdaPro не видит имя файла, но пустое имя есть в списке, где то храниться количество загруженных dll? Или что то забыл выкинуть? Может Vad?



Ранг: 88.3 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 08 ноября 2013 09:46
· Личное сообщение · #2

Что если dll просто инжектить в процесс или самому мапить ее в процессе, тогда ее и в PEB просто не будет.



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 08 ноября 2013 10:06
· Личное сообщение · #3

Ну я её инжектю, и в PEB присутствует.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 08 ноября 2013 10:31 · Поправил: Dr0p
· Личное сообщение · #4

MickeyBlueEyes

Там 3 списка.

> Может Vad?

Именно. Это проекция файловой секции. NtQueryVM(MemoryMappedFilenameInformation) вернёт имя файла. Нужна загрузка из памяти. Ну а по нормальному - модуль из памяти грузится, затем выгружается без освобождения проекции.

Берите LWE. Там нтлдр переносится в буфер и модифицируется для эмуляции секций. Вам нужно в этом буфере изменить NtUnmapViewOfSection, просто скипать её. Тогда вызываем в буфере LdrUnloadDll() и модуль будет полностью скрыт.

| Сообщение посчитали полезным: MickeyBlueEyes

Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 08 ноября 2013 10:47
· Личное сообщение · #5

Спасибо большое, всё понятно, только если можно что там по поводу 3х списков? Есть еще пару списков?




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 08 ноября 2013 11:01
· Личное сообщение · #6

MickeyBlueEyes

Опенсурсно.




Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 08 ноября 2013 11:44 · Поправил: Nightshade
· Личное сообщение · #7

В инете полно кодесов типа такого
Code:
  1. void  EraseHeaders(HINSTANCE hModule1)
  2. {
  3.  
  4.          PIMAGE_DOS_HEADER pDoH;
  5.          PIMAGE_NT_HEADERS pNtH;
  6.          DWORD i, ersize, protect;
  7.  
  8.          if (!hModule1) return;
  9.  
  10.          pDoH = (PIMAGE_DOS_HEADER)(hModule1);
  11.  
  12.          pNtH = (PIMAGE_NT_HEADERS)((LONG)hModule1 + ((PIMAGE_DOS_HEADER)hModule1)->e_lfanew);
  13.  
  14.          ersize = sizeof(IMAGE_DOS_HEADER);
  15.          if ( VirtualProtect(pDoH, ersize, PAGE_READWRITE, &protect) )
  16.          {
  17.                  for ( i=0; i < ersize; i++ )
  18.                               *(BYTE*)((BYTE*)pDoH + i) = 0;
  19.          }
  20.  
  21.          ersize = sizeof(IMAGE_NT_HEADERS);
  22.          if ( pNtH && VirtualProtect(pNtH, ersize, PAGE_READWRITE, &protect) )
  23.          {
  24.                  for ( i=0; i < ersize; i++ )
  25.                               *(BYTE*)((BYTE*)pNtH + i) = 0;
  26.          }
  27.          return;
  28. }
  29.  
  30. typedef struct _UNICODE_STRING 
  31. {
  32.          USHORT Length;
  33.          USHORT MaximumLength;
  34.          PWSTR Buffer;
  35. } UNICODE_STRING, *PUNICODE_STRING;
  36.  
  37. typedef struct _ModuleInfoNode
  38. {
  39.          LIST_ENTRY LoadOrder;
  40.          LIST_ENTRY InitOrder;
  41.          LIST_ENTRY MemoryOrder;
  42.          HMODULE baseAddress;
  43.          unsigned long entryPoint;
  44.          unsigned int size;
  45.          UNICODE_STRING fullPath;
  46.          UNICODE_STRING name;
  47.          unsigned long flags;
  48.          unsigned short LoadCount;
  49.          unsigned short TlsIndex;
  50.          LIST_ENTRY HashTable;
  51.          unsigned long timestamp;
  52. } ModuleInfoNode, *pModuleInfoNode;
  53.  
  54. typedef struct _ProcessModuleInfo
  55. {
  56.          unsigned int size;
  57.          unsigned int initialized;
  58.          HANDLE SsHandle;
  59.          LIST_ENTRY LoadOrder;
  60.          LIST_ENTRY InitOrder;
  61.          LIST_ENTRY MemoryOrder;
  62. } ProcessModuleInfo, *pProcessModuleInfo;
  63.  
  64. #define UNLINK(x) (x).Blink->Flink = (x).Flink; \
  65.          (x).Flink->Blink = (x).Blink;
  66.  
  67. int HideModule( HMODULE hMod )
  68. {
  69.          ProcessModuleInfo *pmInfo;
  70.          ModuleInfoNode *module;
  71.  
  72.          _asm
  73.          {
  74.                  mov eax, fs:[18h]
  75.                  mov eax, [eax + 30h]
  76.                  mov eax, [eax + 0Ch] 
  77.                  mov pmInfo, eax
  78.          }
  79.  
  80.          module = (ModuleInfoNode *)(pmInfo->LoadOrder.Flink);
  81.  
  82.          while(module->baseAddress && module->baseAddress != hMod){
  83.                  module = (ModuleInfoNode *)(module->LoadOrder.Flink);}
  84.  
  85.          if(!module->baseAddress){
  86.                  return 0;}
  87.  
  88.          UNLINK(module->LoadOrder);
  89.          UNLINK(module->InitOrder);
  90.          UNLINK(module->MemoryOrder);
  91.          UNLINK(module->HashTable);
  92.          memset(module->fullPath.Buffer, 0, module->fullPath.Length);
  93.          memset(module, 0, sizeof(ModuleInfoNode));
  94.  
  95.          return 1;
  96. }

Только учти, что потом отвалятся некоторые апи. Например для работы с ресурсами.

| Сообщение посчитали полезным: MickeyBlueEyes


Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 08 ноября 2013 15:35 · Поправил: Dr0p
· Личное сообщение · #8

Nightshade

Точнее отвалится вообще всё. SEH работать не будет, шадов тоже скорее всего. В таких кодах можно юзать только апи ядра и изъёбства, техники типо STPT(stack protection). Это сложный малварный код. Как у меня. Думаю это тс не доступно, если он такую примитивную задачу решить не может.



Ранг: 51.6 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 08 ноября 2013 22:08
· Личное сообщение · #9

Да всё могу, просто всего второй день по недрам окошек гуляю.
А так да, с кодом сверху отвалилось больше чем нужно было, но зато есть что подчеркнуть )))
Спасибо отписавшим, пошёл дальше гулять по недрам.


 [email protected] —› Программирование —› Работа с PEB
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати