Win32 debugger-> дизассемблерный листинг

Тема в разделе "WASM.RESEARCH", создана пользователем Ox8BFF55, 31 дек 2009.

  1. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    Откуда начинается дизассембилирование в отладчиках?? Я имею ввиду не ту ситуацию, когда дизассемблерный листинг начинается от текущего eip, а когда происходит произвольный просмотер, то и есть переход по адрессу(OllyDbg ни сразу, а точнее в некоторых случаях не сразу восстонавливает нормальный листинг, но в большенстве случаев какимто образом приводит в нормальный вид). Так откуда же отладчик начинает дизассембилировать код???
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    С указанного адреса. Если ты "ошибся", первые 2-3 команды будут неправильными, потом все обычно синхронизируется с "истинными" командами. Это конечно не касается морфов и всякой экзотики.
    А вообще тебе, как и многим задающим примитивные вопросы, пожелание - "включай мозги".
    Ну надоело разжевывать то, что можно за 5-10 минут методом тыка постичь.
     
  3. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    Нет, нет и еще раз нет. Поиграйся с Ольгой.... Перейди по адрессу в середину инструкции, а потом поскролься и увидиш что Ольга все нормально восстанавливает..... Посмотри что Ольга делает с DLL... Тут что то не так, в том смысле чтото Ольга знает

    ну это и так понятно....

    Хотя и ольга ошибается

    Код (Text):
    1. 7C801457   /7C 42                JL SHORT 7C80149B
    2. 7C801459   |3992 7CB0D890        CMP [EDX+90D8B07C],EDX
    3. 7C80145F  ^|7C C0                JL SHORT 7C801421
    4. 7C801461   |D7                   XLAT BYTE PTR [EBX+AL]
    5. 7C801462   |90                   NOP
    6. 7C801463   |7C 10                JL SHORT 7C801475
    7. 7C801465   |D990 7C90D595        FST DWORD PTR [EAX+95D5907C]
    8. 7C80146B   |7C 60                JL SHORT 7C8014CD
    9. 7C80146D   |D5 90                AAD 90
    10. 7C80146F  ^|7C 80                JL SHORT 7C8013F1
    11. 7C801471   |D7                   XLAT BYTE PTR [EBX+AL]
    12. 7C801472   |90                   NOP
    13. 7C801473   |7C 60                JL SHORT 7C8014D5
    14. 7C801475   |DE90 7C714691        FICOM WORD PTR [EAX+9146717C]
    15. 7C80147B  ^|7C A8                JL SHORT 7C801425
    16. 7C80147D   |B0 97                MOV AL,97
    17. 7C80147F   |7C 6B                JL SHORT <&ntdll.RtlReleaseActivationCon>
    18. 7C801481   |D5 95                AAD 95
    19. 7C801483  ^|7C F0                JL SHORT 7C801475
    20. 7C801485   |CE                   INTO
    21. 7C801486   |90                   NOP
    22. 7C801487  ^|7C 87                JL SHORT <&ntdll.RtlSetEnvironmentVariab>
    23. 7C801489   |9D                   POPFD
    24. 7C80148A   |92                   XCHG EAX,EDX
    25. 7C80148B   |7C 0F                JL SHORT <&ntdll.NtSetEvent>
    26. 7C80148D   |E4 91                IN AL,91
    27. 7C80148F  ^|7C A4                JL SHORT 7C801435
    28. 7C801491   |2D 927C792E          SUB EAX,2E797C92
    29. 7C801496   |92                   XCHG EAX,EDX
    30. 7C801497  ^|7C FA                JL SHORT 7C801493
    31. 7C801499   |14 91                ADC AL,91
    32. 7C80149B  ^\7C F0                JL SHORT 7C80148D
    33. 7C80149D    DB90 7CC0CF90        FIST DWORD PTR [EAX+90CFC07C]
    34. 7C8014A3  ^ 7C E0                JL SHORT 7C801485
    35. 7C8014A5    D6                   SALC
    36. 7C8014A6    90                   NOP
    37. 7C8014A7    7C 70                JL SHORT 7C801519
    38. 7C8014A9    D190 7C20D690        RCL DWORD PTR [EAX+90D6207C],1
    39. 7C8014AF    7C 10                JL SHORT 7C8014C1
    40. 7C8014B1    DA90 7CF0D090        FICOM DWORD PTR [EAX+90D0F07C]
    41. 7C8014B7  ^ 7C C0                JL SHORT 7C801479
    42. 7C8014B9    D5 90                AAD 90
    43. 7C8014BB    7C 00                JL SHORT 7C8014BD
    44. 7C8014BD    DA90 7CE0DD90        FICOM DWORD PTR [EAX+90DDE07C]
    45. 7C8014C3    7C 20                JL SHORT 7C8014E5
    46. 7C8014C5    DF90 7CF0D190        FIST WORD PTR [EAX+90D1F07C]
    47. 7C8014CB  ^ 7C A0                JL SHORT 7C80146D
    48. 7C8014CD    D190 7C70D690        RCL DWORD PTR [EAX+90D6707C],1
    49. 7C8014D3  ^ 7C 80                JL SHORT 7C801455
    50. 7C8014D5    DD90 7CB0CF90        FST QWORD PTR [EAX+90CFB07C]
    51. 7C8014DB    7C 70                JL SHORT 7C80154D
    52. 7C8014DD    D090 7C2C3191        RCL BYTE PTR [EAX+91312C7C],1
    53. 7C8014E3    7C 56                JL SHORT 7C80153B
    54. 7C8014E5    2990 7C31FC96        SUB [EAX+96FC317C],EDX
    55. 7C8014EB    7C 27                JL SHORT <&ntdll.RtlDecodePointer>
    56. 7C8014ED    05 917C5D76          ADD EAX,765D7C91
    57. 7C8014F2    91                   XCHG EAX,ECX
    58. 7C8014F3  ^ 7C B2                JL SHORT 7C8014A7
    59. 7C8014F5    FC                   CLD
    60. 7C8014F6    90                   NOP
    61. 7C8014F7    7C 40                JL SHORT 7C801539
    62. 7C8014F9    D6                   SALC
    63. 7C8014FA    90                   NOP
    64. 7C8014FB    7C 36                JL SHORT 7C801533
    65. 7C8014FD    3991 7C0D3991        CMP [ECX+91390D7C],EDX
    66. 7C801503  ^ 7C 90                JL SHORT 7C801495
    67. 7C801505    D390 7C90DB90        RCL DWORD PTR [EAX+90DB907C],CL
    68. 7C80150B    7C 20                JL SHORT 7C80152D
    69. 7C80150D    DE90 7C08E590        FICOM WORD PTR [EAX+90E5087C]
    70. 7C801513    7C 05                JL SHORT 7C80151A
    71. 7C801515    34 91                XOR AL,91
    72. 7C801517    7C 26                JL SHORT 7C80153F
    73. 7C801519    A8 92                TEST AL,92
    74. 7C80151B  ^ 7C A1                JL SHORT 7C8014BE
    75. 7C80151D    66:92                XCHG AX,DX
    76. 7C80151F    7C 05                JL SHORT 7C801526
    77. 7C801521    64:92                XCHG EAX,EDX
    78. 7C801523  ^ 7C E7                JL SHORT <&ntdll.NtSuspendThread>
    79. 7C801525    66:92                XCHG AX,DX
    80. 7C801527  ^ 7C 80                JL SHORT 7C8014A9
    Но многое восстонавливает правильно...
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А че это ты запихнул дизассемблировать список указателей? там каждый четвертый байт 7с
     
  5. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    Great согласен.. и все таки это наверное не должно дизассембилироватся, хотя и ничего военнного здесь нет....

    Но вопрос остается актуальным!
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Как это не должно? Этоможет быть расценено и как код тоже.
    Какой вопрос тебя интересует?
    Конечно нормально восстанавливает. Лукапит немножко назад.
    В чем вопрос то заключается? Кусок инструкции тоже может быть расценен как инструкция. Так уж устроено
     
  7. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    Вопрос в том, откуда начинается дизассембилирование? То и есть, листинг ассемблера идет и вверх и вниз, как дизассембилируется верхния часть?

    Например
    Код (Text):
    1. 004A447E  |.  5B                 POP EBX
    2. 004A447F  |.  59                 POP ECX
    3. 004A4480  |.  59                 POP ECX
    4. 004A4481  |.  5D                 POP EBP
    5. 004A4482  \.  C3                 RET
    6. 004A4483      90                 NOP
    7. 004A4484  /$  55                 PUSH EBP
    8. 004A4485  |.  8BEC               MOV EBP,ESP
    9. 004A4487  |.  53                 PUSH EBX
    10. 004A4488  |.  8B5D 08            MOV EBX,[EBP+8]
    Брякнулся например по адрессу
    Код (Text):
    1. 004A4484
    , Как верхния часть(004A447E - 004A4483) дизассембилировалась?
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    начало кодосекции, всякие релоки, экспорты, пролог, эпилог - все это в принципе можно юзать для определения кода. да и многое другое наверн
    но 100% алгоритма разделения код/данные не существует. даже часто код=данные.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Была смежная задача, вот решение:
    Выполняется анализ многих функций, как и сказал Freeman. Оля чтото подобное использует.
     
  10. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    Freeman
    Мне это не нужно

    Clerk как работает дизассемблер, я знаю, Вопрос от куда начинать дизассембелировать??
    Дизассембилировать несколько команд после eip простая задачка. Но тут вопрос неужели Ольга дизассембилирует модулями? Но делается это очень быстро. Наверное что то ольга кеширует. Может все сразу дизассембилирует? Так сшиком часто бы ошибалась.


    Код (Text):
    1. 00401000 > $ /EB 10              JMP SHORT 00401012
    2. 00401002   . |66:623A            BOUND DI,[EDX]
    3. 00401005   ? |43                 INC EBX
    4. 00401006   . |2B2B               SUB EBP,[EBX]
    5. 00401008   . |48                 DEC EAX
    6. 00401009   ? |4F                 DEC EDI
    7. 0040100A  /. |4F                 DEC EDI
    8. 0040100B  |? |4B                 DEC EBX
    9. 0040100C  |  |90                 NOP
    10. 0040100D  |  |E9                 DB E9
    11. 0040100E  |  |28014B00           DD OFFSET ollydbg.___CPPdebugHook
    Ольга в Ольге(это косщунство??)

    Ольга в WinDbg

    Код (Text):
    1. 00401000 eb10            jmp     ollydbg+0x1012 (00401012)
    2. 00401002 66623a          bound   di,dword ptr [edx]
    3. 00401005 43              inc     ebx
    4. 00401006 2b2b            sub     ebp,dword ptr [ebx]
    5. 00401008 48              dec     eax
    6. 00401009 4f              dec     edi
    7. 0040100a 4f              dec     edi
    8. 0040100b 4b              dec     ebx
    9. 0040100c 90              nop
    10. 0040100d e928014b00      jmp     008b113a
    11. 00401012 a11b014b00      mov     eax,dword ptr [ollydbg!Createpatchwindow+0x10ebb (004b011b)] ds:0023:004b011b=00000000
    Адресс 0040100d

    Хотя и WinDbg как загадочно дизассмет
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ox8BFF55
    Анализируйте(создавайте граф для) всего экспорта, который находится в секциях кода. Тогда заранее будет известно где указатель. Как делает оля не знаю, посмотрите на экспорт её, там наверно найдётся нужная функа.
     
  12. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ваш пост #3
    для этого и нужно стараться определить где код, а где данные.
    вот она решила, что там лежат данные.

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

    valterg, +1, включение мозга ацки помогает
     
  13. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Ox8BFF55
    если у вас произвольная цепочка байт то откуда хотите оттуда и дизасмите
    в древнейшие времена ответом на этот вопрос стала точка входа прописанная в заголовке exe файла
    щас заголовок стал больше и следовательно опорных точек откуда можно начинать дизасм также больше
    любая ссылка импорта экспорта в принципе позволяет найти адрес инструкции в файле
     
  14. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Из одного и того же факта - восстановления после скроллинга вверх, я сделал правильный вывод, а тов. Ox8BFF55 толчет воду в ступе :) Ему бесполезно объяснять, он не "включил" до сих пор....

    Нет там никакого кеша - нафига... Повторный дизасм маленького куска занимает мизер.

    Модулями дизасмит IDA, но и там нет волшебства - увидела CALL : отдисамила, если смогла. Но тьма кода остается неопознанным и тьма даже ANSI-строк в виде DB... Но последнее это уже не для x86...
     
  15. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    И не обижайся Ox8BFF55 - для особо тупых : не делай скроллинг, а уйди на другой адрес, а потом задай назад - все повторится... Если не повторится - значит ты выиграл и есть кеш. В hiew точно нет, в олли - х.з.
    Но думай, думай, и проверяй сам, а не говори...
     
  16. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    Получается надо строить дизассемблирную карту(Граф + конечный автомат). Но это очень просто обходится(хватает с emit поиграться)....

    Код (Text):
    1. 0048F462  |?  35 8B85DCF8   XOR EAX,F8DC858B
    2. 0048F467  |?  FFFF          ???                                      ;  Unknown command
    3.  
    4. 0048F463  |.  8B85 DCF8FFFF |||MOV EAX,[EBP-724]
    5. 0048F469  |.  833D 6C914D00>|||CMP DWORD PTR [4D916C],2
    valterg Специально нашел код с парой инструкций, если бы не таблица переходов(судя со всего) то сдесь бы такая каша бы была...
    А если экзоитки добавить....

    П.С. Получается дизассмить все сразу, и во время работы получается просто обновлять листинг...
     
  17. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А я разве спорил. Я и говорил рулетка.

    Возможно плохо смотрел все сообщения, но это ответ на незаданный вопрос. Правильный ответ - это отладчик IDA. Идем по коду и параллельно его расшифровываем. Если перевести твой текст , то ты про это и пытался сказать.
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ox8BFF55
    Мистфаль посмотрите, там ответы на ваши вопросы есть.
     
  19. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    >Откуда начинается дизассембилирование в отладчиках??

    Куда ткнеш отуда и будет.
     
  20. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    asmlamo, скочайте версии посвежее, они могут и без тыка отдизасметь.