Ищу плагин для IDA (создание ссылок на вирт. функции)

Тема в разделе "WASM.SOFTWARE", создана пользователем Ezrah, 3 фев 2012.

  1. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Ищу плагин, снабжающий вызовы виртуальных функций и вызываемые функции ссылками (cross-references). Т.е. работа его заключается в следующем:
    1) проводится трейс кода
    2) при попадании на инструкцию call reg добавить xref (call reg->[reg]) к call и xref ([reg]<-call reg) к [reg].
     
  2. reversecode

    reversecode Guest

    Публикаций:
    0
    чего чего... ничего не понял
     
  3. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    До:
    Код (Text):
    1. .text:00439530 sub_439530      proc near               ; DATA XREF: .rdata:004EBFE4o
    2. .text:00439530
    3. .text:00439530 var_8           = dword ptr -8
    4. .text:00439530 var_4           = dword ptr -4
    5. .text:00439530
    6. .text:00439530                 sub     esp, 8
    7. .text:00439533                 push    esi
    8. .text:00439534                 mov     esi, ecx
    9. .text:00439536                 mov     ecx, [esi+4]
    10. .text:00439539                 mov     eax, [ecx]
    11. .text:0043953B                 mov     edx, [eax+1Ch]
    12. .text:0043953E                 call    edx
    13. .text:00439540                 mov     ecx, [esi+4]
    14. .text:00439543                 xor     eax, eax
    15. .text:00439545                 mov     [esp+0Ch+var_8], eax
    16. .text:00439549                 mov     [esp+0Ch+var_4], eax
    17. .text:0043954D                 mov     eax, [ecx]
    18. .text:0043954F                 mov     eax, [eax+14h]
    19. .text:00439552                 lea     edx, [esp+0Ch+var_8]
    20. .text:00439556                 push    edx
    21. .text:00439557                 call    eax
    22. .text:00439559                 test    al, al
    23. .text:0043955B                 pop     esi
    24. .text:0043955C                 jnz     short loc_439566
    25. .text:0043955E                 xor     eax, eax
    26. .text:00439560                 xor     edx, edx
    27. .text:00439562                 add     esp, 8
    28. .text:00439565                 retn
    29. .text:00439566 ; ---------------------------------------------------------------------------
    30. .text:00439566
    31. .text:00439566 loc_439566:                             ; CODE XREF: sub_439530+2Cj
    32. .text:00439566                 mov     eax, [esp+8+var_8]
    33. .text:00439569                 mov     edx, [esp+8+var_4]
    34. .text:0043956D                 add     esp, 8
    35. .text:00439570                 retn
    36. .text:00439570 sub_439530      endp
    37. ========================
    38. .text:0042EE40 ; public: virtual bool __thiscall DataIO::Win32File64::Flush(void)
    39. .text:0042EE40 ?Flush@Win32File64@DataIO@@UAE_NXZ proc near ; DATA XREF: .rdata:004E9B6Co
    40. .text:0042EE40                 mov     eax, [ecx+8]
    41. .text:0042EE43                 push    eax             ; hFile
    42. .text:0042EE44                 call    ds:FlushFileBuffers
    43. .text:0042EE4A                 neg     eax
    44. .text:0042EE4C                 sbb     eax, eax
    45. .text:0042EE4E                 neg     eax
    46. .text:0042EE50                 retn
    47. .text:0042EE50 ?Flush@Win32File64@DataIO@@UAE_NXZ endp
    48. ========================
    49. .text:0042ED70 ; public: virtual bool __thiscall DataIO::Win32File64::GetSize(__int64 *)
    50. .text:0042ED70 ?GetSize@Win32File64@DataIO@@UAE_NPA_J@Z proc near
    51. .text:0042ED70                                         ; DATA XREF: .rdata:004E9B64o
    52. .text:0042ED70
    53. .text:0042ED70 var_8           = dword ptr -8
    54. .text:0042ED70 var_4           = dword ptr -4
    55. .text:0042ED70 arg_0           = dword ptr  4
    56. .text:0042ED70
    57. .text:0042ED70                 mov     ecx, [ecx+8]
    58. .text:0042ED73                 sub     esp, 8
    59. .text:0042ED76                 lea     eax, [esp+8+var_8]
    60. .text:0042ED79                 push    eax             ; lpFileSize
    61. .text:0042ED7A                 push    ecx             ; hFile
    62. .text:0042ED7B                 call    ds:GetFileSizeEx
    63. .text:0042ED81                 test    eax, eax
    64. .text:0042ED83                 jnz     short loc_42ED8D
    65. .text:0042ED85                 xor     al, al
    66. .text:0042ED87                 add     esp, 8
    67. .text:0042ED8A                 retn    4
    68. .text:0042ED8D ; ---------------------------------------------------------------------------
    69. .text:0042ED8D
    70. .text:0042ED8D loc_42ED8D:                             ; CODE XREF: DataIO::Win32File64::GetSize(__int64 *)+13j
    71. .text:0042ED8D                 mov     eax, [esp+8+arg_0]
    72. .text:0042ED91                 mov     edx, [esp+8+var_8]
    73. .text:0042ED94                 mov     ecx, [esp+8+var_4]
    74. .text:0042ED98                 mov     [eax], edx
    75. .text:0042ED9A                 mov     [eax+4], ecx
    76. .text:0042ED9D                 mov     al, 1
    77. .text:0042ED9F                 add     esp, 8
    78. .text:0042EDA2                 retn    4
    79. .text:0042EDA2 ?GetSize@Win32File64@DataIO@@UAE_NPA_J@Z endp
    После:
    Код (Text):
    1. .text:00439530 sub_439530      proc near               ; DATA XREF: .rdata:004EBFE4o
    2. .text:00439530
    3. .text:00439530 var_8           = dword ptr -8
    4. .text:00439530 var_4           = dword ptr -4
    5. .text:00439530
    6. .text:00439530                 sub     esp, 8
    7. .text:00439533                 push    esi
    8. .text:00439534                 mov     esi, ecx
    9. .text:00439536                 mov     ecx, [esi+4]
    10. .text:00439539                 mov     eax, [ecx]
    11. .text:0043953B                 mov     edx, [eax+1Ch]
    12. .text:0043953E                 call    edx ; DataIO::Win32File64::Flush(void) ; DataIO::Win32File64::Flush(void)
    13. .text:00439540                 mov     ecx, [esi+4]
    14. .text:00439543                 xor     eax, eax
    15. .text:00439545                 mov     [esp+0Ch+var_8], eax
    16. .text:00439549                 mov     [esp+0Ch+var_4], eax
    17. .text:0043954D                 mov     eax, [ecx]
    18. .text:0043954F                 mov     eax, [eax+14h]
    19. .text:00439552                 lea     edx, [esp+0Ch+var_8]
    20. .text:00439556                 push    edx
    21. .text:00439557                 call    eax ; DataIO::Win32File64::GetSize(__int64 *) ; DataIO::Win32File64::GetSize(__int64 *)
    22. .text:00439559                 test    al, al
    23. .text:0043955B                 pop     esi
    24. .text:0043955C                 jnz     short loc_439566
    25. .text:0043955E                 xor     eax, eax
    26. .text:00439560                 xor     edx, edx
    27. .text:00439562                 add     esp, 8
    28. .text:00439565                 retn
    29. .text:00439566 ; ---------------------------------------------------------------------------
    30. .text:00439566
    31. .text:00439566 loc_439566:                             ; CODE XREF: sub_439530+2Cj
    32. .text:00439566                 mov     eax, [esp+8+var_8]
    33. .text:00439569                 mov     edx, [esp+8+var_4]
    34. .text:0043956D                 add     esp, 8
    35. .text:00439570                 retn
    36. .text:00439570 sub_439530      endp
    37. ========================
    38. .text:0042EE40 ; public: virtual bool __thiscall DataIO::Win32File64::Flush(void)
    39. .text:0042EE40 ?Flush@Win32File64@DataIO@@UAE_NXZ proc near ; CODE XREF: sub_439530+E?
    40. .text:0042EE40                                         ; DATA XREF: .rdata:004E9B6Co
    41. .text:0042EE40                 mov     eax, [ecx+8]
    42. .text:0042EE43                 push    eax             ; hFile
    43. .text:0042EE44                 call    ds:FlushFileBuffers
    44. .text:0042EE4A                 neg     eax
    45. .text:0042EE4C                 sbb     eax, eax
    46. .text:0042EE4E                 neg     eax
    47. .text:0042EE50                 retn
    48. .text:0042EE50 ?Flush@Win32File64@DataIO@@UAE_NXZ endp
    49. ========================
    50. .text:0042ED70 ; public: virtual bool __thiscall DataIO::Win32File64::GetSize(__int64 *)
    51. .text:0042ED70 ?GetSize@Win32File64@DataIO@@UAE_NPA_J@Z proc near
    52. .text:0042ED70                                         ; CODE XREF: sub_439530+27p
    53. .text:0042ED70                                         ; DATA XREF: .rdata:004E9B64o
    54. .text:0042ED70
    55. .text:0042ED70 var_8           = dword ptr -8
    56. .text:0042ED70 var_4           = dword ptr -4
    57. .text:0042ED70 arg_0           = dword ptr  4
    58. .text:0042ED70
    59. .text:0042ED70                 mov     ecx, [ecx+8]
    60. .text:0042ED73                 sub     esp, 8
    61. .text:0042ED76                 lea     eax, [esp+8+var_8]
    62. .text:0042ED79                 push    eax             ; lpFileSize
    63. .text:0042ED7A                 push    ecx             ; hFile
    64. .text:0042ED7B                 call    ds:GetFileSizeEx
    65. .text:0042ED81                 test    eax, eax
    66. .text:0042ED83                 jnz     short loc_42ED8D
    67. .text:0042ED85                 xor     al, al
    68. .text:0042ED87                 add     esp, 8
    69. .text:0042ED8A                 retn    4
    70. .text:0042ED8D ; ---------------------------------------------------------------------------
    71. .text:0042ED8D
    72. .text:0042ED8D loc_42ED8D:                             ; CODE XREF: DataIO::Win32File64::GetSize(__int64 *)+13j
    73. .text:0042ED8D                 mov     eax, [esp+8+arg_0]
    74. .text:0042ED91                 mov     edx, [esp+8+var_8]
    75. .text:0042ED94                 mov     ecx, [esp+8+var_4]
    76. .text:0042ED98                 mov     [eax], edx
    77. .text:0042ED9A                 mov     [eax+4], ecx
    78. .text:0042ED9D                 mov     al, 1
    79. .text:0042ED9F                 add     esp, 8
    80. .text:0042EDA2                 retn    4
    81. .text:0042EDA2 ?GetSize@Win32File64@DataIO@@UAE_NPA_J@Z endp
    Семпл сделан с помощью плагина "Change the callee address Alt+F11". Обратите внимание на добавление в комментариях названий процедур куда идёт вызов по call reg и добавление перекрестных ссылок к самим функциям, которые вызываются. Нужно то же самое, только чтобы делалось автоматически при трейсинге.
     
  4. reversecode

    reversecode Guest

    Публикаций:
    0
    мож это подойдет
    http://exelab.ru/f/index.php?action=vthread&forum=3&topic=13247
    никогда ею не пользовался но вроде чего там такое умеет
     
  5. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Нипонятно
     
  6. reversecode

    reversecode Guest

    Публикаций:
    0
    не надо меня квотить

    http://www.zynamics.com/binnavi.html
    вот так значит
    посмотрите почитайте подумайте, вдруг то что надо
    кроме того что оно там рисует и строит графики
    помоему оно и трейсить умеет и чего то там расставлять
     
  7. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    О_О

    Спасибо, интересная штука, видимо, возможностей даже больше, чем в IDA. Во всяком случае то, что мне требуется, там вроде есть (демонстрируется на видео). Но слишком большая работа проведена в IDA, переносить всё это в BinNavi утомительно. Плагин был бы идеальным решением.