Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Удобная модификация PE header в x64dbg

0ldB8y
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
8 Дек 2018
Сообщения
132
Реакции
63
Кажется я немного ошибся форумом, и мне уже нужно регаться на каком-нить форуме для реверсеров, но тем не менее, вопрос - Что бы изменить адрес точки входа, пришлось лезть в ольку, там в окне дампа всё круто и понятно расписано где точка входа и другие полезные поля структуры IMAGE_OPTIONAL_HEADER32 , но как такое же классное окно открыть в x64Dbg и можно ли? И как ориентироваться в заголовке PE файла если вдруг прога 64-битная будет, ольку то не запустишь? Что думаете, котики?

olly-x64dbg.png
 
Корче гуглил гуглил - но нихуя так и не нагуглил как удобно менять сраную точку входа. Поэтому нахуячил говнокод, который ищет смещение точки входа, а по этому смещению уже потом в hex редакторе не составит труда заменить нужный байт.

C++:
Expand Collapse Copy
#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;


static char * ReadAllBytes(const char * filename, int * read)
{
    ifstream ifs(filename, ios::binary|ios::ate);
    ifstream::pos_type pos = ifs.tellg();

    int length = pos;

    char *pChars = new char[length];
    ifs.seekg(0, ios::beg);
    ifs.read(pChars, length);

    ifs.close();
    *read = length;
    return pChars;
}

int main(int argc, char** argv) {
    const int SIGN_LEN = 4;
    const char signaturePeHeader[SIGN_LEN] = {'\x50', '\x45', '\x00', '\x00'};
    const char * filename = "c:\\rev\\RegisterMe.exe";
    int read;
    char * pChars = ReadAllBytes(filename, &read);
    char * chTmp = pChars;
    bool find = false;
    int offset_AddressOfEntryPoint = 0;

    for(int i=0; i<read && find != true; i++){
        *chTmp++;
        offset_AddressOfEntryPoint++;
        for(int j=0; j<SIGN_LEN; j++){
            if(*chTmp==signaturePeHeader[j]){
                *chTmp++;
                i++;
                offset_AddressOfEntryPoint++;
            }
            else{
                break;
            }
            if(j==SIGN_LEN-1){
                find = true;
            }
        }
    }
    if (find) {
        cout << "FIND: " << find << endl;
        cout << hex << (offset_AddressOfEntryPoint + 36) << endl;
    } else{
        cout<<"sosat'";
    }

    delete[] pChars;
    system("pause");
    return 0;
}
 
Назад
Сверху Снизу