uint8_t MXSConfig::GetSensorType() { pinMode(12, INPUT); pinMode(13, INPUT); pinMode(14, INPUT); pinMode(15, INPUT); pinMode(2, INPUT); uint8_t tryed=0; while (addr[0] != 0x2D && tryed<5) { SearchAddress(addr); tryed++; } if (tryed==20) return 0; ds.reset(); ds.select(addr); ds.write(0xF0, 1); // Read Memory ds.write(0x00, 1); //Read Offset 0000h ds.write(0x00, 1); ds.read(); ds.read(); return ds.read(); }
DWORD CAttachMemory::GetCodeAddress(LPBYTE lpData, size_t Length) { if (m_pExeNTHdr == NULL) return 0; PIMAGE_SECTION_HEADER pTextSect = GetSectionHeader(0); DWORD dwTextAddress = m_pExeNTHdr->OptionalHeader.ImageBase + pTextSect->VirtualAddress; return SearchAddress(dwTextAddress, pTextSect->Misc.VirtualSize, lpData, Length); }
DWORD CAttachMemory::SearchData(LPCTSTR lpTargetString) { if (m_pExeNTHdr == NULL) return 0; PIMAGE_SECTION_HEADER pDataSect = GetSectionHeader(2); DWORD dwDataAddress = m_pExeNTHdr->OptionalHeader.ImageBase + pDataSect->VirtualAddress; DWORD dwTargetAddress = SearchAddress(dwDataAddress, pDataSect->Misc.VirtualSize, lpTargetString); return dwTargetAddress; }
DWORD CAttachMemory::GetCallAddress(DWORD shift) { if (m_pExeNTHdr == NULL) return 0; BYTE code[5]; code[0] = 0xE8; *reinterpret_cast<DWORD*>(code+1) = shift; PIMAGE_SECTION_HEADER pTextSect = GetSectionHeader(0); DWORD dwTextAddress = m_pExeNTHdr->OptionalHeader.ImageBase + pTextSect->VirtualAddress; return SearchAddress(dwTextAddress, pTextSect->Misc.VirtualSize, code, 0x05) + 0x05 + shift; }
uint16_t MXSConfig::GetSensorinterval() { if (addr[0] != 0x2D) { SearchAddress(addr); if (addr[0] != 0x2D) return 0; } ds.reset(); ds.select(addr); ds.write(0xF0, 1); // Read Memory ds.write(0x00, 1); //Read Offset 0000h ds.write(0x00, 1); ds.read(); ds.read(); ds.read(); return (uint16_t)ds.read()+(uint16_t)ds.read()*256; }
int MXSConfig::GetSensorInfo(uint8_t sensortype,uint16_t sensorinterval) { if (addr[0] != 0x2D) { SearchAddress(addr); if (addr[0] != 0x2D) return 0; } ds.reset(); ds.select(addr); ds.write(0xF0, 1); // Read Memory ds.write(0x00, 1); //Read Offset 0000h ds.write(0x00, 1); ds.read(); ds.read(); sensortype= ds.read(); sensorinterval=(uint16_t)ds.read()+(uint16_t)ds.read()*256; return 1; }
DWORD CAttachMemory::SearchCode(LPBYTE lpData, size_t Length, int shift) { if (m_pExeNTHdr == NULL) return 0; PIMAGE_SECTION_HEADER pTextSect = GetSectionHeader(0); DWORD dwTextAddress = m_pExeNTHdr->OptionalHeader.ImageBase + pTextSect->VirtualAddress; DWORD dwAddress = SearchAddress(dwTextAddress, pTextSect->Misc.VirtualSize, lpData, Length) + shift; if (dwAddress == 0) return 0; DWORD dwOldProtect, dwTargetAddress; ::VirtualProtect(reinterpret_cast<LPVOID>(dwAddress), sizeof(DWORD), PAGE_READWRITE, &dwOldProtect); ::CopyMemory(&dwTargetAddress, reinterpret_cast<LPCVOID>(dwAddress), sizeof(DWORD)); ::VirtualProtect(reinterpret_cast<LPVOID>(dwAddress), sizeof(DWORD), dwOldProtect, &dwOldProtect); return dwTargetAddress; }
int MXSConfig::ReadAllMem(byte* memdata,byte size) { int i; if (addr[0] != 0x2D) { SearchAddress(addr); if (addr[0] != 0x2D) return 0; } ds.reset(); ds.select(addr); ds.write(0xF0, 1); // Read Memory ds.write(0x00, 1); //Read Offset 0000h ds.write(0x00, 1); for (i = 0; i < size; i++) //whole mem is 144 { memdata[i] = ds.read(); } return 1; }