Реверсинг. Задай вопрос - получи ответ

Discussion in 'Реверсинг' started by 0x0c0de, 2 Sep 2007.

  1. V01T

    V01T New Member

    Joined:
    11 Jul 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Помогите перевести на С++
    Code:
    call    ds:VirtualAlloc
    mov     [edi], eax
    mov     byte ptr [eax], 55h
    inc     eax
    mov     ecx, [esp+0Ch+arg_0]
    push    4
    mov     byte ptr [eax], 8Bh
    inc     eax
    pop     ebx
    mov     byte ptr [eax], 0ECh
    inc     eax
    mov     byte ptr [eax], 68h
    inc     eax
    mov     [eax], ecx
    add     eax, ebx
    cmp     esi, 1
    jl      short loc_10001072
    Собственно затруднения вызывает
    Code:
    mov     byte ptr [eax], 55h
    inc     eax
     
    #661 V01T, 4 May 2010
    Last edited: 4 May 2010
  2. s0l_ir0n

    s0l_ir0n Active Member

    Joined:
    14 Mar 2009
    Messages:
    399
    Likes Received:
    144
    Reputations:
    18
    V01T
    судя по виду, это листинг из иды. а она умеет генерировать с++ кодес
     
  3. V01T

    V01T New Member

    Joined:
    11 Jul 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    s0l_ir0n
    Code:
      SIZE_T v3; // ebx@1
      int v4; // eax@7
      void *v5; // edi@7
      LPVOID v6; // eax@7
      int v7; // eax@8
      int v8; // eax@10
      int v9; // edx@12
      signed int v10; // ecx@12
      int v11; // eax@13
      int v12; // eax@14
    
      v3 = 21;
      if ( a3 >= 1 )
        v3 = 24;
      if ( a3 >= 2 )
        v3 += 3;
      if ( a3 >= 3 )
        v3 += 2 * (3 * a3 - 6);
      v5 = calloc(1u, 8u);
      v6 = VirtualAlloc(0, v3, 0x1000u, 0x40u);
      *(_DWORD *)v5 = v6;
      *(_BYTE *)v6++ = 0x55u;
      *(_BYTE *)v6++ = -117;
      *(_BYTE *)v6++ = -20;
      *(_BYTE *)v6++ = 104;
      *(_DWORD *)v6 = a1;
    
    HEX Rays выдал вот такое ... даже приведя к более лучшему виду *(BYTE *)v6++ = 0x55; получаю ошибку о неизвестном размере LPVOID
     
  4. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Цель: подредактировать одну программу (пропатчить), но дело таки в том, что нужно не просто к примеру поменять jz на jnz а вставить (выполнить) большой блок кода (в опред. месте программы), как это сделать?
    Проблема: я никогда не сталкивался с патчингом такого рода, следовательно не знаю как и куда сувать написаный блок кода (слышал что можно в конец дописать свой код, и где надо -> в конец с джампиться, но я с такой темой не знаком)
     
    #664 wolmer, 6 May 2010
    Last edited: 6 May 2010
  5. swt1

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

    Joined:
    16 Feb 2008
    Messages:
    306
    Likes Received:
    78
    Reputations:
    21
  6. V01T

    V01T New Member

    Joined:
    11 Jul 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    По прежнему топчусь на месте с реконструкцией данной DLL скачать можно с офф сайта
    Расскажите хотя принцип её работы или подскажите ссылочку с аналогичным решением ... просто не врубаюсь там ни чего не вписывается ни джампов ни вызовов
     
    #666 V01T, 6 May 2010
    Last edited: 6 May 2010
  7. DrakonHaSh

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

    Joined:
    16 Apr 2008
    Messages:
    118
    Likes Received:
    29
    Reputations:
    24
    Code Snippet Creator (Iczelion)
    или находишь в самом конце секции кода блок заполненный нулями (нули там для выравнивания блока по границе 512,1024...) и пишешь туда свой код. можно и в другую секцию, (или добавить новую секцию) но не забудь поставить у нее атрибут code - чтобы код в этой секции мог исполняться
     
  8. XikarO

    XikarO Member

    Joined:
    20 May 2009
    Messages:
    16
    Likes Received:
    24
    Reputations:
    18
    Подскажите как сбросить просроченную лицензию в триалке?(даемон про)
     
  9. DrakonHaSh

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

    Joined:
    16 Apr 2008
    Messages:
    118
    Likes Received:
    29
    Reputations:
    24
    триал обычно сбрасывают при помощи trashreg или trialreset для всяких там asprotect и прочих армадилл :) но в данном случае это не тот случай :)

    Для новой установки программы после окончания триального срока надо сменить значение у параметра ComputerName в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName, а также в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

    или можешь здесь взять лоадер: http://ifolder.ru/11538869
     
    1 person likes this.
  10. Xieon

    Xieon New Member

    Joined:
    18 Aug 2009
    Messages:
    11
    Likes Received:
    1
    Reputations:
    0
    В реверсируемой программе используется куча дллок, я идой составил базу для нескольких, дал имена некоторым функциям и переменным, но отлаживать она позволяет только одну дллку, а там код скачет с одной на другую, и когда перескакивает на чужую длл вместо кода db, db, db, жутко неудобно. Можно ли как то подключить к иде idb-базы других файлов?
     
    #670 Xieon, 18 May 2010
    Last edited: 18 May 2010
  11. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Поставлен бряк, когда я трассирую в ollydbg (без захода в call (f8)) через это место:
    http://img237.imageshack.us/img237/1655/16004672.png

    То срабатывает бряк (хотя бряк далеко впереди находится)
    Сам call ссылается сюда:
    http://img193.imageshack.us/img193/2200/94160035.png

    Так вот, мне не понятно, почему срабатывает бряк когда я прохожу через этот call? (с помощью f8) Еще хочу заметить что тут jne в call'е не срабатывает никогда

    Версия ollydbg: 2.00 (beta 3)
     
    #671 wolmer, 20 May 2010
    Last edited: 20 May 2010
  12. zeppe1in

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

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    wolmer
    крутые картинки)
    ты уверен что call не выполняет тот код где стоит бряк?
    также нужно понимать что по F8 ставится бряк после кола и выполняется кол, может выход из него каким нибудь джампом, чорт знает куда, или ексепшон там гденить обрабатываеца и нет норм ретурна из функции, по этому так и получается. заходи в кол, и смотри что к чему там.
     
  13. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Уверен

    Заходил, ретурн нормально обрабатывается
     
  14. zeppe1in

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

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    wolmer
    попробуй ольку другую тогда. может глюк.
     
  15. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    1. отключи плагины, может какие-то конфликтуют
    если не помагает пункт
    2. качни чистубю ольку 110 с оффсайта
    3. замечал такой момент "зависания" при маршалинге бывает (если в этой функции есть вызовы функций вроде RPC!xxx, OLE!yyy). если у тебя такой случай то тут лучше отлаживать не трейсом (F8) а проскакивать по F9, поставив заранее бряк после CALLа
     
  16. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    Code:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char userPassw[50];
        cout << "Enter the password" << endl;
        cin >> userPassw;
        if(!strcmp(userPassw, "error"))
        {
            cout << "REGISTERD!" << endl;
        } else {
            cout << "FAIL!" << endl;
        }
        system("pause");
        return 0;
    }
    
    Написал простой крякмис.
    Тыркал его в ольке,вроде получилось сделать так,что бы сразу выводилось "REGISTRED",поменял адресс call.
    Попытался второй раз так сделать - нифига не получилось.
    Вопрос:
    Как такое сделать?
    В место этого адреса вот этого call:
    [​IMG]

    я писал адресс - 00401349

    Code:
    00401349  |. BA 19204400    MOV EDX,CrackMe.00442019                 ;  ASCII "REGISTERD!"
     
  17. DrakonHaSh

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

    Joined:
    16 Apr 2008
    Messages:
    118
    Likes Received:
    29
    Reputations:
    24
    тебе этот момент надо найти и
    if(!strcmp(userPassw, "error"))
    усорвие перехода поменять с условного [jnz наприме] на безусловный [jmp]

    если ты конечно специально извращениями не занимашься
     
  18. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    Да-да-да,извращения. Но понимаешь в чем соль? У меня получилось 1 раз как-то сделать тем способом,что я показывал. Хочу понять,где я теперь ошибаюсь
     
  19. SHAG

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

    Joined:
    14 Jul 2007
    Messages:
    57
    Likes Received:
    17
    Reputations:
    2
    Выложи свой крякмес, общими усилиями найдем решение.
     
  20. neprovad

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

    Joined:
    19 Oct 2007
    Messages:
    900
    Likes Received:
    275
    Reputations:
    59
    вы даже до кода вроде не добрались, это начало программы, этам инициализации и т.п.
    Откройте свою программу в IDA Pro дизассемблере и посмотрите там для начала ( а еще лучше добавьте при компилиции параметров для вывода asm листинга чтоб понять что и как в С коде переводится в asm.)