Сейчас на форуме: bartolomeo, hgdagon (+6 невидимых) |
eXeL@B —› Программирование —› Внедрение своего кода на С++ в чужой exe |
Посл.ответ | Сообщение |
|
Создано: 08 марта 2006 17:16 · Личное сообщение · #1 |
|
Создано: 08 марта 2006 17:19 · Личное сообщение · #2 |
|
Создано: 08 марта 2006 17:23 · Личное сообщение · #3 |
|
Создано: 08 марта 2006 17:26 · Личное сообщение · #4 |
|
Создано: 08 марта 2006 17:27 · Личное сообщение · #5 Мне надо как внедрить на С++ код exe программы скомпиленой например .... x=fopen("C:/bla.exe","rb+"); fseek(x,NULL,SEEK_END); Вот етот код (ну щас принебрег обьявлением переменых и остальным )ставит фаиловый курор в конец фаила bla.exe так вот как записать Код программы которая етот код вызывает, т.е когда запускаля бы bla.exe Запускался бы уже код bla.exe и+программы на С++ вписаной в конец bla.exe. |
|
Создано: 08 марта 2006 17:28 · Личное сообщение · #6 |
|
Создано: 08 марта 2006 17:36 · Личное сообщение · #7 попробуй просто копировать файл bla.exe КАК, например, обычный текстовый файл. Тоесть копируешь bla.exe как текст и вставляешь в нужную программу. После чего исправляешь код так, чтоб он запускал тот и этот код. Тоесть поменяй EP на начала bla.exe, а в bla.exe кинь переход на настоящий ЕР ссылку. Теоретически должно работать |
|
Создано: 08 марта 2006 17:39 · Личное сообщение · #8 |
|
Создано: 08 марта 2006 17:40 · Личное сообщение · #9 |
|
Создано: 08 марта 2006 17:41 · Личное сообщение · #10 |
|
Создано: 08 марта 2006 17:42 · Личное сообщение · #11 |
|
Создано: 08 марта 2006 17:43 · Поправил: NetSpider · Личное сообщение · #12 Вирус что-ли собрался писать?! Я так понял нужно, чтобы скомпиленный код на С++ внедрялся в чужой EXE и выполнялся до запуска самой исходной программы. Лучше сначала почитай инфу о формате PE, а потом есть несколько вариантов, кот-е описаны на Wasm. Например _http://www.wasm.ru/article.php?article=srp_sintez _http://www.wasm.ru/article.php?article=green2red02 Там есть ещё статейки. P.S. Если асм не знаешь, лучше не берись за это дело. Можно попробовать откомпилировать прогу на С++ так, чтобы получилась одна секция .text с помощью директив #pragma comment(linker, "/NODEFAULTLIB") #pragma comment(linker, "/SUBSYSTEM:WINDOWS") #pragma comment(linker, "/ENTRY:New_WinMain") #pragma comment(linker,"/FILEALIGN:0x200") #pragma comment(linker, "/MERGE:.rdata=.text") #pragma comment(linker, "/MERGE:.data=.text") #pragma comment(linker, "/SECTION:.text,ERw") Так код получится в одной секции. Дальше можно попробовать прикрутить эту секцию к нужному EXE. В зараженном EXE понадобится API для работы получить ты их сможешь, прочитав статью _http://www.wasm.ru/article.php?article=green2red01 Далее небольшой косметический ремонт зараженного EXE(корректировка PE заголовка) и должно заработать. |
|
Создано: 08 марта 2006 17:46 · Личное сообщение · #13 |
|
Создано: 08 марта 2006 17:49 · Личное сообщение · #14 |
|
Создано: 08 марта 2006 17:52 · Личное сообщение · #15 |
|
Создано: 08 марта 2006 18:12 · Личное сообщение · #16 |
|
Создано: 08 марта 2006 18:16 · Личное сообщение · #17 |
|
Создано: 08 марта 2006 18:47 · Личное сообщение · #18 |
|
Создано: 08 марта 2006 19:04 · Личное сообщение · #19 |
|
Создано: 08 марта 2006 19:28 · Личное сообщение · #20 |
|
Создано: 08 марта 2006 19:36 · Личное сообщение · #21 |
|
Создано: 08 марта 2006 19:40 · Личное сообщение · #22 |
|
Создано: 08 марта 2006 19:41 · Поправил: NetSpider · Личное сообщение · #23 Gelios Млин. А что ты на это скажешь? Никакого импорта здесь не будет! #pragma optimize("gsy",on) #pragma comment(linker,"/IGNORE:4078 /IGNORE:4089") #pragma comment(linker, "/MERGE:.rdata=.text") #pragma comment(linker, "/MERGE:.data=.text") #pragma comment(linker, "/SECTION:.text,ERw") #pragma comment(linker, "/ENTRY:New_WinMain") #pragma comment(linker, "/NODEFAULTLIB") #pragma comment(linker, "/SUBSYSTEM:WINDOWS") #pragma comment(linker,"/FILEALIGN:0x200") #include <windows.h> void __stdcall New_WinMain() { __asm{ mov ebx, 2 }; } Вот дизассемблированный код из IDA .text:00401000 ; File Name : C:\Program Files\Microsoft Visual Studio\MyProjects\Probe No Import\Release\Probe No Import.exe .text:00401000 ; Format : Portable executable for 80386 (PE) .text:00401000 ; Imagebase : 400000 .text:00401000 ; Section 1. (virtual address 00001000) .text:00401000 ; Virtual size : 00000008 ( 8.) .text:00401000 ; Section size in file : 00000200 ( 512.) .text:00401000 ; Offset to raw data for section: 00000200 .text:00401000 ; Flags 60000020: Text Executable Readable .text:00401000 ; Alignment : default .text:00401000 .text:00401000 .686p .text:00401000 .mmx .text:00401000 .model flat .text:00401000 .text:00401000 ; ====================================================================== ===== .text:00401000 .text:00401000 ; Segment type: Pure code .text:00401000 ; Segment permissions: Read/Execute .text:00401000 _text segment para public 'CODE' use32 .text:00401000 assume cs:_text .text:00401000 ;org 401000h .text:00401000 assume es:nothing, ss:nothing, ds:_text, fs:nothing, gs:nothing .text:00401000 .text:00401000 ; --------------- S U B R O U T I N E --------------------------------------- .text:00401000 .text:00401000 .text:00401000 public start .text:00401000 start proc near .text:00401000 push ebx .text:00401001 mov ebx, 2 .text:00401006 pop ebx .text:00401007 retn .text:00401007 start endp .text:00401007 .text:00401007 ; ---------------------------------------------------------------------- ----- .text:00401008 align 200h .text:00401008 _text ends .text:00401008 .text:00401008 .text:00401008 end start Если б я не знал, то не писал бы! |
|
Создано: 08 марта 2006 19:44 · Личное сообщение · #24 |
|
Создано: 08 марта 2006 19:45 · Личное сообщение · #25 Gelios Да не, прикрутить можно. у меня пакер весь на С++, включая загрузчик. Maark Смотри че тебе надо сделать. Загрузчик должен иметь релоки, иморты должны быть отдельно, код отдельно. т.е. в разных секциях. лучше его делать ввиде Dll, хотя exe тоже пойдёт. Далее, основная прога должна выдрать код из твоего загрузчика (т.е. целую секцию), и всунуть его в упаковываемую прогу. затем заменить импортами из загрузчика, импорты упаковываемой проги (не забудь сохранить RVA на оригинальную таблицу, её потом обрабатывать надо). ну и используя релоки загрузчика, перенастроить код. вроде всё) но тебе будет немного легче, ибо не пакер пишешь. |
|
Создано: 08 марта 2006 20:04 · Личное сообщение · #26 гг Maark, легче прикрутить винапи чем эти библиотечные функи NetSpider и где же там вызовы fopen и fseek? NEOx, я не отрицаю. но разве когда патчится прога, то там для откртия файла например ктонить станет юзать fopen? очень сомневаюсь имхо вариант Bit-hack-а самый простой тут и не надо заморачиваться. стандартная процедура написания патча |
|
Создано: 08 марта 2006 20:10 · Поправил: NetSpider · Личное сообщение · #27 Gelios Я же писал... В зараженном EXE понадобится API для работы получить ты их сможешь, прочитав статью _http://www.wasm.ru/article.php?article=green2red01 Далее небольшой косметический ремонт зараженного EXE(корректировка PE заголовка) и должно заработать. А fopen и т.п. на фиг не нужен, если есть API из kernel32.dll. А метод Bit-Hack не такой уж и универсальный. Под каждый EXE не подойдет. NEOx Полностью с тобой согласен. Но не слишком ли это громоздко(столько секций в EXE напихать)? |
|
Создано: 08 марта 2006 20:13 · Личное сообщение · #28 |
|
Создано: 08 марта 2006 20:18 · Поправил: NEOx · Личное сообщение · #29 NetSpider По моему методу не надо получать адресса API, через GetProc... можно всё писать как в обычной проге. вот процедура возврата из моего пакера: inline void JumpToOEP() { ////////////////////////////////////////////////////////////// // Copy Dll ret code ////////////////////////////////////////////////////////////// // 33C0 XOR EAX,EAX // 40 INC EAX // C2 0C00 RETN 0C ////////////////////////////////////////////////////////////// CopyMemory(MakePtr(LPVOID, vars.dwRVAStubEntry, dwLoadAddress), "\x33\xC0\x40\xC2\x0C\x00", 6); ////////////////////////////////////////////////////////////// // Restore registers & jump to OEP vars.dwOEP += dwLoadAddress; //__asm POPFD __asm POPAD __asm ADD ESP, 30h __asm PUSH vars.dwOEP __asm RET } CopyMemory у меня RtlCopyMemory!kernel32.dll |
|
Создано: 08 марта 2006 23:51 · Личное сообщение · #30 |
eXeL@B —› Программирование —› Внедрение своего кода на С++ в чужой exe |