Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Разработка
Войти через OpenID

Разработка Раздел для совместной разработки/доработки программы

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 08.02.2013, 21:45   #71
Пользователь
 
Аватар для n1ghtmare
 
Регистрация: 21.04.2010
Сообщений: 56
Сказал Спасибо: 3
Имеет 3 спасибок в 3 сообщенях
n1ghtmare пока неопределено
По умолчанию

Если не секрет, откуда столько любви к ассемблеру? Чем языки более высокого уровня не угодили?
Вот код не моего фреймворка для инжекта длл перенаправлением потока, код на C# но зная хоть примерно C++ можно понять. ManagedFasm это обертка над компилятором твоего любимого)
Код:
/// <summary>
		/// Injects a dll into a process by hijacking the given thread and redirecting it to LoadLibrary.
		/// </summary>
		/// <param name="hProcess">Handle to process into which dll will be injected.</param>
		/// <param name="hThread">Handle to thread that will be hijacked.</param>
		/// <param name="szDllPath">Full path to the dll to be injected.</param>
		/// <returns>Returns the base address of the injected dll on success, zero on failure.</returns>
		public static uint InjectDllRedirectThread(IntPtr hProcess, IntPtr hThread, string szDllPath)
		{
			const uint INITIAL_EXIT_CODE = 0xFFFFFFFF;

			if (hProcess == IntPtr.Zero)
				throw new ArgumentNullException("hProcess");

			if (hThread == IntPtr.Zero)
				throw new ArgumentNullException("hThread");

			if (szDllPath.Length == 0)
				throw new ArgumentNullException("szDllPath");

			if (!szDllPath.Contains("\\"))
				szDllPath = System.IO.Path.GetFullPath(szDllPath);

			if (!System.IO.File.Exists(szDllPath))
				throw new ArgumentException("DLL not found.", "szDllPath");

			uint dwBaseAddress = RETURN_ERROR;
			uint lpLoadLibrary, lpAsmStub;
			CONTEXT ctx;
			StringBuilder AssemblyStub = new StringBuilder();
			ManagedFasm fasm = new ManagedFasm(hProcess);

			lpLoadLibrary = (uint)Imports.GetProcAddress(Imports.GetModuleHandle("kernel32.dll"), "LoadLibraryA");
			if (lpLoadLibrary == 0)
				return RETURN_ERROR;

			lpAsmStub = SMemory.AllocateMemory(hProcess);
			if (lpAsmStub == 0)
				return RETURN_ERROR;

			if (SThread.SuspendThread(hThread) != uint.MaxValue)
			{
				ctx = SThread.GetThreadContext(hThread, CONTEXT_FLAGS.CONTEXT_CONTROL);
				if (ctx.Eip > 0)
				{
					try
					{
						//located at lpAsmStub+0, where we can monitor LoadLibrary's exit code.
						fasm.AddLine("lpExitCode dd 0x{0:X}", INITIAL_EXIT_CODE);

						//lpAsmStub+4, where the actual code part starts
						fasm.AddLine("push 0x{0:X}", ctx.Eip);
						fasm.AddLine("pushad");
						fasm.AddLine("push szDllPath");
						fasm.AddLine("call 0x{0:X}", lpLoadLibrary);
						fasm.AddLine("mov [lpExitCode], eax");
						fasm.AddLine("popad");
						fasm.AddLine("retn");

						//dll path
						fasm.AddLine("szDllPath db \'{0}\',0", szDllPath);

						fasm.Inject(lpAsmStub);
					}
					catch
					{
						SMemory.FreeMemory(hProcess, lpAsmStub);
						SThread.ResumeThread(hThread);
						return RETURN_ERROR;
					}

					ctx.ContextFlags = CONTEXT_FLAGS.CONTEXT_CONTROL;
					ctx.Eip = lpAsmStub + 4; //skip over lpExitCode data

					if (SThread.SetThreadContext(hThread, ctx))
					{
						if (SThread.ResumeThread(hThread) != uint.MaxValue)
						{
							for (int i = 0; i < 400; i++)
							{
								System.Threading.Thread.Sleep(5);
								if ((dwBaseAddress = SMemory.ReadUInt(hProcess, lpAsmStub)) != INITIAL_EXIT_CODE)
									break;
							}
						}
					}
				}
			}

			if (fasm != null)
			{
				fasm.Dispose();
				fasm = null;
			}

			SMemory.FreeMemory(hProcess, lpAsmStub);

			return dwBaseAddress;
		}

Последний раз редактировалось n1ghtmare, 08.02.2013 в 21:52.
n1ghtmare вне форума   Ответить с цитированием
За это сообщение n1ghtmare нажился спасибкой от:
Старый 08.02.2013, 22:33   #72
Местный
 
Аватар для St1mul
 
Регистрация: 03.12.2011
Сообщений: 133
Сказал Спасибо: 63
Имеет 19 спасибок в 16 сообщенях
St1mul пока неопределено
По умолчанию

Цитата:
Если не секрет, откуда столько любви к ассемблеру? Чем языки более высокого уровня не угодили?
Начинал вообще с ольки, потом как то ни один язык так не прижился как фасм, масм слишком много писать, остальные языки слишком простые чтобы начинать, да и начал все это чтобы научится делать такую штуку как сделал GoldFinch

Добавлено через 18 минут
Спасибо Demion'у за помощь
Я не ту структуру записывал, нужно было
Код:
struct THREADENTRY32
dwSize                  dd ?
cntUsage                dd ?
th32ThreadID            dd ?
th32OwnerProcessID      dd ?
tpBasePri               dd ?
tpDeltaPri              dd ?
dwFlags                 dd ?
ends
а я вместо неё засовывал структуру PROCESSENTRY32
+ еще поменять invoke CreateToolhelp32Snapshot,4,0
Дальше делаем мини цикл по отсеиванию ненужных потоков и готово!

Последний раз редактировалось St1mul, 08.02.2013 в 23:36. Причина: Добавлено сообщение
St1mul вне форума   Ответить с цитированием
Старый 08.02.2013, 23:41   #73
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Цитата:
Сообщение от n1ghtmare Посмотреть сообщение
Если не секрет, откуда столько любви к ассемблеру? Чем языки более высокого уровня не угодили?
Вот код не моего фреймворка для инжекта длл перенаправлением потока, код на C# но зная хоть примерно C++ можно понять. ManagedFasm это обертка над компилятором твоего любимого)
Сегодня днем я спрашивал его о том же...

St1mul, если бы ты внимательно смотрел пример с MSDN, в особенности начало ф-ции ListProcessThreads, то победил бы свою проблему гораздо раньше )

CreateToolhelp32Snapshot,4,0

Для твоей задачи надо передавать Pid процесса ( GetCurrentProcessId() ) в котором ты находишься, и не надо будет отсеивать чужие потоки.

Последний раз редактировалось Sherman, 08.02.2013 в 23:44.
Sherman вне форума   Ответить с цитированием
За это сообщение Sherman нажился спасибкой от:
Старый 10.02.2013, 09:44   #74
Местный
 
Аватар для St1mul
 
Регистрация: 03.12.2011
Сообщений: 133
Сказал Спасибо: 63
Имеет 19 спасибок в 16 сообщенях
St1mul пока неопределено
По умолчанию

Стал дальше копать.
Как открыть поток на полных правах?
MSDN OpenThread
Thread access
я вижу там есть THREAD_ALL_ACCESS, мне его и нужно, но там нету значения, а в фасме нет такой константы (это же фасм), со стандарт правами открывать не вариант т.к. эти все права нужны для SetThreadContext
Список имеющихся констант
Код:
; Access rights

DELETE_RIGHT		  = 00010000h
READ_CONTROL		  = 00020000h
WRITE_DAC		  = 00040000h
WRITE_OWNER		  = 00080000h
SYNCHRONIZE		  = 00100000h
STANDARD_RIGHTS_READ	  = READ_CONTROL
STANDARD_RIGHTS_WRITE	  = READ_CONTROL
STANDARD_RIGHTS_EXECUTE   = READ_CONTROL
STANDARD_RIGHTS_REQUIRED  = 000F0000h
STANDARD_RIGHTS_ALL	  = 001F0000h
SPECIFIC_RIGHTS_ALL	  = 0000FFFFh
ACCESS_SYSTEM_SECURITY	  = 01000000h
MAXIMUM_ALLOWED 	  = 02000000h
GENERIC_READ		  = 80000000h
GENERIC_WRITE		  = 40000000h
GENERIC_EXECUTE 	  = 20000000h
GENERIC_ALL		  = 10000000h
PROCESS_TERMINATE	  = 00000001h
PROCESS_CREATE_THREAD	  = 00000002h
PROCESS_VM_OPERATION	  = 00000008h
PROCESS_VM_READ 	  = 00000010h
PROCESS_VM_WRITE	  = 00000020h
PROCESS_DUP_HANDLE	  = 00000040h
PROCESS_CREATE_PROCESS	  = 00000080h
PROCESS_SET_QUOTA	  = 00000100h
PROCESS_SET_INFORMATION   = 00000200h
PROCESS_QUERY_INFORMATION = 00000400h
PROCESS_ALL_ACCESS	  = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or 0FFFh
FILE_SHARE_READ 	  = 00000001h
FILE_SHARE_WRITE	  = 00000002h
FILE_SHARE_DELETE	  = 00000004h
Кто может подсказать?)
Может кто сделать мини прогу на дельфи с функцией открытия потока на полных правах и скинуть ее сюда?

Последний раз редактировалось St1mul, 10.02.2013 в 09:55.
St1mul вне форума   Ответить с цитированием
Старый 10.02.2013, 10:57   #75
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Яркий пример поговорки - "Смотрю в книгу, вижу фигу".

Почитать про OR и прочие логические операции

Как прочтешь, сложи три значения.

PROCESS_ALL_ACCESS = 000F0000h or 00100000h or 0FFFh

Последний раз редактировалось Sherman, 10.02.2013 в 11:05.
Sherman вне форума   Ответить с цитированием
За это сообщение Sherman нажился спасибкой от:
Старый 11.02.2013, 23:05   #76
Местный
 
Аватар для St1mul
 
Регистрация: 03.12.2011
Сообщений: 133
Сказал Спасибо: 63
Имеет 19 спасибок в 16 сообщенях
St1mul пока неопределено
По умолчанию

Цитата:
Яркий пример поговорки - "Смотрю в книгу, вижу фигу".

Почитать про OR и прочие логические операции

Как прочтешь, сложи три значения.

PROCESS_ALL_ACCESS = 000F0000h or 00100000h or 0FFFh
все равно при вызове SetThreadContext пишет в логе ошибок no access
P.S. есть у кого материалы по обходу чек суммы приложения?
St1mul вне форума   Ответить с цитированием
Старый 11.02.2013, 23:33   #77
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Там анализировать способ контроля надо.
Sherman вне форума   Ответить с цитированием
Старый 04.03.2013, 06:25   #78
Местный
 
Аватар для St1mul
 
Регистрация: 03.12.2011
Сообщений: 133
Сказал Спасибо: 63
Имеет 19 спасибок в 16 сообщенях
St1mul пока неопределено
По умолчанию

Понадобилось перейти с win32 на win7.
Но при отладке кода в ольке завистает на моем коде в функции создания l2parameterstack, хотя в win32 все прекрасно работало
Вот чать кода:
Код:
Buffer1 	db 16 dup(0) ; массив 16 байтовый
.........
lea ecx,[Buffer1] 
invoke Stack_Create,ecx,10
.........
Stack_Create,'??0L2ParamStack@@QAE@H@Z'
Кто знает в чем проблема, кто сталкивался?
St1mul вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Разработка



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

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


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

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!