пишем патч для Порнокачалки

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 3 Dec 2007.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    бинарник порнокачалки попрежнему тут http://www.rapidshare.ru/483281
    бинарник патча здесь: http://www.rapidshare.ru/487761

    Итак, сегодня мы с вами разберемся чтоже такое патчи и для чего они нужны.
    Ктото из вас обмолвился что прога создавала на харде до 30000 файлов, я на самом
    деле такого не учел, но потенциально это возможно. и вот в чем причина.


    Вот код оригинала:

    // ОРИГИНАЛ:
    //
    // if(buffer[0]=='<')break; // no file - те в буфере имеем не жпег файл а отчет что файла нет,
    // разные прокся и фильтры могут начинать отчет не только с этого значка,
    // поэтому можем получить реально хуеву тучу файлов.


    // деассемблируем в IDA:
    // .text:004010E3 cmp byte ptr [esp+18760h+Buffer], 3Ch
    // .text:004010EB jz short loc_401150

    // двоичный код обеих инструкций:
    // 80 BC 24 BC 00 00 00 3C 74 63


    а теперь, нужная логика патча:

    // ПАТЧ:
    //
    // if(buffer[0]!='я')break; // все JPEG картинки как правило начинаются с байта 0xFF

    // деассемблирование:
    // .text:004010E3 cmp byte ptr [esp+18760h+Buffer], FFh
    // .text:004010EB jnz short loc_401150

    // двоичный код обеих инструкций:
    // 80 BC 24 BC 00 00 00 FF 75 63


    итак, нам надо перезаписать всего 2 байта по смещению 0x10EA в файле getporn.exe:
    3C 74 ---> FF 75



    пишем патч, который на выходе весит всего лишь полтора кила...

    #include <windows.h>

    #pragma comment(linker,"/MERGE:.rdata=.text")
    #pragma comment(linker,"/SECTION:.text,EWRX")
    #pragma comment(linker, "/NODEFAULTLIB")
    #pragma comment(linker, "/ENTRY:startcode")


    int __stdcall startcode()
    {
    DWORD w;
    char patch[2] = {0xFF, 0x75};
    HANDLE hF = CreateFile("getporn.exe",GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
    if(hF==INVALID_HANDLE_VALUE){
    MessageBox(0,"Could not open getporn.exe!!!", "patch error",MB_OK|MB_ICONSTOP);
    return -1;
    }
    SetFilePointer(hF,0x10eA,0,FILE_BEGIN);
    WriteFile(hF,patch,sizeof(patch),&w,0);
    CloseHandle(hF);
    MessageBox(0,"enjoy!","patch applied",MB_OK|MB_ICONINFORMATION);
    return 0;
    }


    ... и вуаля))))
     
    1 person likes this.
  2. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Ух, трип-репорты пошли какие-то замороченые, неужели нельзя как podkashey написать: "а бля, хуе мое, сожрал ничего нет просто на ржач пробило и немного чувствуешь себя мудаком и все. ***ня имхо". :)
    Снег, может сетап сделать к патчу? Оболочку установки и т.д. ;)
     
    1 person likes this.
  3. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    А Tweak будет? или Professional Edition ? :)
     
    2 people like this.
  4. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Мораль: "Подрачил на скорую руку, а потом от проблем избавляться хитровжопистыми методами..." ;)
     
  5. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    КЕЗ пиздец, те срочно необходим курс бутиратной терапии)))))))))))))))))))))
     
    1 person likes this.