2 вопроса

Тема в разделе "WASM.BEGINNERS", создана пользователем jeni, 21 апр 2007.

  1. jeni

    jeni Евгений

    Публикаций:
    0
    Регистрация:
    10 мар 2007
    Сообщения:
    41
    Почему LEA EBX,DWORD PTR SS:[ESP+6E] на байт длинее LEA EBX,DWORD PTR SS:[EBP+6E]???

    Возможно ли написать функцию вычисляющую хеш строки, размером(функция) меньше 24 байт. Дано: в ecx длина строки в edi указатель на строку.

    P.S. Если не жалко, поделитесь пожалуйста своими поисковыми системами API функций. РАЗМЕРОМ меньше 64 байт, хотя если там реализация вычисления хеша то тоже давайте :)
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    1
    Потому, что появляется поле SIB.

    2. Вот - для поиска апи подойдёт
    Код (Text):
    1.     xor eax,eax
    2. @@:
    3.     add al,[edi+ecx]
    4.     rol eax,3  
    5.     dec ecx
    6.     jne @b
    3. А откуда такие жёсткие ограничения(про 64 байта). Когда-то писал в 48, тодько не помнё в какой системе(hex/dec) эти 48 были :).
     
  3. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    jeni

    API Ищу вот так (собственно как и драйвер гружу).
    Код (Text):
    1. ;───────────────────────────────────────────────────────────────────────────
    2. ; 1. Первым делом определим как нас загрузили. Если как драйвер, то переход
    3. ;───────────────────────────────────────────────────────────────────────────
    4. Start32bit: mov ax,cs
    5.         test al,011b
    6.         jz StartWinNTDrv
    7. ;───────────────────────────────────────────────────────────────────────────
    8. ; 2. Найдем базовый адрес необходимые нам функции в kernel32.dll
    9. ;───────────────────────────────────────────────────────────────────────────
    10.         call FillFunctionName
    11. NumOfFuctions   equ 3+5
    12.  
    13. GetModuleHandleA    equ <[ebp]>
    14.         db "GetModuleHandleA",0
    15. GetModuleFileNameA  equ <[ebp+4]>
    16.         db "GetModuleFileNameA",0
    17. LoadLibraryA        equ <[ebp+8]>
    18.         db "LoadLibraryA",0
    19.         db 0
    20. advapi32    db "advapi32.dll",0
    21. OpenSCManagerA  equ <[ebp+0Ch]>
    22. advapy32Functions db "OpenSCManagerA",0
    23. CreateServiceA  equ <[ebp+10h]>
    24.         db "CreateServiceA",0
    25. StartServiceA   equ <[ebp+14h]>
    26.         db "StartServiceA",0
    27. CloseServiceHandle equ <[ebp+18h]>
    28.         db "CloseServiceHandle",0
    29. OpenServiceA    equ <[ebp+1Ch]>
    30.         db "OpenServiceA",0
    31.         db 0
    32. ;───────────────────────────────────────────────────────────────────────────
    33. FillFunctionName:
    34.         pop esi
    35. ;───────────────────────────────────────────────────────────────────────────
    36. ; 3. Теперь определим систему Windows. Адрес возврата - тело kernel32.dll.
    37. ;    Если адрес более 80000000h, то мы под Windows 9x. Иначе под NT.
    38. ;───────────────────────────────────────────────────────────────────────────
    39.         mov edi,[esp]       ; адрес возврата
    40.         and edi,0FFFFFFFEh  ; выравниваем на 2 байта
    41.         js StartWin9x       ; бит 31 = 1 - Windows9x
    42.  
    43.  
    44.         sub esp,NumOfFuctions*4
    45.         mov ebp,esp
    46.         call FoundMZHeaderGetFunctions
    47.         jnz ExitCriticalError
    48.  
    49. ;───────────────────────────────────────────────────────────────────────────
    50. ; 4. Подгрузим advapi32.dll и найдем там функции Service Manager для
    51. ;    загрузки нашего exe как драйвера
    52. ;───────────────────────────────────────────────────────────────────────────
    53.         inc esi
    54.         push esi
    55.         call LoadLibraryA
    56. .....
    57.  
    58. ;┌───────────────────────────────────────────────────────────────────────────┐
    59. ;│                          Подпрограммы Windows 32 бит                      │
    60. ;└───────────────────────────────────────────────────────────────────────────┘
    61. ;──────────────────────────────────────────────────────────────────────────────
    62. ; Вход: edi - адрес возврата основной прогаммы
    63. ;   esi - адрес таблицы имен
    64. ;   ebp - адрес таблицы адресов для заполнения
    65. ;──────────────────────────────────────────────────────────────────────────────
    66. FoundMZHeaderGetFunctions:
    67.         mov ax,"ZM"
    68.         mov ecx,1024*1024*10    ; 20 Мб
    69.         std         ; обратный поиск
    70. NoFoundMZ:  or ecx,ecx
    71.         jnz ContinueFoundMZ
    72. ExitFoundMZ:    or al,al        ; не найден базовый адрес kernel32.dll
    73.         retn            ; или ntoskernel.exe ZF = 0
    74. ContinueFoundMZ:
    75.         repnz scasw
    76.         cmp W [edi+1Ah],40h ; Если здесь не 40h
    77.         jnz NoFoundMZ       ; то это не Win32 EXE
    78.         inc edi         ; файл
    79.         inc edi
    80.         cld
    81. ; Приведем регистры
    82.         xchg eax,edi
    83.         mov edi,ebp
    84. ;──────────────────────────────────────────────────────────────────────────────
    85. ; Вход esi-адрес таблицы имен
    86. ;      edi-адрес таблицы адресов для заполняется
    87. ;      eax-ImageBase модуля
    88. ;──────────────────────────────────────────────────────────────────────────────
    89.   GetAddressFromName:   push eax
    90.             push edi
    91.             push eax
    92.             push eax
    93.             push eax
    94.             add eax,[eax+3Ch]   ; PE - header
    95.             pop ebx
    96.             add ebx,[eax+78h]   ; ebx - Export Directory
    97.             pop edx
    98.             add edx,[ebx+20h]   ; edx - AddressOfNames
    99.             push esi
    100.             xor ecx,ecx
    101.   GAFNLabel2:
    102.             lodsb
    103.             inc ecx
    104.             or al,al
    105.             jnz GAFNLabel2
    106.             pop esi
    107.   GAFNLabel1:       pop  edi
    108.             push edi
    109.             add edi,[edx]
    110.             add edx,4
    111.             push ecx
    112.             push esi
    113.             repz cmpsb
    114.             pop esi
    115.             pop ecx
    116.             jnz GAFNLabel1
    117.  
    118.             sub edx,4
    119.             pop eax
    120.             sub edx,eax
    121.             sub edx,[ebx+20h]
    122.             shr edx,1
    123.             add edx,[ebx+24h]
    124.             add edx,eax
    125.             push ecx
    126.             xor ecx,ecx
    127.             mov cx,[edx]
    128.             shl ecx,2
    129.             add ecx,eax
    130.             add ecx,[ebx+1Ch]
    131.             add eax,[ecx]
    132.             pop ecx
    133.             pop edi
    134.             stosd
    135.             add esi,ecx
    136.             cmp byte ptr [esi],NULL
    137.             pop eax
    138.             jnz GetAddressFromName
    139.             retn
     
  4. jeni

    jeni Евгений

    Публикаций:
    0
    Регистрация:
    10 мар 2007
    Сообщения:
    41
    "Потому, что появляется поле SIB."

    Т.е никак меньше не получится???
     
  5. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Можешь у lsd (last stage of delerium group) посмотреть. Здесь на сайте есть много материала. Billy B. Win32 Vir G.
     
  6. jeni

    jeni Евгений

    Публикаций:
    0
    Регистрация:
    10 мар 2007
    Сообщения:
    41
    Смотрел, не нашел
     
  7. jeni

    jeni Евгений

    Публикаций:
    0
    Регистрация:
    10 мар 2007
    Сообщения:
    41
    И еще такой вопрос. Как получить file offset - начало кода в файле???
     
  8. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    FileOffset = RVA - SectionRVA + SectionOffset
     
  9. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
  10. jeni

    jeni Евгений

    Публикаций:
    0
    Регистрация:
    10 мар 2007
    Сообщения:
    41
    "FileOffset = RVA - SectionRVA + SectionOffset"

    А как мне определить что секция является секцией кода???
     
  11. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Посмотри, куда указывает точка входа. Если сюда (если программа не пакованная), то это она и есть. Можно по атрибутам секции посмотреть
     
  12. jeni

    jeni Евгений

    Публикаций:
    0
    Регистрация:
    10 мар 2007
    Сообщения:
    41
    А как PEID ето делает??? У кого-нибудь есть исходник етой проги???
     
  13. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Что делает? Узнает, где секция кода или находит точку входа в запакованных программах? Если второе, то не знаю. А если первое - то как я сказал. Можно так же посмотреть поле по смещению +2Ch, но оно может не совпадать с реальностью.
     
  14. jeni

    jeni Евгений

    Публикаций:
    0
    Регистрация:
    10 мар 2007
    Сообщения:
    41
    а сорцы PEID хоть какие-нить есть???