восстановление исходного текста

Тема в разделе "WASM.BEGINNERS", создана пользователем mfn, 5 июн 2007.

  1. mfn

    mfn New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    3
    Нужно по тексту, который выдает IDA, восстановить исходный текст. Если текст компилировать такой как есть, иногда все получается нормально, а иногда нет, Можно ли на примере процедуры, описать переменные и аргументы, их порядок, так как они должны быть в исходном тексте.

    Код (Text):
    1. .text:0040114F ; --------------- S U B R O U T I N E ---------------------------------------
    2. .text:0040114F
    3. .text:0040114F ; Attributes: bp-based frame
    4. .text:0040114F
    5. .text:0040114F sub_40114F      proc near               ; CODE XREF: start+D3p
    6. .text:0040114F
    7. .text:0040114F var_9           = byte ptr -9
    8. .text:0040114F var_8           = dword ptr -8
    9. .text:0040114F var_4           = dword ptr -4
    10. .text:0040114F arg_0           = dword ptr  8
    11. .text:0040114F arg_4           = dword ptr  0Ch
    12. .text:0040114F arg_8           = dword ptr  10h
    13. .text:0040114F arg_C           = dword ptr  14h
    14. .text:0040114F
    15. .text:0040114F                 push    ebp
    16. .text:00401150                 mov     ebp, esp
    17. .text:00401152                 add     esp, 0FFFFFFF4h
    18. .text:00401155                 push    ebx
    19. .text:00401156                 push    esi
    20. .text:00401157                 push    edi
    21. .text:00401158                 mov     eax, [ebp+arg_8]
    22. .text:0040115B                 mov     [ebp+var_8], eax
    23. .text:0040115E                 add     eax, [ebp+arg_C]
    24. .text:00401161                 mov     [ebp+var_4], eax
    25. .text:00401164                 mov     esi, [ebp+arg_8]
    26. .text:00401167                 mov     al, [esi]
    27. .text:00401169                 mov     [ebp+var_9], al
    28. .text:0040116C                 mov     ecx, [ebp+arg_4]
    29. .text:0040116F                 mov     esi, [ebp+arg_0]
    30. .text:00401172                 mov     edi, [ebp+arg_0]
    31. .text:00401175
    32. .text:00401175 loc_401175:                             ; CODE XREF: sub_40114F+5Bj
    33. .text:00401175                 mov     al, [esi]
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. proc sub_40114F arg_0,arg_4,arg_8,arg_C
    2. locals
    3. var_9 db ?
    4. var_8 dd ?
    5. var_4 dd ?
    6. endl
    7. ...
    8. mov     eax, [arg_8]
    9. mov     [var_8], eax
    10. add     eax, [arg_C]
    11. ...
    Типа того
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    mfn
    Из приведенного тобой фрагмента видим, что скорее всего типы аргументов следующие:
    BYTE*arg_0;
    int arg_4;
    BYTE*arg_8;
    int arg_C;
    а типы локальных переменных:
    BYTE* var_4;
    BYTE* var_8;
    BYTE var_9;
    Код:
    var_8 = arg_8;
    var_4 = arg_8 + arg_C;
    var_9 = *arg_8;
    ecx = arg_4; //здесь оптимизация - регистровая переменная, можем ее в дальнейшем обозначить c
    esi = edi = arg_0; //здесь оптимизация - регистровые переменные, можем их в дальнейшем обозначить i, j
    Дальше видимо loop, поскольку ссылка на loc_401175 снизу.

    Какая-то процедура, работающая со строками.
     
  4. mfn

    mfn New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    3
    Спасибо ответившим. Сразу не написал, что исходник делается в MASM 8. Там это делается немного по-другому. Как это сделать в документации по масму пишут одно, в книгах другое. Кокда все правильно, то IDA и отлачик распознают аргументы и выделяют в тексте

    004010BE |. 8D8B 2A304000 |LEA ECX,DWORD PTR DS:[EBX+40302A]
    004010C4 |. 6A 0F |PUSH 0F ; /Arg4 = 0000000F
    004010C6 |. 51 |PUSH ECX ; |Arg3
    004010C7 |. 68 00010000 |PUSH 100 ; |Arg2 = 00000100
    004010CC |. 8D85 E0FCFFFF |LEA EAX,DWORD PTR SS:[EBP-320] ; |
    004010D2 |. 50 |PUSH EAX ; |Arg1 = 0012FC7C
    004010D3 |. E8 77000000 |CALL Keyb.0040114F ; \Keyb.0040114F
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    mfn
    Ну, скажи спасибо, что тебе не предложили еще вариантов. Вообще-то по приведенному фрагменту можно с большой долей вероятности сказать, что исходник на С.