Трюк с PE (NULL EntryPoint)

Тема в разделе "WASM.WIN32", создана пользователем JCronos, 22 апр 2009.

  1. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Хорошо,завтра выложу.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    GoldFinch
    Exe загружается также как и Dll. И на оборот, из Dll можно создать процесс. Если у вас с первым не будет проблем, то создать процесс средствами винапи из Dll не получится лишь по одной причине - перед созданием процесса выполняется проверка характеристик модуля. Юзается NtQuerySection(SectionImageInformation) и проверяется поле Characteristics на флаг IMAGE_FILE_EXECUTABLE_IMAGE. Соответственно это флаги из заголовка модуля с темже именем. Если этот флажёк сброшен - будет возвращена ошибка. Если эту проверку пропустить процесс будет создан.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    [Исправьте там что проверка в юзермоде.]
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Нее, не много не так. Забыл. Там проверка на флаг IMAGE_FILE_DLL - он должен быть сброшен, посмотрел.
    Сделойте возможность редактировать постенги, что это такое..
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    По мотивам kaspersky можно еще вот так извернуться:

    Код (Text):
    1. format PE at 0x0
    2.  
    3. include 'E:\Program Files\fasmw16729\INCLUDE\win32a.inc'
    4.  
    5.  push 0x0
    6.  push 0x0
    7.  push string
    8.  push 0x0
    9.  call [MessageBox]
    10.  ret
    11.  
    12. string: db 'I am strange PE!', 0x0
    13.  
    14. data import
    15.  library user,'USER32.DLL'
    16.  
    17.  import user,\
    18.         MessageBox,'MessageBoxA'
    19. end data
    20.  
    21. section '.reloc' fixups data discardable
    Загрузчик все стерпит :). Главное, чтобы релокации были.
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Чччччерррррт, путь убрать забыл.

    Глас вопиющего в пустыне:
    Верните редактирование постов, пожалуйста.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Запуск процесса из длл(xpsp3 работает): http://narod.ru/disk/7980989000/ps.zip.html
     
  8. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Слагка запутался. И по сему уточню, что не имел ввиду изменение загрузчика. Просто длл и екзе могут быть одним м тем же файлом, изменив 1 бит которого можно превращать одну сущногсть в другую...
     
  9. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Хотя думаю что говорим всё же об одном)
    Код (Text):
    1. bool ConvertPE(PCHAR path)
    2. {
    3.     IMAGE_DOS_HEADER* mz_head;
    4.     IMAGE_FILE_HEADER* pe_head;
    5.     char pe[] = "PE\0\0";
    6.     HANDLE hFile=CreateFile(path, GENERIC_READ | GENERIC_WRITE,
    7.                         FILE_SHARE_WRITE, NULL,
    8.                         OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    9.     if (!hFile)
    10.     {
    11.         return false;
    12.     }
    13.  
    14.     HANDLE hMap=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL);
    15.     if (!hMap)
    16.     {
    17.         CloseHandle(hFile);
    18.         return false;
    19.     }
    20.     PVOID hMapFile=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
    21.     if (!hMapFile)
    22.     {
    23.         CloseHandle(hMap);
    24.         CloseHandle(hFile);
    25.         return false;
    26.     }
    27.     mz_head=(IMAGE_DOS_HEADER*)hMapFile;
    28.     pe_head =(IMAGE_FILE_HEADER*)((char*)hMapFile + mz_head->e_lfanew);
    29.    
    30.     if ( strcmp(pe,(const char *)pe_head) != 0)
    31.         {
    32.             UnmapViewOfFile(hMapFile);
    33.             CloseHandle(hMap);
    34.             CloseHandle(hFile);
    35.             return false;
    36.         }
    37.     pe_head =(IMAGE_FILE_HEADER*)((char*)hMapFile + mz_head->e_lfanew+sizeof(DWORD));
    38.     pe_head->Characteristics =IMAGE_FILE_32BIT_MACHINE|IMAGE_FILE_DLL|IMAGE_FILE_EXECUTABLE_IMAGE;
    39.     UnmapViewOfFile(hMapFile);
    40.     CloseHandle(hMap);
    41.     CloseHandle(hFile);
    42.    
    43.    
    44.     return true;
    45. }
    -----------
    Код (Text):
    1. BOOL APIENTRY DllMain( HMODULE hModule,
    2.                        DWORD  ul_reason_for_call,
    3.                        LPVOID lpReserved
    4.                      )
    5. {
    6.     hInstance=hModule;
    7.    
    8.  
    9.     VirtualQuery(DllMain,&mbi,sizeof(mbi));
    10.     GetModuleFileName((HMODULE)mbi.AllocationBase,(LPCH)pPath,MAX_PATH);
    11.     slen=lstrlen((LPCSTR)pPath);
    12.     if (!lstrcmpi((LPCSTR)(pPath+slen-3),"exe"))
    13.     {
    14.  
    15.         ConvertPE(траляля);
    16.         return true;
    17.     }
    18.  
    19.    
    20.    
    21.     switch (ul_reason_for_call)
    22.     {
    23.         case DLL_PROCESS_ATTACH:           
    24.            
    25.    
    26.             return true;
    27.         case DLL_THREAD_ATTACH:
    28.             return true;
    29.             break;
    30.         case DLL_THREAD_DETACH:
    31.             return true;
    32.             break;
    33.         case DLL_PROCESS_DETACH:
    34.  
    35.             HeapFree(hHeap,0,txt);
    36.             return true;
    37.     }
    38.  
    39.     return true;
     
  10. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    если исходник в 2-3 строки то может и такзагрузить вобщем то получается, но вот чтобы это все нормально работало - нет, видать и-за того что на колбек DllMain много ограничений наложено.
     
  11. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    ohne
    Поспешные выводы. Если соблюдать все правила ДДЛ и в случае если мы не ДЛЛ,то только тогда вызывать 'точку входа' нашего 'приложения'. Из этого кода оставлен лишь каркас.
     
  12. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    ohne
    Ограничения есть, но вот проблемы особой я не вижу. Если видишь, в студию))
     
  13. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    была на васме тема ищи
    например потоки создавать не безопасно - даже в мсдн об этом написано
    что если в екзе есть статическая тлс?
    попробуй там поюзать что то серъезное а не только инициализацию данных каких-то и рет - толку вобщем один буй никакого

    в конечном итоге ты прав - загрузить можно кое что - разница только 1 флаг
    но смысл
    возьми любую нормальную прогу добавь туда в экспорт директорию например экспорт baseofdata
    ну и флаг смени - работать не будет
    просто грязный хак и ничего более
     
  14. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    ohne
    Сдается мне что у вас будут проблемы с DEP :))
     
  15. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    dermatolog
    ну на 64х разрядных windows да
    но 32х разрядных /EXECUTE ведь по-умолчанию и DEP отключен
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ограничений нет. Кто пишет код на пограничном уровне(Ki*), для тех нет никаких проблем. Другое если у вас проблемы со средой.
    ohne
    Имхо это только для вас границы.
     
  17. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    Clerk
    все ясно

    но толку все равно нет никакого
     
  18. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    punxer
    где обещаный запуск DLL? я так весь попкорн доем раньше времени...
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    На InitRoutine() какие ограничения ?
     
  20. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    deLight
    я тоже сегодня попкорном на ночь запасся .D
    вот час назад доел .D