|
Строки во внедрённом ассемблерном коде - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
21.06.2012, 19:37
|
#1
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Строки во внедрённом ассемблерном коде
Пытаюсь в C++ написать один интересный инжект, в нём необходимо задействовать строки.
Возможно же? Если просто объявить строки, а затем заинжектить, то приложение сразу крашится.
"new" из ассемблера вызывать нельзя - краш.
Числами заменить не получится, ибо строки длинные, тут нужны массивы байтов. Массивы, опять же, крашат клиент.
Задумался о копировании в адресное пространство процесса строк через WriteProcessMemory, но это же слишком: в инжект придётся передавать адреса всех строк.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
|
|
|
21.06.2012, 19:55
|
#2
|
|
|
|
Разведчик
|
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
ну... эцсамое....(* включает режим капитана второго ранга *) посмотри чтоли как отсылка пакетов сделана - там ведь тоже массив байт передаётся. или посылка чатовых сообщений.
|
|
|
21.06.2012, 20:42
|
#3
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
vogel, приведите хоть один пример реализации этих вещей на C++.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
|
|
|
21.06.2012, 21:08
|
#4
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
Пользователь сказал cпасибо:
|
|
21.06.2012, 21:11
|
#5
|
|
|
|
Разведчик
|
Регистрация: 12.12.2010
Сообщений: 4
Популярность: 14
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
Код:
static DWORD WINAPI SendPacket(_InjectParam *pInjectParam )
{
DWORD BaseAddress = Base_Adress;
DWORD SellPack = SendPacketAdress;
byte*pbuf=&pInjectParam->CodeInject[0];
int Len=pInjectParam->Len ;
__asm
{
pushad;
mov ecx, BaseAddress;
mov ecx, dword ptr[ecx];
mov ecx, dword ptr[ecx + 0x20];
push Len;
push pbuf;
call SellPack; // Вызываем функцию клиента
popad;
}
return 0;
}
как-то так . надо передавать указатель на строку.
опередили. ))))) можешь строку формировать в самом инжекте. она в секции DATA передается в клиент
еще. если пишешь под MFC , то в классе CString есть оператор, возвращающий указатель на начало последовательности символов. но кажись CString *pstring тоже проходит (не утверждаю)
Последний раз редактировалось GenOstr; 21.06.2012 в 21:17.
|
|
|
Пользователь сказал cпасибо:
|
|
21.06.2012, 22:39
|
#6
|
|
|
|
Пехотинец
|
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
Я для использования текста сначала выделяю память с расчётом, чтобы помещались все строки которые я могу использовать. Адрес постоянно храню и память не освобождаю вообще. Затем если понадобилась строка, её примерно таким
Код:
//______________________________________________________________________________
// Обновление строки в памяти
void INJECTOR::RefreshStr(AnsiString str) // принимает анси строку
{
char mass[42] = {0};
for (int i=0; i<str.Length(); i++)
mass[i*2]=str.c_str()[i]; // c_str() возвращает указатель на массив типа char. Здесь мы как бы юникодим строку(только для энглиш строк)
WriteProcessMemory(hProcess, pStr,mass,42,NULL); // инжектим строку в заранее выделенную память
}
заинжекчиваем в клиент.
Если нужно массив юникода перевести обратно в анси, использую вот это
Код:
AnsiString READER::UnicodeToAnsi(char *mass, int len)
{
AnsiString txt="";
for (int i=0; i<len; i++)
{
BYTE lo=mass[i*2];
BYTE hi=mass[i*2+1];
if ((lo==1)&&(hi==4)) {lo=168; hi=0;}
if ((lo==81)&&(hi==4)) {lo=184; hi=0;}
if (hi==4) lo+=176;
txt+=(char)lo;
}
return txt;
}
Обратную функцию я удалил за ненадобностью, но из этой можно слепить, если нужна будет
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
|
|
|
Пользователь сказал cпасибо:
|
|
21.06.2012, 23:04
|
#7
|
|
|
|
Разведчик
|
Регистрация: 12.12.2010
Сообщений: 4
Популярность: 14
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
|
Цитата: |
|
|
|
|
|
|
|
|
|
Если нужно массив юникода перевести обратно в анси, использую вот это
|
|
|
|
|
|
а чо? стандартные операторы не устраивают? это ж велосипед, причем детский. не все символы преобразуешь.
|
Цитата: |
|
|
|
|
|
|
|
|
|
Я для использования текста сначала выделяю память с расчётом, чтобы помещались все строки которые я могу использовать. Адрес постоянно храню и память не освобождаю вообще.
|
|
|
|
|
|
зачем такие сложности? по нормальному не устраивает?
CString::GetBuffer
LPTSTR GetBuffer( int nMinBufLength );
throw( CMemoryException );
Return Value
An LPTSTR pointer to the object’s (null-terminated) character buffer.
Parameters
nMinBufLength
The minimum size of the character buffer in characters. This value does not include space for a null terminator.
|
|
|
21.06.2012, 23:21
|
#8
|
|
|
|
Пехотинец
|
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
Последний раз редактировалось dwa83; 21.06.2012 в 23:31.
Причина: Добавлено сообщение
|
|
|
22.06.2012, 12:56
|
#9
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
Вы предлагаете заранее записать строки в память, а потом передавать их адреса в инжекты, что в принципе сходится с моей первоначальной идеей. Но всё же спасибо всем за советы.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
|
|
|
23.06.2012, 01:16
|
#10
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
|
Re: Строки во внедрённом ассемблерном коде
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 12:03.
|
|