С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
anubis52
0 / 0 / 0
Регистрация: 16.02.2013
Сообщений: 2
#1

Нужно осуществить инжект ассемблерного кода в процесс - C++

19.02.2013, 22:53. Просмотров 845. Ответов 12
Метки нет (Все метки)

В процессе по определённому адресу нужно заменить инструкцию.
Как указать на адрес?
Тоесть мне нужно заNOPать инструкцию. НО я не знаю как это сделать
В дизассемблере можно просто выделить инструкцию и заменить её.
Но как сделать то же самое средствами C++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 22:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно осуществить инжект ассемблерного кода в процесс (C++):

Инжект DLL в процесс - C++
Сделал тестовую длл ну и заинжектил ее в процесс только как я понимаю мне должна была открыться ссылка но ничего нет. Код самой длл: ...

Запуск ассемблерного кода на выполнение из main() - C++
Добрый день. Подскажите, если есть готовый файл на ассемблерном коде, то как его можно запустить на выполнение из C++? Взаимодействовать...

Вставка ассемблерного кода в С++ для очистки экрана - C++
#include "stdafx.h" #include <conio.h> #include "iostream" #include <fstream> #include "windows.h" #include <stdlib.h> #include...

Инжект кода - C++
Здраствуйте... Пишу простый инжектор кода в процесс(win32). Использую CreateRemoteThread. Внедряю код функции которая должна...

инжект кода(не dll) - C++
писал на борланде 6. вылетает на функции CreateRemoveThread , в чём ошибка? ...

Как реализовать вставку ассемблерного кода в код с++ для очистки экрана? - C++
Как реализовать вставку ассемблерного кода в код с++ для очистки экрана (аналог system("cls"), только в виде вставки _ass {}?? ps работаю в...

12
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
19.02.2013, 22:54 #2
WriteProcessMemory, если на винде.

Добавлено через 29 секунд
Цитата Сообщение от anubis52 Посмотреть сообщение
Но как сделать то же самое средствами C++
Невозможно. С++ о процессах и твоей системе ничего не знает.
1
anubis52
0 / 0 / 0
Регистрация: 16.02.2013
Сообщений: 2
19.02.2013, 23:14 #3
На винде. Но как мне может помочь WriteProcessMemory ?
Цитата Сообщение от Vourhey Посмотреть сообщение
Невозможно. С++ о процессах и твоей системе ничего не знает.
тогда что посоветуете как альтернативу NOP
0
NIch
399 / 310 / 27
Регистрация: 17.03.2010
Сообщений: 1,120
20.02.2013, 00:23 #4
WriteProcessMemory - Writes data to an area of memory in a specified process.
Пишет данные в память определенного процесса.
Ассемблерный код - это набор команд, который выглядит так же как и данные, те же байты.

http://msdn.microsoft.com/ru-ru/libr...(v=vs.85).aspx

Это далеко не так просто как кажется.

Цитата Сообщение от anubis52 Посмотреть сообщение
тогда что посоветуете как альтернативу NOP
Это No Operator т.е. пробел, пустота, ноль.
Альтернатива? Смотря что конкретно ты хочешь сделать.

Не по теме:

Чую пахнет тут хаккерскими штучками)

1
onclusiv
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 8
20.02.2013, 00:43 #5
Что то не могу войти под anubis52. поэтому пришлось зарегать этот ник.
Цитата Сообщение от NIch Посмотреть сообщение
WriteProcessMemory - Writes data to an area of memory in a specified process.
Пишет данные в память определенного процесса.
Ассемблерный код - это набор команд, который выглядит так же как и данные, те же байты.

http://msdn.microsoft.com/ru-ru/libr...(v=vs.85).aspx

Это далеко не так просто как кажется.


Это No Operator т.е. пробел, пустота, ноль.
Альтернатива? Смотря что конкретно ты хочешь сделать.

Не по теме:

Чую пахнет тут хаккерскими штучками)

Не, не пахнет.=)
Я хочу что бы программа перестала выполнять функцию.
Ну например идёт счётчик. mov eax, ebx уменьшает его. и я хотел бы затереть её nop'ом что бы счётчик не шёл. как мне это сделать?
Но это только пример. На самом же деле нет никаких счётчиков. Суть вопроса в том что бы затереть функцию. Заставить её делать "ничего".
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
20.02.2013, 10:45 #6
[ссылка удалена] тут хорошо написано как это сделать, у меня по крайней мере получилось)

 Комментарий модератора 
Запрещено публиковать ссылки на другие форумы, а также их пропаганда.
Правила форума
1
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
20.02.2013, 10:57 #7
Цитата Сообщение от anubis52 Посмотреть сообщение
Но как мне может помочь WriteProcessMemory ?
Документацию-то почитай. Запиши в память свой 90h.
1
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
20.02.2013, 10:59 #8
одной этой функцией не обойтись) а моя ссылка на источник к сожалению удалена(
1
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
20.02.2013, 11:49 #9
Цитата Сообщение от anubis52 Посмотреть сообщение
Как указать на адрес?
Смотришь в отладчике/HEX-редакторе адрес функции и ее размер в байтах. Вычитаешь от адреса ImageBase из заголовка. Грузишь процесс, получаешь отладочные привилегии, приостанавливаешь процесс, узнаешь его фактическую базу загрузки, прибавляешь к ней смещение функции, для полученного адреса делаешь VirtualProtect READWRITE, пишешь n байтов 90h (n - размер функции в байтах) с помощью WriteProcessMemory.
Если функция - это именно процедура, а не кусок кода, то проще вариацию mov eax, x; ret/retn в ее начале воткнуть.
1
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
20.02.2013, 12:07 #10
Цитата Сообщение от aLarman Посмотреть сообщение
одной этой функцией не обойтись)

Не по теме:

Никто не говорил, что кроме одной функции больше кода не будет Но его написание - уже забота автора.

1
onclusiv
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 8
23.02.2013, 14:36 #11
Цитата Сообщение от NIch
Это далеко не так просто как кажется.
Это оказалось проще чем я думал =)
Спасибо за функцию. В тот же день всё получилось.

Цитата Сообщение от Vourhey
Документацию-то почитай. Запиши в память свой 90h.
Так и сделал. =)

Цитата Сообщение от WhiteP
Смотришь в отладчике/HEX-редакторе адрес функции и ее размер в байтах. Вычитаешь от адреса ImageBase из заголовка. Грузишь процесс, получаешь отладочные привилегии, приостанавливаешь процесс, узнаешь его фактическую базу загрузки, прибавляешь к ней смещение функции, для полученного адреса делаешь VirtualProtect READWRITE, пишешь n байтов 90h (n - размер функции в байтах) с помощью WriteProcessMemory.
Если функция - это именно процедура, а не кусок кода, то проще вариацию mov eax, x; ret/retn в ее начале воткнуть.
Блин где же ты был когда я только задал вопрос? Ты бы так помог. А так я до всего этого дошёл сам. Вычел адрес но не понял как затоптать инструкцию. И поэтому пришёл сюда. А оказалось это же просто байт-код который можно менять=) Столько узнал сразу в один день=) Даже понял что такое сигнатура.

Цитата Сообщение от Vourhey
одной этой функцией не обойтись)
Если не считать всякие VirtualProtect и прочее, то одна получилась=)

Всем спасибо. Тему можно закрыть. Ответ WhiteP и есть подробная инструкция действий. Ещё раз всем спасибо.

Не по теме:

Люблю этот форум. Всегда помогут хорошим советом.

0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
23.02.2013, 14:45 #12
anubis52,
win api функции найдёте сами, если не найдёте пишите сюда
первое - записываем в чужой процесс данные - структура с данными
второе - записывает код
третье - создаёте поток в поток передаёте указатель на память в чужом процессе
в внедрённом потоке используете только данные структуры и стековые переменные
1
onclusiv
0 / 0 / 0
Регистрация: 20.02.2013
Сообщений: 8
23.02.2013, 14:48 #13
Van111, спасибо. но читай пост выше. проблема уже решена=)

aLarman дай свой скайп. скинешь ту ссылочку что удалили. интересно посмотреть что там.

P.S. Автор темы Я. Просто под anubis52 не получается войти.
0
23.02.2013, 14:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2013, 14:48
Привет! Вот еще темы с ответами:

Осуществить перевод из двоичного кода в десятичный - C++
Помогите пожалуйста. Нужно срочно решить несколько задач самым простейшим образом(без библиотек и функций) на уровне 1 курса =) Написать...

Реализовать процесс декодирования кода Голея - C++
Приветствую. Нужна помощь. Как реализовать процесс декодирования по данному методу?...

Вставка своего кода в чужой процесс. *nix - C++
Добрый вечер :) Расскажите пожалуйста о инжектинге. На данный момент, я знаю только то, что можно внедрить свой код в адресное...

Вставка ассемблерного модуля в С++ проект - C++
Понимаю,что данный вопрос не раз уже поднимался на форуме,но даже после прочтения некоторых тем и поиска в гугле,всё равно доходит не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.