Прошивки –  Каталог навигаторов –  Восстановление навигатора

Вернуться   Мир Автомобильных навигаторов > PNA / PND Устройства > Навигатор на WinCE
Регистрация ФайлыПравила форумаБан-лист Справка Календарь Поиск Сообщения за день Все разделы прочитаны

Важная информация


     
Ответ
 
Опции темы
Старый 19.02.2015, 10:21   #1
urban81
Писатель
Доп. информация
По умолчанию KIA SORENTO 2013 NEW ГУ AV310DMDG.S

Есть ГУ с WinCE 6.0 (MIPSII) и приложение Х, которое работает с портами. Надо снять лог, что приложение считывает с портов и что пишет в них. С возможностью потом динамически преобразовывать информацию в нужную. Сделать таким способом подсоединиться к процессу приложения X, добавить свою ДЛЛ к процессу в которой буду перехватывать API CreateFileW, ReadFile и WriteFile и с помощью переопределения этих функци буду писать лог…Переопределённые функции ReadFilXXX и WriteFileXXX должны иметь возможность менять размер массива байт (считанный или который хочем записать), а также сам массив байт.

Добавлено через 34 минуты
Всем здравствуйте.Так вот длл не инжектится к приложению X !!! УТОЧНЯЮ: Не работает PerformCallBack4! Какой алтернативный способ? После шага
HINSTANCE hInst = ( HINSTANCE ) PerformCallBack4 ( &ci ); - ERROR_SHARING_VIOLATION и hInst выдаёт unused = CXX0030: ошибка: не удается вычислить значение выражения.Пробовал другой способ но там в одном из мест после memcpy(p, &Code, sizeof(DWORD) * 9);-ERROR_SHARING_VIOLATION.Как правильно подсоединять ДЛЛ к процессу приложения Х?
Заранее благодарю. Функция способа №1 вот:
Код:
 void Inject9 ( void )
{
	DWORD Err = 0;
	BOOL bMode = SetKMode ( TRUE );
	printf( "SetKMode (%d).\n", GetLastError() );
	DWORD dwPerm = SetProcPermissions ( 0xFFFFFFFF );
	printf( "SetProcPermissions (%d).\n", GetLastError() );
	HANDLE targetProcessHandle = GetProcessHandle ( szApplication );//get handle
	printf( "GetProcessHandle (%d).\n", GetLastError() );
	if ( targetProcessHandle )
	{ 
		void *Ptr = MapPtrToProcess( L"Urban81Dll.dll", GetCurrentProcess ( ) );
		printf( "MapPtrToProcess (%d).\n", GetLastError() );
		CALLBACKINFO ci;
		ci.hProc = targetProcessHandle;
		void *t = GetProcAddress ( GetModuleHandle ( L"coredll.dll" ), L"LoadLibraryW" );
		printf( "GetProcAddress (%d).\n", GetLastError() );
		ci.pfn = ( FARPROC ) MapPtrToProcess ( t, targetProcessHandle );
		printf( "MapPtrToProcess (%d).\n", GetLastError() );
		ci.pvArg0 = Ptr;
		HINSTANCE hInst = ( HINSTANCE ) PerformCallBack4 ( &ci, 0, 0 , 0 );
		printf( "PerformCallBack4 (%d).\n", GetLastError() );
		FARPROC pHook = GetProcAddress ( hInst, (LPWSTR ) 1 );
		printf( "GetProcAddress (%d).\n", GetLastError() );
		ci.hProc = targetProcessHandle;
		ci.pfn = ( FARPROC ) MapPtrToProcess( pHook , targetProcessHandle );
		printf( "MapPtrToProcess (%d).\n", GetLastError() );
		ci.pvArg0 = targetProcessHandle;
		DWORD dw = PerformCallBack4 ( &ci );
		printf( "PerformCallBack4 (%d).\n", GetLastError() );
		CloseHandle ( targetProcessHandle );
	}
}
Функции способа №2 вот:
Код:
HMODULE LoadRemoteLibrary(HANDLE hProcess, HANDLE hThread, LPCTSTR FileName)
{
	HMODULE hModule;
	void* pSrc;
	void* pDst;
	DWORD* p;
	DWORD Code[9] = {
		0xe92d5fff,	//stmdb       sp!, {r0 - r12, lr}
		0xe59f4024,	//ldr         r4, [pc, #0x24]
		0xe59f001c,	//ldr         r0, [pc, #0x1C]
		0xe1a0e00f,	//mov         lr, pc
		0xe1a0f004,	//mov         pc, r4
		0xe58f000c,	//str         r0, [pc, #0xC]
		0xe8bd5fff,	//ldmia       sp!, {r0 - r12, lr}
		0xe58ff000,	//str         pc, [pc]
		0xeafffffe
//		0x00000000,	//*pbDone
//		0x00000000,	//hModule
//		0x00000000,	//&FileName
//		0x00000000,	//&LoadLibrary()
//		0x00000000,	//FileName[0]
	};
	BOOL* pbDone;
	HMODULE* phModule;
	CONTEXT Context;
	CONTEXT NewContext;
	hModule = NULL;
	if(pSrc = VirtualAlloc(NULL, 65536, MEM_COMMIT, PAGE_EXECUTE_READWRITE))
	{
		printf( "VirtualAlloc - (%d).\n", GetLastError() );
		if(pDst = VirtualAllocEx(hProcess, NULL, 65536, MEM_COMMIT, PAGE_EXECUTE_READWRITE))
		{
			printf( "VirtualAllocEx - (%d).\n", GetLastError() );
			p = (DWORD*)pSrc;
			memcpy(p, &Code, sizeof(DWORD) * 9);
			printf( "memcpy - (%d).\n", GetLastError() );
			p += 9;
			*p = (DWORD)FALSE;
			pbDone = (BOOL*)p;
			p++;
			phModule = (HMODULE*)p;
			p++;
			*p = (DWORD)pDst + sizeof(DWORD) * (9 + 4);
			p++;
#ifdef UNICODE
			*p = (DWORD)GetProcAddress(LoadLibrary(_T("coredll.dll")), _T("LoadLibraryW"));
			printf( "GetProcAddress - (%d).\n", GetLastError() );
#else
			*p = (DWORD)GetProcAddress(LoadLibrary(_T("coredll.dll")), _T("LoadLibrary"));
#endif
			p++;
			_tcscpy((TCHAR*)p, FileName);
			if(WriteProcessMemory(hProcess, pDst, pSrc, 65536, NULL))
			{
				printf( "WriteProcessMemory - (%d).\n", GetLastError() );
				while(true)
				{
					SuspendThread(hThread);
					Context.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
					GetThreadContext(hThread, &Context);
					if(Context.Pc < 0x40000000)
					{
						NewContext = Context;
						NewContext.Pc = (ULONG)pDst;
						SetThreadContext(hThread, &NewContext);
						break;
					}
					ResumeThread(hThread);
					Sleep(10);
				}
				ResumeThread(hThread);
				while(!(*pbDone))
				{
					ReadProcessMemory(hProcess, pDst, pSrc, 65536, NULL);
					Sleep(10);
				}
				hModule = *phModule;
				SuspendThread(hThread);
				SetThreadContext(hThread, &Context);
				ResumeThread(hThread);
			}
			VirtualFreeEx(hProcess, pSrc, 65536, MEM_DECOMMIT);
		}
		VirtualFree(pSrc, 65536, MEM_DECOMMIT);
	}
	return hModule;
}
urban81 вне форума  
Старый 20.02.2015, 09:29   #2
urban81
Писатель
Доп. информация
По умолчанию ЕСТЬ СПОСОБ № 3 НУЖНА ПОМОЩЬ!

Здравствуйте.Сейчас вижу ещё один способ инжекта ДЛЛ-это отредактировать ЕХЕ файл вручную через редактор WinHex или подобный - вписать длл и ее вызов при старте ехе.Подскажите где есть рабочие прмеры с моей темой? Всем зарание спасибо.
urban81 вне форума  
Старый 25.02.2015, 16:22   #3
urban81
Писатель
Доп. информация
По умолчанию ИНЖЕКТ ЕСТЬ!

Всем здравствуйте.Инжект получился вышеуказанным способом (PETools->PeEditor).Версию проги только надо брать нормальную.

Добавлено через 18 минут
Длл внедрили в DrFish.exe. Этот модуль в ГУ отвечает за считывании данных ЖПС с портов и дальнейшей раздачи их остальным модулям или что то вроде этого...Задача ДЛЛ перехватить вышесказанные АПИ функции с подсунуть мои...делать это она будет при помощи редактирования таблиц импорта...Вот нарыл функцию которая это делает.Подскажите где берётся структура HDATA? Заранее всем спаибо!
Код:
DWORD XXX ( HANDLE hProc, DWORD dFind, DWORD dReplace )
{
	DWORD ret = 0;
	//GODMODE ON
	BOOL  bOldKMode = SetKMode ( TRUE );
	DWORD dOldPerms = SetProcPermissions ( 0xFFFFFFFF );
	//get process ptr prom handle 	
	//Process pr;
	HDATA * hProcHD = ( HDATA * ) ( 0x80000000 | ( ( DWORD ) hProc & HANDLE_ADDRESS_MASK ) );
	PROCESS * prc = ( PROCESS * ) hProcHD->pvObj;
	//get imports sections
	struct ImpHdr * blockptr, * blockstart;

	blockstart = ( struct ImpHdr * ) MapPtrProc ( prc->e32.e32_vbase + prc->e32.e32_unit[IMP].rva, prc );
	//iterate thru imports sections
	for ( blockptr = blockstart; blockptr->imp_lookup; ++blockptr )
	{
		DWORD dOldProtect, tmp;
		//get vectors ptr
		DWORD * vectors = ( DWORD * ) MapPtrProc ( prc->e32.e32_vbase + blockptr->imp_address, prc );
		//count vectors
		DWORD * vptr = vectors;
		while ( * vptr ) ++vptr;
		DWORD vcnt = ( vptr - vectors );
		//try to unlock imports section memory
		if ( VirtualProtect ( vectors, vcnt * sizeof ( DWORD ), PAGE_EXECUTE_READWRITE, &dOldProtect ) )
		{
			//find&replace
			for ( UINT i = 0; i < vcnt; ++i )
			{
				if ( vectors[i] == dFind )
				{
					vectors[i] = dReplace;
					++ret;
				}
			}
			//lock back
			VirtualProtect ( vectors, vcnt * sizeof ( DWORD ), dOldProtect, &tmp );
		}
	}
	//GODMODE OFF
	SetProcPermissions ( dOldPerms );
	SetKMode ( bOldKMode );
	return ret;
}
urban81 вне форума  
Старый 04.03.2015, 13:37   #4
tom_step
Вникающий
Доп. информация
По умолчанию

Здравствуйте.
Тоже борюсь с такой железкой пока не очень получается. попал в СЕ а дальше тоже уперся в работу GPS. Я так понял что drfish как раз и открывает порт, и протокол hippo.
tom_step вне форума  
Старый 10.03.2015, 14:27   #5
urban81
Писатель
Доп. информация
Лампочка Subverting wince6

Здравствуйте.Метод - правки таблицы импорта хорошо работал на винсе 5, но на 6-ке пока мной не побеждён.Нашёл одну статью про это "subverting_wince6.pdf".В этой статье приведены различия 5 и 6...Как раз по этой части.
urban81 вне форума  
Старый 24.03.2015, 08:25   #6
urban81
Писатель
Доп. информация
Лампочка Подготовка к инжекту!

Всем здравствуйте.Делаем инжект на тестовом приложении в эмуляторе винсе. В ПЕ идиторе будем править ехе!.Для этого сделаем приложение, которое может писать и читать в виртуальный ком порт. Сначала сделаем, которое пишет...Запустим его...Потом которое читает с порта - его то мы и будем править в ПЕ идиторе...При запущенном приложении, которое пишет, наше приложение которое читает, при удачном инжекте(перехвате АПИ реадфайл...)-будет писать лог...
Предисловие:
В ПЕ-эдиторе при разборе тестового ехе есть такие вещи:
...
Imports Table: COREDLL.dll
OrigFirstThunk: 00003108 (Unbound IAT)
ForwarderChain: 00000000
First thunk RVA: 00004000
Ordn Name 859 (Bound to: 8000035B)
...
"Ordn Name" - это, возможно, имя АПИ функции. "Bound to" - это думаю адресс функции. Значит "Ordn Name" - это название функции и "Bound to"-это адресс функции...То внедрив вручную длл со своей функцией (API ReadFile) можно поменять "Bound to", зная нужный "Ordn Name" и ... Вот только неизвестно какой какой "Ordn Name" принадлежит API ReadFile? И нет подобных примеров как эту задумку реализовать.По логике вещей это всё должно происходить в коде - добавляешь в таблицу новые функции и заменяешь (запомнив) у прежних адреса на свои. а в своих используешь запомненые адреса.но чтоб в готовом ехе это сделать - надо функцию свою в него дописать и вычислить адреса.
"ordn name" = ordinal,
Нужный номер можно подсмотреть в public\common\oak\lib\<arch>\retail\coredll.def
Выкладываю проект с тестовыми приложениями.Кто в теме ПРОБУЕМ!!!Всем спасибо!
[[Ссылки могут видеть только зарегистрированные пользователи. ]]>
urban81 вне форума  
Пользователь сказал cпасибо:
Старый 24.03.2015, 09:46   #7
avtoserg
Супер-модератор
 
Аватар для avtoserg
Доп. информация
По умолчанию

urban81, Привет!
на столе стоит голова от киа спортаж 2014
не видит спутников, не может открыть ни одного порта
я так понимаю ты эту проблему пытаешься решить?
__________________
Могу дать удочку, рыбу не просить!!!
Могу выдать время для [[Ссылки могут видеть только зарегистрированные пользователи. ]]>
avtoserg вне форума  
Старый 24.03.2015, 11:21   #8
urban81
Писатель
Доп. информация
Смех Про заметки!

Здравствуйте все.Да наши задачи похожи в чём то.Хочу РЕШИТЬ задачу и самому интересно и людей научу как на ХАЛЯВУ решать...Ведь когда всё объяснено с примерами-это здорово!
urban81 вне форума  
Пользователь сказал cпасибо:
Старый 24.03.2015, 11:25   #9
avtoserg
Супер-модератор
 
Аватар для avtoserg
Доп. информация
По умолчанию

чем могу помочь?
на киа клабе сборки работают с dll , переделывает hipo в nmea
но на рестайлинговых аппаратах этот фокус не проходит
__________________
Могу дать удочку, рыбу не просить!!!
Могу выдать время для [[Ссылки могут видеть только зарегистрированные пользователи. ]]>
avtoserg вне форума  
Старый 24.03.2015, 11:51   #10
urban81
Писатель
Доп. информация
Вопрос Пишем прогу которая пишет в порт...

Всем здравствуйте.Скачал GpsVirtualDriver в коде.Установил...Он сделал записи в реестре...Пишу приложение которое, будет писать в порт пакет байт( в дальнейшем так будем скидывать в порт перехваченные пакеты байт)...
Пишу (см.проект):
Код HTML:
	PDWORD BytesHandled = 0;
	COM_Init ( L"", 0 );
	COM_Open ( DEVICE_CONTEXT, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE );
	COM_IOControl ( OPEN_CONTEXT, 0, ( PBYTE ) & BufferTx, 	sizeof( BufferTx ), ( PBYTE ) & BufferRx, sizeof( BufferRx ), ( PDWORD ) & BytesHandled	);
После строки в GpsVirtualDriver.cpp :BOOL bRet=DeviceIoControl( hComm, dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut, NULL); выдаёт bRet == FALSE и DWORD ERR_XXX = GetLastError(); ==0x00000057.Как правильно написать организовать отправку байт? Ведь вроде всё просто там все функции по работе с файлами...
Всем заранее спасибо!
urban81 вне форума  
Старый 24.03.2015, 12:24   #11
Sanik
Писатель
Доп. информация
По умолчанию

Могу посоветовать в личку готовую сборку для ваших девайсов, стоит недорого
Sanik вне форума  
Старый 01.04.2015, 12:27   #12
urban81
Писатель
Доп. информация
Восклицание Тестовые проги готовы.Начинаем править exe файл!

Здравствуйте все.Тестовые проги готовы (всё необходимое в архиве).Начинаем править exe файл!Предисловие.В роли программы-утилиты,которая является аналогом утилиты
доктор фишь, будет моя прога ZZZ.exe. Она будет читать с порта ком1 в эмуляторе вин се(эмулятор приложен).При разборе в пе едиторе доктора фиша, нашёл ,что только она
имеет апи функцию реадфайл(доктор фишь читает с порта жпс данные) её идентификатор-00AAh.Нужно чтобы ёщё были какие нибудь данные в ком1.Сделаем так.Возьмём любой адептер юзб-ком.Нужно, чтобы на компе было два ком порта.В моём случае адаптер установил мне два порта ком1 и ком2. Сопрягаем ком1 в эмуляторе.Делаем далее нульмодем соединяем ком1 и ком2 так: 2(ком1)-3(ком2),2(ком2)-3(ком1),5(ком2)-5(ком1).Далее запускаем прогу Advanced Serial Port Monitor (приложена).В ней посылаем в ком2 любой
пакет байт.Наша прога ZZZ.exe должна ловить этот пакет байт (у меня ловит).XXXDLL.dll - длл которую мы будем внедрять вручную(с помощью пе тулс) в ZZZ.exe.В длл есть
функция function1 "заглушка"- нужна чтобы попасть в адресное пространство ZZZ.exe.Функция APIHook_ReadFile "подменнная"- нужна чтобы заменить апи реадфайл
(идентификатор-00AAh) в ZZZ.exe.Начинаем править ZZZ.exe.1.Внедряемся в адресное пространство ZZZ.exe.Положим ZZZ.exe и XXXDLL.dll в одну папку и cмотри
картинку.Делаем как на картинках.Обясняю (пока не знаю почему так).Внедрив заглушку надо поменять Original first Thunk.Проследив, как они располагаются в других
библиотеках(смотри рисунок 5 и 6).Они располагаются с приращением 4.Находим последний Original first Thunk в библиотеке commctrl.dll 32A8.И прибовляем к нему 4 = 32AC- это и будет наш Original first Thunk.Сохраняем всё и запускаем.Если, до этих действий добавить в XXXDLL.dll после кода "case DLL_PROCESS_ATTACH:" любое сообщение, то после наших исправлений оно должно появиться-это и есть знак МЫ НА ПРАВИЛЬНОМ ПУТИ!!!Вот попали в адресное пространство ZZZ.exe.Дальше надо как то заменить апи реадфайл на на нашу функцию APIHook_ReadFile...Остановился здесь...Уважаемые форумчане пробуем, правим, заменяем, делимся...Дальше план такой- при удачной замене длл XXXDLL.dll,будет писать лог...Но мы можем и не писать, а перенаправлять данные в виртуальный порт(в архиве есть в коде), чтобы с него кушала наши данные любая другая навигация.Так же там в проекте виртуального порта уже есть функция конвертации в нужный протокол NMEA (попался на просторах инета).Eщё, попав в адресное пространство мы можем перехватывать нажатия аппартных клавиш ГУ и тем саммым перенаправлять родную оболочку на любую другую программу навигации...Всем кто в теме спасибо за внимание.
П.С.Так же актуален вопрос: как внедрять длл с помощью кода и перехватывать реадфайл с помощью кода???
SDK2.doc-емулятор Вин се 6. переименовать в SDK2.msi
Архив:[[Ссылки могут видеть только зарегистрированные пользователи. ]]> Картинки:[[Ссылки могут видеть только зарегистрированные пользователи. ]]>
urban81 вне форума  
5 пользователя(ей) сказали cпасибо:
Старый 09.04.2015, 16:46   #13
urban81
Писатель
Доп. информация
Лампочка Есть ещё один план!!! Давайте обсудим!!!

Всем здравствуйте.Один мой земляк подсказал мне план.План прост.Хочу с вами его обсудить. Его + и -.План такой: Установить виртуальный ком порт.Изменить с помощью хекс редактора номер порта в приложении-утилите которая читает с порта(DrFish.exe).Сделать приложение, которое открывает аппаратный порт и скидывает данные в порт виртуальный, который мы поправили в DrFish.exe. Ну а там...Всем кто в теме спасибо за внимание.Жду обсуждений...
urban81 вне форума  
Пользователь сказал cпасибо:
Старый 10.04.2015, 11:51   #14
urban81
Писатель
Доп. информация
Лампочка Новый план не подходит.Но есть ещё один план!

Всем здравствуйте.При разборе в хекс редакторе фиша, уидел : да можно поменять номер порта, но так же увидел функции с приставкой "COM". Это говорит, скорее всего, о том, что доктор фишь не только читает но и управляет портом...Мне подсказали добрые люди, что можно "слушать вместо навишации(перехват через инжект) стэк 127.0.0.1 на порту"...Там есть нужные нам данные...Теперь нам нужно изучить риеестр ГУ, чтобы представить какие порты у нас есть и послушать их, да и вообще врага надо знать в лицо...Для этого нам понадобится редактор риестра для МИПС архитектуры.У кого есть поделитесь пожалуйста.Всем спасибо за внимание...
П.С.Так же актуален вопрос: как сделать перехват с помощью кода?
urban81 вне форума  
Старый 18.04.2015, 17:47   #15
Anton 1983
Куратор
 
Аватар для Anton 1983
Доп. информация
По умолчанию

typedef struct udp_hdr
{
unsigned short source_port; // Source port no.
unsigned short dest_port; // Dest. port no.
unsigned short udp_length; // Udp packet length
unsigned short udp_checksum; // Udp checksum (optional)
} UDP_HDR;
MessageBox(0, TEXT("программа открыта"),TEXT ("Error"), 0);
HANDLE FileHandle,FileHandle2;
if (FileHandle=CreateFile(L"\\DiskA3\\log_UDP.txt",GE NERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_NEW,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0))MessageBox(0, TEXT("файл открыт"), TEXT("ок"), 0);

SOCKET sServerListen;
struct sockaddr_in localaddr,clientaddr;
int iSize;
char szIP [1024];
strcpy (szIP,"127.0.0.1");

//sServerListen = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
sServerListen = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);

//sServerListen = socket(AF_INET, SOCK_DGRAM, 0);
if (sServerListen == INVALID_SOCKET)
{
MessageBox(0, TEXT("Can't create socket"),TEXT ("Error"), 0);
return 0;
}

localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
//localaddr.sin_addr.s_addr = inet_addr(szIP);
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(29000);

if (bind(sServerListen, (struct sockaddr *)&localaddr,sizeof(localaddr)) == SOCKET_ERROR)
{
MessageBox(0, TEXT("Can't bind"), TEXT("Error"), 0);
return 1;
}

Добавлено через 1 минуту
Лог с удп порта читай. А вот перехват я так и не освоил

Добавлено через 1 час 12 минут
ну а вообще на 4pda есть тема соответствующая, почитай ее
__________________
В личку писать только после того как отписались в форуме!!!
Anton 1983 вне форума  
Пользователь сказал cпасибо:
Ответ

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Штатная навигация Kia Sorento 2012года Valerrra Неправильно созданные темы и сообщения попадают сюда 0 19.11.2013 10:36


Текущее время: 13:26. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot

Копирайты
Время генерации страницы 0.15405 секунды с 13 запросами