небольшое изменение кода

Тема в разделе "WASM.BEGINNERS", создана пользователем jimiforce, 16 июл 2005.

  1. jimiforce

    jimiforce New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2005
    Сообщения:
    4
    у меня такой вопрос. Как можно изменить несколько инструкций в ехе файле(исходников нет),не ужели для

    этого надо искать их в нех редакторе и править на уровне

    машинного кода ,нет ли для этого более удобных инструментов
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Есть, OllyDbg например ...
     
  3. Thread

    Thread New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    26
    Адрес:
    Ukraine
    В зависимости от того, каких именно инструкций...

    Верно заметили,




    Многим нравится PEBrowser(мне в том числе). ;)



    Если хочешь изменить картинки, иконки, текстовые строчки и прочую ерунду(которая по существу не явл. инструкциями) - тут уже те редакторы ресурсов нужны. Restorator к примеру. На сайте полно отличных утилок )))



    А если что-то в PE-заголовке поковырять хочешь, то без PETools не обойтись (или аналога)... )))
     
  4. jimiforce

    jimiforce New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2005
    Сообщения:
    4
    В общем я бы хотел редактировать команды типа Jcc ну если надо исправить логику в программе.

    Для начала я подумал ведь надо найти начало инструкций в книге Румянцева (РАБОТА С ФАЙЛАМИ В WIN 32 API)

    прочитал что сначала в файле расположен ДОС заголовок из него надо узнать где расположен НТ заголовок

    и дальше в книге много всего, но каким образом вычислить начало инструкций если и написано то не очень

    понятно(автор пишет что это тема не для этой книги), и дойти получается только до определения начала НТ

    заголовка



    #include <windows.h>

    #include <winNT.rh>

    #include <winNT.h>

    #include <stdio.h>

    FILE *crack;



    _IMAGE_DOS_HEADER boxD;

    _IMAGE_NT_HEADERS boxNT;

    _IMAGE_OPTIONAL_HEADER adrNT;



    void main()

    {

    crack=fopen("exe.exe","r+b");

    fread(&boxD,sizeof(boxD),1,crack); /* грузим заголовок ДОСа из него узнаём нчало НТ







    fseek(crack,boxD.e_lfanew,SEEK_SET); /* выставляем начало НТ

    fread(&boxNT,sizeof(boxNT),1,crack);

    //printf(" Signature NT %xh\n",boxNT.Signature);

    if(boxNT.Signature==IMAGE_NT_SIGNATURE){ MessageBox(NULL,"ok","nt",MB_OK); }



    adrNT=boxNT.OptionalHeader; /*



    printf(" AddressOfEntryPoint %xh\n",adrNT.AddressOfEntryPoint);

    printf(" BaseOfCode %xh\n",adrNT.BaseOfCode);

    printf(" BaseOfData %xh\n",adrNT.BaseOfData);

    printf(" SizeOfCode %xh\n",adrNT.SizeOfCode);



    // дальше незнаю ??????????????????



    fclose(crack);

    }







    Если кто то знает как вычислить начало инструкций в исполняемом файле относительно его начала подскажите.

    Да и вот ещё что в книге я прочитал что код должен быть в секции .техт или .СОДЕ в зависимости от

    компилятора но почему в нех редакторе например .техт примерно в нычале файла а иструкции

    ближе к концу непонятно ??????? может в секции есть адрес кода ??!!??
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    jimiforce

    Ещё в формате PE32 не до конца разобрались, а уже сели писать свой дизассемблер.



    Возьмите любой приличный дизасм (HIEW, IDA, ...) и посмотрите на его размер. Таким косвенным образом можно заметить, что пары десятков строк сишного кода не хватит для воплощения логики хорошего дизассемблирующего движка. Там слишком много ньюансов.



    Да и зачем вам писать свой дизасм, когда в сети полно готовых и даже бесплатных? Для начала рекомендую поиграться с RTA (на этом сайте лежит в секции "Инструменты - Дизассемблеры").





    Когда инструкции (осмысленный код) в самом конце файла - это верный признак заражения вирусом :)
     
  6. Lurker

    Lurker New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2005
    Сообщения:
    6
    Надеюсь на меня никто не обидится, если я немного поделюсь своим опытом.



    Нужно было установить программу, а она как всегда отказывалась. На диске вместе с ней были какие-то немецкие взломщики, но они не работали. Тогда я решил сам взломать её(в первый раз).

    Я приблизительно знал, что мне нужно делать(программа выдавала сообщение), и для поиска и подправления нужного участка кода программы решил использовать ИДУ(IDA Pro). Найдя его, я увидел, что всё дело в паре команд(N - константа):

    CMP REGMEM, N

    Jxx Label


    Проблема была в N. Я не стал возиться с Jxx и решил заменить N на M(другая константа).

    Дело происходило в Windows95 на P54C, DOS-сеанс, Norton Commander. В ИДЕ я только занимался дизассемблированием, а

    патчил программу непосредственно в NC(F3-F4-F2-Patch).

    Для того чтобы найти в NC нужное мне место программы и заменить байты, я запомнил эти две команды + 3 до них и 3 после них, ввёл их в Турбо Дебаггере, чтобы получить машинный код, запомнил его. Далее в NC, воспользовавшись поиском строки шестнадцатеричных чисел, нашёл нужный участок кода, убедился(запустив поиск ещё раз), что других

    таких же участков кода больше нет(именно поэтому искались 8 команд, а не 2), наконец изменил нужные байты в команде CMP REGMEM, N.



    P.S.

    Я почти не знаю возможностей ИДЫ. Наверно после того как была найдена команда CMP REGMEM, N, произвести замену N на M можно было непосредственно в самой ИДЕ.