Сейчас на форуме: bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› Внедрение своего кода на С++ в чужой exe
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 17:16
· Личное сообщение · #1

Подскажите пожалуйста как реализовать ето на С++ а не на АСМ ?



Ранг: 45.5 (посетитель)
Активность: 0.050
Статус: Участник

Создано: 08 марта 2006 17:19
· Личное сообщение · #2

Тебе что, надо внедрить сам код на с++ или написанный на с++, но внедрить этот на асьме?




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 08 марта 2006 17:23
· Личное сообщение · #3

GAMe ovER пишет:
Тебе что, надо внедрить сам код на с++ или написанный на с++, но внедрить этот на асьме?

LOL.



Ранг: 45.5 (посетитель)
Активность: 0.050
Статус: Участник

Создано: 08 марта 2006 17:26
· Личное сообщение · #4

Ara
Я не понял что он имел ввиду. Извиняюсь за флуд, но что с моим топиком?



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 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.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 17:28
· Личное сообщение · #6

Народ давайте флеймить не будем, по делу пишите пожалуйста.



Ранг: 45.5 (посетитель)
Активность: 0.050
Статус: Участник

Создано: 08 марта 2006 17:36
· Личное сообщение · #7

попробуй просто копировать файл bla.exe КАК, например, обычный текстовый файл. Тоесть копируешь bla.exe как текст и вставляешь в нужную программу. После чего исправляешь код так, чтоб он запускал тот и этот код. Тоесть поменяй EP на начала bla.exe, а в bla.exe кинь переход на настоящий ЕР ссылку. Теоретически должно работать



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 17:39
· Личное сообщение · #8

rb+ -ето для работы с бинарными фаилами ( чтение запись)



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 17:40
· Личное сообщение · #9

Больше конечно исходник интересует



Ранг: 45.5 (посетитель)
Активность: 0.050
Статус: Участник

Создано: 08 марта 2006 17:41
· Личное сообщение · #10

Maark пишет:
Больше конечно исходник интересует

В с++ я не силен, поткинуть могу только на делфи. Поищи в гугле, там должно быть много инфы



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 17:42
· Личное сообщение · #11

Можешь на Дельфи код кинуть , поиму



Ранг: 39.6 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 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 заголовка) и должно заработать.




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 08 марта 2006 17:46
· Личное сообщение · #13

GAMe ovER
Огромная просьба - если ты не знаешь ответ-не пиши ничего, ибо пишешь полнейший бред.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 17:49
· Личное сообщение · #14

GAMe ovER
Давай посмотрю на Дельфи Код, Поиму.

NetSpider
Структура PE Фаила знаю, а мне надо на С++ , на асм не надо !!



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 17:52
· Личное сообщение · #15

Я так понял нужно, чтобы скомпиленный код на С++ внедрялся в чужой EXE и выполнялся до запуска самой исходной программы

Вот прально тока не имеет значения до или после запуска исходной программы



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 18:12
· Личное сообщение · #16

Ну ктонить кодом поможет , кажеться GAMe ovER на Дельфи хотел выложить.



Ранг: 39.6 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 08 марта 2006 18:16
· Личное сообщение · #17

Мой ответ не устаривает что-ли?! А исходниками вряд ли кто-то поделится, ибо вирусы в топку!



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 18:47
· Личное сообщение · #18

Твой ответ не может устраивать , мне бы кусок кода который просто забисывает тело скомпиленой проги в чужой ексе



Ранг: 39.1 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 08 марта 2006 19:04
· Личное сообщение · #19

какой си, какой дельфи?! так прикрутить не получится - хотя бы из-за импорта. если fopen и fseek, то можно просто вставить асм код с вызовами винапи CreateFile и SetFilePointer и перенаправить туда EP



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 марта 2006 19:28
· Личное сообщение · #20

Gelios
Если не знаешь не говори! fopen() полностью аналогична CreateFile()
fseek() аналогична SetFilePointer




Ранг: 303.7 (мудрец), 4thx
Активность: 0.190
Статус: Участник
tPORt Manager

Создано: 08 марта 2006 19:36
· Личное сообщение · #21

Maark
Блин, цепляй новую секцию, клади в неё нужный shell-код, исправляй EP у файла на твой код и в конце своего кода ставь jmp OEP. Не забудь про стек. А вообще - задача банальная...



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

Создано: 08 марта 2006 19:40
· Личное сообщение · #22

Bit-hack пишет:
клади в неё нужный shell-код

зачем шелкод, адреса апи можно взять из таблицы импорта...



Ранг: 39.6 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 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

Если б я не знал, то не писал бы!



Ранг: 39.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 08 марта 2006 19:44
· Личное сообщение · #24

Maark
почитай здесь http://akyl.on.ufanet.ru/boriba.htm , там довольно нормальная статейка про добавление своего кода в чужой ехе-шник.



Ранг: 20.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 марта 2006 19:45
· Личное сообщение · #25

Gelios
Да не, прикрутить можно. у меня пакер весь на С++, включая загрузчик.

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

но тебе будет немного легче, ибо не пакер пишешь.



Ранг: 39.1 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 08 марта 2006 20:04
· Личное сообщение · #26

гг
Maark, легче прикрутить винапи чем эти библиотечные функи
NetSpider и где же там вызовы fopen и fseek?
NEOx, я не отрицаю. но разве когда патчится прога, то там для откртия файла например ктонить станет юзать fopen? очень сомневаюсь
имхо вариант Bit-hack-а самый простой тут и не надо заморачиваться. стандартная процедура написания патча



Ранг: 39.6 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 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 напихать)?



Ранг: 20.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 марта 2006 20:13
· Личное сообщение · #28

Gelios

Я написал метод как можно внедрить абсолютно любой С++ код, без всяких извращений в любую прогу. Главное правильно написать то что его будет внедрять. А вариант Bit-hack'a это изврат, легче уж асм заюзать.



Ранг: 20.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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



Ранг: 39.1 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 08 марта 2006 23:51
· Личное сообщение · #30

NetSpider, сори не усмотрел, когда читал
NEOx, в том то и дело что тут было бы легче только асм юзать


 eXeL@B —› Программирование —› Внедрение своего кода на С++ в чужой exe
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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