Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Запись в чужой процесс.

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Запись в чужой процесс.
Имя
Сообщение << Старые топики   Новые топики >>
Запись в чужой процесс. - 2009-07-20 12:10:34.406666   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Сразу говорю. Искал 4 дня. Даже на забугорных форумах. Был обижен австралйцами. Но решения так и не нашел.
Есть чужой процесс. Нужно в нем перезаписать пару байтиков. Вот мой код (PoC. так что немного кривой), который компилится, выолняется без исключений, но не делает того, что мне надо.
Я вобщем С знаю, но работать с процессам не приходилось раньше.
HWND hwnd; int go=4; float x=1,y=2,z=3; DWORD procid; HANDLE hproc; hwnd=FindWindow(NULL,"ххх");//получаем хендл окна if (hwnd==0) ShowMessage("ххх не запущен");//проверяем создано ли окно GetWindowThreadProcessId(hwnd,&procid);//получаем pid hproc = OpenProcess( PROCESS_ALL_ACCESS,TRUE, procid );//получаем хендл процесса if(!WriteProcessMemory(hproc,(LPVOID)(CTM_BASEX),&x,sizeof(x),NULL)) ShowMessage("Failed"); WriteProcessMemory(hproc,(LPVOID)(CTM_BASEY),&y,sizeof(y),NULL); WriteProcessMemory(hproc,(LPVOID)(CTM_BASEZ),&z,sizeof(z),NULL); WriteProcessMemory(hproc,(LPVOID)(CTM_BASESTATUS),&go,sizeof(go),NULL); Судя по вылетеющему меседжбоксу, процесс записи обламывается на корню. ЧЯДНТ?
ЗЫ. Константы предопределены выше.
Post #: 1
RE: Запись в чужой процесс. - 2009-07-20 12:19:29.130000   
Mатцал Коушек

Сообщений: 10407
Оценки: 91
Присоединился: 2008-07-09 10:27:49.520000
Может лучше, не менять чужие байты, а целиком в чужой процесс внедрить свой.
Получается без проблем, пробовал много раз.

Типа, запущен блокнот и висит в процессах, он выполняет свой код, но, ещё и выпоняется твой файл, но его уже в процессах, конечно, не будет.
Post #: 2
RE: Запись в чужой процесс. - 2009-07-20 12:27:21.726666   
uzzzver4556464

Сообщений: 230
Оценки: 0
Присоединился: 2008-07-31 01:42:54.426666
А в области памяти куда пишешь атрибуты каки? Если эта страница имеет атрибуты Read Execute то с записью облом (стандартные атрибуты на секции кода), так что VirtualProtect в помощь.
Post #: 3
RE: Запись в чужой процесс. - 2009-07-20 12:28:05.050000   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Нет. Создавать свой поток в процессе или даже подсовывать свой код крайне нежелательно. Там стоит оч мощная защита, обойти которую не представляется возможности ввиду оооогромного (для анализа) куска памяти, занятого процессом.
UPD:
quote:

А в области памяти куда пишешь атрибуты каки? Если эта страница имеет атрибуты Read Execute то с записью облом (стандартные атрибуты на секции кода), так что VirtualProtect в помощь.

Вот я тоже думал что запись обламывается из-за отсуствия атрибута на запись, но тогда по идее должно было вылететь исключение?
Post #: 4
RE: Запись в чужой процесс. - 2009-07-20 12:33:46.776666   
uzzzver4556464

Сообщений: 230
Оценки: 0
Присоединился: 2008-07-31 01:42:54.426666
А попробуй чем …. не шутит. кстати месаджБокс пренадлежит той программе которую ты ломаешь? Она ведь могла поставить свой сех-обработчик
и все исключения обрабатывать сама.
Post #: 5
RE: Запись в чужой процесс. - 2009-07-20 12:37:59.366666   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
Может записываешь туда куда нельзя?
Post #: 6
RE: Запись в чужой процесс. - 2009-07-20 13:07:31.530000   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Прога конечно зверь, отладчики и дамперы шлет (я сам не крекер, бороться как не знаю). Наверно int 3 перехыватывает. Но меседжбокс оч врятли)
Мне нужно произвести запись в область 0x01118120. По таблице секций как я понимаю это .zdata, а на нее стоят права read|write. (таблица секций прикреплена)
Адресс этот я на сам взял, добрые люди поделились.

Post #: 7
RE: Запись в чужой процесс. - 2009-07-20 13:26:57.913333   
VaZoNeZ

Сообщений: -6758
Оценки: 0
Присоединился: 2008-10-31 14:38:43.796666
quote:

А попробуй&nbsp;чем …. не шутит. кстати месаджБокс пренадлежит той программе которую ты ломаешь? Она ведь могла поставить свой сех-обработчик и все исключения обрабатывать сама.


ну так вроде этот код выплевывает мессаджбокс))
quote:

ShowMessage("Failed");

Post #: 8
RE: Запись в чужой процесс. - 2009-07-20 13:36:55.863333   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Да. Я о том что меседжбокс не перехватывается этим злым процессом, над которым я хочу надругаться, а нативный.
А что менять аттрибуты то если и так стоят права на запись? (если я с секцией не ошибся).
Post #: 9
RE: Запись в чужой процесс. - 2009-07-20 16:04:42.190000   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
Imagebase у программы какой ?
Post #: 10
RE: Запись в чужой процесс. - 2009-07-20 16:21:57.140000   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
0x00400000
дефолтный.
Post #: 11
RE: Запись в чужой процесс. - 2009-07-20 17:33:51.836666   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
01118120h - 00400000h = 00D18120h

Стало быть это секция .data, судя по скрину у нее C0000040h - есть права на запись. Попробуй свой код перекомпилируй для более простой программы типа helloworld. Если вернет ошибку можно будет подебажить.
Post #: 12
RE: Запись в чужой процесс. - 2009-07-20 17:59:27.273333   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Спасибо. Я уже стало быть сам хотел написать PoC код.
Создать 2 проги.
1) Выводит меседжбокс
2) Модифицирует память первой
Потом поставить в первой бряк на меседжбокс
подменить с помощью второй адресс строки, которая выводится и дать право первой выполнятся.
Но этим я наверно вечером займусь.
Пока бьюсь над более простой задачей - прочитать пару байт чужого процесса. Как оказалось задача не намного легче.
Post #: 13
RE: Запись в чужой процесс. - 2009-07-20 18:21:18.273333   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
quote:

Пока бьюсь над более простой задачей - прочитать пару байт чужого процесса. Как оказалось задача не намного легче.


Ничего там сложного

.............. push dword ptr ds: [pid] push&nbsp; 0 push 10h call OpenProcess; открываем процесс mov dword ptr ds:[hid], eax; сохраним хэндл push 0 push 4 push dword ptr ds: [size_of_target_process]; размер блока push dword ptr ds: [base_of_target_process]; начало блока push dword ptr ds: [hid] call&nbsp; VirtualProtectEx;устанавливаем новые атрибуты памяти push dword ptr ds: [skoka_prochitali]; сколько прочитали push dword ptr ds: [size_of_target_process]; сколько читаем push dword ptr ds: [adress_pamyati]; куда читаем push dword ptr ds: [base_of_target_process]; начало блока push dword ptr ds: [hid] call ReadProcessMemory; Читаем данные push dword ptr ds: [hid] call CloseHandle; Отключаемся от процесса
Post #: 14
RE: Запись в чужой процесс. - 2009-07-20 18:35:31.306666   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Мне бы на С реализацию. Ибо проект быстро разрастется асмом там будет оч неинтересно тыкать.
Код на чтение таков.
HWND hwnd; float x,y,z; DWORD procid; HANDLE hproc; hwnd=FindWindow(NULL,"ххх"); if (hwnd==0) { ShowMessage("ххх не запущен"); exit;} GetWindowThreadProcessId(hwnd,&procid); hproc=OpenProcess(ACCESS, 1, (int)procid ); if(!ReadProcessMemory(hproc,(LPCVOID)(CTM_BASEX),(LPVOID)&x,sizeof(x),NULL)) ShowMessage("1 Failed"); ReadProcessMemory(hproc,(LPCVOID)(CTM_BASEY),(LPVOID)&y,sizeof(y),NULL); ReadProcessMemory(hproc,(LPCVOID)(CTM_BASEZ),(LPVOID)&z,sizeof(z),NULL); ShowMessage(GetLastError()); Edit1-&gt;Text=FloatToStrF(x,ffFixed,5,5); Edit2-&gt;Text=FloatToStrF(y,ffFixed,5,5); Edit3-&gt;Text=FloatToStrF(z,ffFixed,5,5); Так вот. Первый меседжбокс вылетает (чтение не происходит). GetLastError() выдает 6, что как мне помнится из msdn значит неверный хендл. Т.е. я хендл неверно получаю (hproc). procid верный. под отладкой проверял.
Post #: 15
RE: Запись в чужой процесс. - 2009-07-20 18:51:48.366666   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
Лучше скомпилируй и выложи бинарник
Post #: 16
RE: Запись в чужой процесс. - 2009-07-21 11:33:20.033333   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
Отчет о проделанной работе… меня поверг в ступор.(поначалу)
Было написано две программы
1) msgbox.exe Окно с кнопкой, при нажатии на которую вылетал меседжбокс (Листинг1)
2) PoC.exe Окно с кнопкой, при нажатии на которую происходила запись в память первой программы в область, которая выводится меседжбоксом (Листинг2)
MessageBox(NULL,"Data is safe ","Test",NULL);
Листинг1
#define ADDR 0x00403190// адресс был отловлен в ольке #define ACCESS 0x1F0FFF HWND hwnd; DWORD procid; HANDLE hproc; char x[]="Data is hacked";//строка, на которую будем заменять hwnd=FindWindow(NULL,"Test");//получаем хендл окна if (hwnd==0) ShowMessage("Test не запущен");//проверяем есть ли окно GetWindowThreadProcessId(hwnd,&procid);// получаем PID ShowMessage(IntToStr((int)procid));//Выводим pid на всякий hproc = OpenProcess( ACCESS,1,procid );//Получаем хендл процесса if (hproc==0) ShowMessage(IntToStr((int)hproc));//Выводим хендл процесса if (WriteProcessMemory(hproc,(LPVOID)(ADDR),(LPCVOID)&x,sizeof(x),NULL)) ShowMessage("Запись произошла успешно");//производим запись Листинг2
Запускаем 1 прогу. Жмем кнопку. Выскакивает "Data is safe". Не закрываем.
Запускаем 2 прогу. Жммем кнопку. Вылетает PID процесса. Потом нам пишут что запись произошла успешно.
Проверяем. Возвращаемся к 1 проге. Жмем кнопку, и получаем "Data is hacked", что значит, что мы перезаписали данные 1-ой проги из 2-ой.
Сдедовательно код рабочий. Я долго не мог понять почему же тогда с тем другим процессом так не получется. Где-то наткнулся на привелегии процессов. Дал своему процессу привелегии SE_DEBUG_NAME и все отлично заплясало). О том как выставлять\снимать привелегии написано здесь http://msdn2.microsoft.com/en-us/library/aa446619(VS.85).aspx
PS. Бинарники здесь. Кто хочет может поиграться. Вирей нет. Проверяйте не виртотале кто сомневается.
Post #: 17
RE: Запись в чужой процесс. - 2009-07-22 01:46:54.653333   
DenCoder

Сообщений: 49
Оценки: 0
Присоединился: 2009-07-07 19:45:30.303333
Молодец!!!… Сам разобрался и другим дал ссылку
Post #: 18
RE: Запись в чужой процесс. - 2009-11-05 22:44:33.370000   
DenCoder

Сообщений: 49
Оценки: 0
Присоединился: 2009-07-07 19:45:30.303333
У меня проблема с инжектом в чужой процесс. Точнее на моей тачке все ОК, а вот на другой из 25 процессов инжектятся только 2. Причина в этом - нет доступа на открытие процесса. Присвоил процессу SE_DEBUG_NAME и у меня стали открываться даже smss, csrss, lsass, winlogon, services и т.д. с правами PROCESS_VM_OPERATION, PROCESS_VM_READ, PROCESS_VM_WRITE, PROCESS_QUERY_INFORMATION, PROCESS_SUSPEND_RESUME. А вот на другом компьютере с такой же маской доступа и такой же включенной привилегией нифига. Хотя там тоже запускается моя прога под админом. Хотелось бы разобраться, в чем дело? Можно ли заставить OpenProcess открывать все без исключения процессы на всех машинах?
Post #: 19
RE: Запись в чужой процесс. - 2009-12-11 19:43:02.636666   
levinsoft

Сообщений: 5
Оценки: 0
Присоединился: 2007-02-21 06:13:15.983333
furiousangel, подскажи, а вообще то, антивирусники хоть как то ругаются на твои действия? Вапче то ковыряние чужого процесса эт должно расцениваться антивирусом как Inside. Я это к тому, что как раз не могу добиться от антивируса расценивания моих действий как противоправных…

З.Ы. Если не сложно, перезалей плиз свои исходники. хочу попробовать поиграться:)
Post #: 20
RE: Запись в чужой процесс. - 2009-12-20 21:37:41.210000   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
DenCoder Он и открывает. Надо просто разобраться какие он не открывает. Потом почему. Я в таких случаях в дебаг версиях выкидываю меседжбоксы с промежуточными результатами, и проверяю их. Так же проверку возвращаемых значений функций и GetLastError(). Потом это все легко убирается, но очень помогает понять в чем проблема

levinsoft Нод молчит. Что и неудивительно. Антивирус в классическом его виде проверяет лишь файлы на наличие вредоносного кода. А вот фаерволы и ids-ки молчат не будут. Вот бинарники. Перезалил.
Post #: 21
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Запись в чужой процесс.







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.