Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация

Инъекция кода

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 19.03.2015, 19:05   #1
 Разведчик
Аватар для JKHKJgj
 
JKHKJgj никому не известный тип
Регистрация: 06.09.2014
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 17
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Инъекция кода

Здравствуйте. Недавно заинтересовался темой читерства, сейчас изучаю память и.т.д и вот возник вопрос, можно ли как то писать у себя в программе ассемблерный код который потом автоматически переведётся в байт код и его уже инжектить в процесс, или же так вручную байт код и пишут в программах ?
  Ответить с цитированием
Старый 19.03.2015, 22:53   #2
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Инъекция кода

шарп не поддерживает прямые ассемблерные вставки, но зато можно вполне просто запихнуть в процесс массив байт и вызвать его
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Пользователь сказал cпасибо:
JKHKJgj (19.04.2015)
Старый 19.03.2015, 23:30   #3
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: Инъекция кода

Для начала тебе нужны такие API как
Код:
VirtualAllocEx
VirtualFreeEx
CreateRemoteThread
MemoryWriteProcessMemory
Теперь ты пишешь byte код своего ассемблерного кода (прямо как в памяти, без реверсов и тд.)
например
Код:
List<byte> asm = new List<byte>();
asm.AddRange( new byte[] { 0x68, 0xB8, 0xFF, 0xFF } );
Потом ты записываешь эти байты в заранее выделенной памяти процесса.
Код:
int AdressAllocated = MemAlloc(4); //MemAlloc выделяет память и возвращает адрес 1 свободного байта.
Memory.WriteMem(AdressAllocated, asm.ToArray());
Теперь подошёл момент вызова, для этого необходим открытый handle с параметром Create.
Код:
uint dwThread = 0;
CreateRemoteThread(handleCreate, IntPtr.Zero, 0, AdressAllocated, IntPtr.Zero, 0, out dwThread);
После этого надо очистить память. Требуется handle с параметром Operations (VM_READ, VM_WRITE....)
Код:
Thread.Sleep(200);
VirtualFreeEx(handleOperaion, AdressAllocatedToRead, 4, FreeType.Decommit);
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Пользователь сказал cпасибо:
JKHKJgj (19.04.2015)
Старый 20.03.2015, 09:16   #4
 Разведчик
Аватар для JKHKJgj
 
JKHKJgj никому не известный тип
Регистрация: 06.09.2014
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 17
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Инъекция кода

Спасибо за такое подробное объяснение, вы не подскажете где мне взять нормальный справочник по байт кодам, в гугле искал так они там на одну и ту же команду разные, видимо для разных процессоров. Ещё подскажите вот для чего мы запускаем отдельный поток ? Я думал делается по другому, что вот мы в памяти игры допустим, подменяем какую нибудь команду на джимп на наш участок памяти, конечно соблюдая чётность байтов, и там уже пишем свой код а потом прыжок обратно. И в конце вашего примера когда мы освобождаем выделенную память я так понимаю поток убивается ? Да и вот ещё вопрос который мне непонятен, поток запустили, и как мне из моей программы, ну для примера хочу чтобы на форме отображалось количество патронов из игры, как мне из потока передавать эти данные в программу ? Или вот ещё хочу изменить количество патронов к примеру, ввожу желаемое кол-во и нажимаю добавить, или я должен буду записать эти данные в адрес потока с данными ? и уже этот отдельный поток будет это считывать и записывать по адресу патронов это значение ? Вот мне сам принцип понять бы. Я умею читать память, писать туда, создавать участки памяти в процессе, искать по сигнатуре. Мде сколько понаписал )) дико извиняюсь но вопросы эти не дают покоя сам искал честно ответы но не смог найти либо искал неверно.

Последний раз редактировалось JKHKJgj; 20.03.2015 в 09:26.
  Ответить с цитированием
Старый 20.03.2015, 12:10   #5
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Инъекция кода

взамен справочника могу посоветовать использовать любой дебагер, например OllyDbg, в нем составляете нужный вам ассемблерный код, а дальше просто выделяете эту облать и копируете как байты, и сразу прошу заметить не делать прямых вызовов CALL adress, а делать вызовы через регистр, то есть mov edx, adress; call edx. Собственно используйте любой свободный регистр.
А для чтения данных зачем лезть в поток, если можно те же пули считать через линейку указателей с помощью ReadProcessMemory
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Старый 20.03.2015, 13:10   #6
 Разведчик
Аватар для JKHKJgj
 
JKHKJgj никому не известный тип
Регистрация: 06.09.2014
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 17
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Инъекция кода

Та я со флеш всё мучаюсь )) там нет указателей, я знаю какие регистры указывают на нужный мне адрес, то есть сканером сигнатур нахожу операнды которые пишут или читают в нужный мне адрес. Вот мне как то программе нужно передать этот самый адрес со значением. Чтобы потом я мог его изменять читать и.т.д. И ещё я думал может класс готовый какой есть, передаёшь туда допустим строку с ассемблерными командами он тебе уже байты возвращает, и пишешь их потом сразу в процесс. А как работать с указателями я уже разобрался вроде бы. Ведь делают читы на флеш и они работают потом у других пользователей вот как там обмен данными организуеться без указателей дойти не могу. Или может да запускать свой поток в нём уже читать эти регистры, помещать в память адрес которой мы уже будем знать, и с ним работать а поток будет проверять изменилос нет, или добавить патронов допустим если нужно, то есть в каком либо адресе количество появилось, и добавляем их, но как то запутанно получаеться (
PS: Как то сумбурно описал, попробую ещё )) как я это представляю.
1-Есть наша программа, в которой мы можем смотреть количество патронов допустим и кнопка добавить патроны, и поле для ввода количества. Она же находит нужный нам процесс игры и инжектит туда код, и запускает поток.
2- Вот этот поток он просто копирует количество патронов из адреса игры в свой адрес. И начинает в цикле проверять изменилось ли количество патронов и обновлять если да, И будет ещё 1 адрес в который мы из нашей программы будем помещать количество патронов которые нужно добавить, поток так же в цикле проверяет этот адрес и если там что то появилось то прибавляет к патронам по адресу игры. То есть поток посредник такой.
Ведь из нашей программы мы точно знаем все адреса нашего потока.
Или есть какой то другой способ ?
PPS: Да как я писал вначале что делаем джимп на наш код неправильно, так наш код будет работать только тогда когда будет вызвана данная функция из игры только, а вот в отдельном потоке да ) в цикле будет постоянно работать.

Последний раз редактировалось JKHKJgj; 20.03.2015 в 13:29.
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инъекция нужного значения в клиент vladoscom93 Общение разработчиков 41 19.11.2018 05:46
[Статья] SQL инъекция 6a4a Баги и читы Lineage 2 48 01.02.2011 16:44
[Уязвимость] [VIP] Инъекция некоторых птс Hummel Подполье Lineage 2 (0 уровень) 0 22.11.2008 20:01

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 04:26.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net