//Find pattern for offsets based on signature and mask
DWORD MemoryManager::FindPattern(DWORD start, DWORD size, const char* sig, const char* mask) 
{
	BYTE* data = new BYTE[size];

	unsigned long bytesRead;

	if (!ReadProcessMemory(hProcess, (LPVOID)start, data, size, &bytesRead))
	{
		delete[] sig;
		delete[] data;
		return NULL;
	}

	for (DWORD i = 0; i < size; i++) 
	{
		if (DataCompare((const BYTE*)(data + i), (const BYTE*)sig, mask))
		{
			delete[] sig;
			delete[] data;
			return start + i;
		}
	}
	delete[] sig;
	delete[] data;
	return NULL;
}
Beispiel #2
0
unsigned long utils::FindPattern(unsigned long address, unsigned long size, const char* pattern)
{
	for (unsigned long i = 0; i < size; ++i, ++address)
		if (DataCompare((const char*)address, pattern))
			return address;

	return NULL;
}
Beispiel #3
0
void I2CMasterTest(I2C_TypeDef *I2Cx)
{
	unsigned int i,j;
	
	
		I2CInitMasterMode(I2Cx,8000000L,100000L);
		//I2C1InitMasterMode(30000000L,100000L);
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*0, 16, tx_buffer0 );
		
		I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*0, 16, rx_buffer0 );

		DataCompare(tx_buffer0, rx_buffer0,16);
		
/*		
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*1, 16, tx_buffer1 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*2, 16, tx_buffer2 );
		I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*2, 16, rx_buffer0 );
		DataCompare(tx_buffer2, rx_buffer0,16);
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*3, 16, tx_buffer3 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*4, 16, tx_buffer0 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*5, 16, tx_buffer1 );
		I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*3, 16, rx_buffer0 );
		DataCompare(tx_buffer3, rx_buffer0,16);
		
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*6, 16, tx_buffer2 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*7, 16, tx_buffer3 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*8, 16, tx_buffer0 );
		I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*6, 16, rx_buffer0 );
	  DataCompare(tx_buffer2, rx_buffer0,16);
		
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*9, 16, tx_buffer1 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*10, 16, tx_buffer2 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*11, 16, tx_buffer3 );
		I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*9, 16, rx_buffer0 );
		DataCompare(tx_buffer1, rx_buffer0,16);
		
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*12, 16, tx_buffer0 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*13, 16, tx_buffer1 );
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, 16*14, 16, tx_buffer2 );
		I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, 16*13, 16, rx_buffer0 );
		DataCompare(tx_buffer1, rx_buffer0,16);
		

		uart_printf("I2Cx rush test\r\n");
		j = 0;
	for(i=0;i<64;i++)
	{
		I2CMasterWrite(I2Cx,FLASH_DEVICE_ADDR, j, 16, tx_buffer2 );
		I2CMasterRead(I2Cx,FLASH_DEVICE_ADDR, j, 16, rx_buffer0 );
		DataCompare(tx_buffer2, rx_buffer0,16);
		j = j + 16;
		
	}
*/
	//I2C1Close();
	uart_printf("I2Cx test over\r\n");

}
Beispiel #4
0
// Finds a pattern at the specified address
 DWORD Disasm::FindPattern ( DWORD dwAddress, DWORD dwSize, BYTE* pbMask, char* szMask )
{
	for( DWORD i = NULL; i < dwSize; i++ )
	{
		if( DataCompare( (BYTE*) ( dwAddress + i ), pbMask, szMask ) )
			return (DWORD)( dwAddress + i );
	}
	return 0;
}
Beispiel #5
0
void* TickSet::FindPattern(const void* start, size_t length, const unsigned char* pattern, const char* mask)
{
    auto maskLength = strlen(mask);
    for (size_t i = 0; i <= length - maskLength; ++i)
    {
        auto addr = reinterpret_cast<const unsigned char*>(start)+i;
        if (DataCompare(addr, pattern, mask))
            return const_cast<void*>(reinterpret_cast<const void*>(addr));
    }

    return nullptr;
}
Beispiel #6
0
DWORD FindPattern(DWORD StartAddress, DWORD CodeLen, BYTE* Mask, char* StrMask, unsigned short ignore)  
{  
	unsigned short Ign = 0;  
	DWORD i = 0;  
	while (Ign <= ignore)  
	{  
		if(DataCompare((BYTE*)(StartAddress + i++), Mask, StrMask)) 
			++Ign;  
		else if (i>=CodeLen)  
			return 0;  
	} 
	return StartAddress + i - 1;  
}
Beispiel #7
0
/// <summary>
/// Finds the pattern.
/// </summary>
/// <param name="dwAddress">The dw address.</param>
/// <param name="dwLen">Length of the dw.</param>
/// <param name="offset">The offset.</param>
/// <param name="deref">if set to <c>true</c> [deref].</param>
/// <param name="bMask">The b mask.</param>
/// <param name="szMask">The sz mask.</param>
/// <returns></returns>
DWORD_PTR FindPattern(DWORD_PTR dwAddress, DWORD_PTR dwLen, DWORD_PTR offset, bool deref, BYTE *bMask, char * szMask)
{
	for (DWORD_PTR i = 0; i < dwLen; i++)
	{
		if (DataCompare((BYTE*)(dwAddress + i), bMask, szMask))
		{
			if (deref)
			{
				DWORD_PTR dwOut;
				memcpy(&dwOut, *(void**)(dwAddress + i + offset), 4);
				return dwOut;
			}
			return (DWORD_PTR)(dwAddress + i + offset);
		}
	}
	return 0;
}