Току що започвам с обратното инженерство.
Създадох малко C++ ConsoleApplication и се опитвам да извикам NewFunction чрез инжектирана DLL.
void NewFunction()
{
DWORD dwImageBase = (DWORD)GetModuleHandle(NULL);
std::cout << "ImageBase: " << ToHex(dwImageBase) << std::endl;
std::cout << "NewFunction: " << ToHex((DWORD)&NewFunction) << std::endl;
std::cout << "Offset: " << ToHex((DWORD)&NewFunction - dwImageBase) << std::endl;
}
Примерен резултат:
ImageBase: F90000
NewFunction: FA111D
Offset: 1111D
Сега, когато извикам 0xFA111D с моя инжектиран DLL, той работи според очакванията и го отпечатва отново. (DLL извиква ImageBase + Offset)
Това, което обаче не мога да разбера, е как да получа адреса на NewFunction с IDA Pro...
В IDA:
- функцията се намира на: 0x4133F0
- Базата на изображението е: 0x400000
- Изчисленото отместване е: 0x133F0
Не трябва ли поне отместването да е същото? Пропускам ли нещо съществено тук?