Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Строки во внедрённом ассемблерном коде

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 21.06.2012, 19:37   #1
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Строки во внедрённом ассемблерном коде

Пытаюсь в C++ написать один интересный инжект, в нём необходимо задействовать строки.
Возможно же? Если просто объявить строки, а затем заинжектить, то приложение сразу крашится.
"new" из ассемблера вызывать нельзя - краш.
Числами заменить не получится, ибо строки длинные, тут нужны массивы байтов. Массивы, опять же, крашат клиент.

Задумался о копировании в адресное пространство процесса строк через WriteProcessMemory, но это же слишком: в инжект придётся передавать адреса всех строк.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 21.06.2012, 19:55   #2
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Re: Строки во внедрённом ассемблерном коде

ну... эцсамое....(* включает режим капитана второго ранга *) посмотри чтоли как отсылка пакетов сделана - там ведь тоже массив байт передаётся. или посылка чатовых сообщений.
  Ответить с цитированием
Старый 21.06.2012, 20:42   #3
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Строки во внедрённом ассемблерном коде

vogel, приведите хоть один пример реализации этих вещей на C++.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 21.06.2012, 21:08   #4
-= Мастер Света =-
 Рыцарь-капитан
Аватар для krukovis
 
krukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нации
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
 
По умолчанию Re: Строки во внедрённом ассемблерном коде

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
Пытаюсь в C++ написать один интересный инжект, в нём необходимо задействовать строки.

Обычно в инжектах используется не строка, а указатель на строку. Выделяешь место в памяти с пом. VirtualAllocEx, она возвращает тебе указатель. По этому указателю записываешь строку с пом. WriteProcessMemory. И этот же указатель даешь функции для инжекта.
________________
--------------------------------------------
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пасибо:
BritishColonist (22.06.2012)
Старый 21.06.2012, 21:11   #5
 Разведчик
Аватар для GenOstr
 
GenOstr никому не известный тип
Регистрация: 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пасибо:
BritishColonist (22.06.2012)
Старый 21.06.2012, 22:39   #6
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 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пасибо:
BritishColonist (22.06.2012)
Старый 21.06.2012, 23:04   #7
 Разведчик
Аватар для GenOstr
 
GenOstr никому не известный тип
Регистрация: 12.12.2010
Сообщений: 4
Популярность: 14
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Строки во внедрённом ассемблерном коде

Цитата:
Сообщение от dwa83Посмотреть сообщение
Если нужно массив юникода перевести обратно в анси, использую вот это

а чо? стандартные операторы не устраивают? это ж велосипед, причем детский. не все символы преобразуешь.
Цитата:
Сообщение от dwa83Посмотреть сообщение
Я для использования текста сначала выделяю память с расчётом, чтобы помещались все строки которые я могу использовать. Адрес постоянно храню и память не освобождаю вообще.

зачем такие сложности? по нормальному не устраивает?

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
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Строки во внедрённом ассемблерном коде

Цитата:
Сообщение от GenOstrПосмотреть сообщение
по нормальному не устраивает?

Я не знаю как по нормальному, и вообще я на билдере 6ом привык с AnsiString робить, а он как известно с юникодом поссорился с детства, и вообще я не прогер, я электрик А с visual C++ я не знаком почти)

Добавлено через 8 минут
Цитата:
Сообщение от GenOstrПосмотреть сообщение
не все символы преобразуешь.

Почему не все? Символы в норме. Буквы в норме. Буквы Ё и ё в норме. А что ещё нужно? Иероглифы и иврит мне без надобности))
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

Последний раз редактировалось dwa83; 21.06.2012 в 23:31. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 22.06.2012, 12:56   #9
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Строки во внедрённом ассемблерном коде

Вы предлагаете заранее записать строки в память, а потом передавать их адреса в инжекты, что в принципе сходится с моей первоначальной идеей. Но всё же спасибо всем за советы.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 23.06.2012, 01:16   #10
-= Мастер Света =-
 Рыцарь-капитан
Аватар для krukovis
 
krukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нации
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
 
По умолчанию Re: Строки во внедрённом ассемблерном коде

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
Вы предлагаете заранее записать строки в память, а потом передавать их адреса в инжекты, что в принципе сходится с моей первоначальной идеей.

Да, и это единственный правильный путь.
________________
--------------------------------------------
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 работающий с включенной игрой.
--------------------------------------------
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Помагите Разобраться В Коде Некит99992 Общение разработчиков 4 06.03.2012 19:52
[Подсказка] что не так в коде? C# tonyr Вопросы и ответы, обсуждения 3 31.08.2011 23:11
[Помогите!] В чём у меня проблемма в коде gum_classis Вопросы и ответы, обсуждения 3 06.08.2011 21:36
Ошибка в коде A.N.O.N.I.M Вопросы и ответы, обсуждения 1 28.05.2011 16:27
[Статья] Путаетесь в коде? (Begin, end) Glavos Pascal/Delphi 3 07.05.2010 21:30

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

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

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