взлом хаспа - нужно уменьшить размер кода

Тема в разделе "WASM.RESEARCH", создана пользователем skifi, 23 авг 2006.

  1. skifi

    skifi New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    10
    Суть проблемы: есть прога, привязана ключом хасп. В ключе есть память. Прогу от ключа отучил, осталось самое легкое - эмулировать память ключа. Итак - вместо вызова функции чтения слова с ключа помещаю свой код.
    Было:
    Код (Text):
    1. :004D9CD3 8D45E4 lea eax, dword ptr [ebp-1C]
    2. :004D9CD6 50 push eax
    3. :004D9CD7 8D45E8 lea eax, dword ptr [ebp-18]
    4. :004D9CDA 50 push eax
    5. :004D9CDB 8D45EC lea eax, dword ptr [ebp-14] - адрес буфера
    6. :004D9CDE 50 push eax
    7. :004D9CDF 8D45F0 lea eax, dword ptr [ebp-10] - номер слова
    8. :004D9CE2 50 push eax
    9. :004D9CE3 6854140000 push 00001111
    10. :004D9CE8 68534E0000 push 00001111
    11. :004D9CED 6A00 push 00000000
    12. :004D9CEF 6A64 push 00000064
    13. :004D9CF1 6A03 push 00000003
    14. :004D9CF3 E87CECFFFF Call 004D8974
    15. Стало:
    16. :004D9CD3 EB0E jmp 004D9CE4
    17. :004D9CD5 9090909090909090909090909090 - строка из 14 символов
    18. :004D9CE4 ???
    19. :004D9CF3 9090909090
    И вот в оставшиеся 20 байт надо втиснуть код который по номеру слова берет соответствующее слова из массива (004D9CD5) и кладет в буфер. Я уже весь день извращался... дожал код до 21 байта
    =8-((((( Один байт...
    Код (Text):
    1. 8D45EC lea eax, dword ptr [ebp-14]
    2. 8B18 mov ebx, dword ptr [eax] - в ебх адрес буфера
    3. 8D45F0 lea eax, dword ptr [ebp-10] номер слова
    4. C1E004 shl eax, 02 - умножили на 2
    5. 668B800C954A00 mov ax, word ptr [eax+004A950C]
    6. 668903 mov word ptr [ebx], ax
    Народ, может кто видет где еще можно сэкономить байтик??? Строку уменьшить нельзя. сверху и снизу код раздвинуть тоже нельзя - всюду джампы, а перелопачивать все 53метра листинга полное безумие (еще 3 метра и будет рулон туалетной бумаги).
    Заранее спасибо.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    mov ebx,[ebp-14] ; на 2 байта меньше
     
  3. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Если предпоследнюю команду сделать как
    mov eax,dword ptr [eax + xx]
    Один байт съэкономишь.
     
  4. tmp_name_0001

    tmp_name_0001 New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    85
    хе напомнило это
     
  5. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Только непонятно, - получилось или нет ;(
     
  6. _arnix

    _arnix New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2005
    Сообщения:
    3
    Ты так не на 2 умножаешь а на 4...
     
  7. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Код (Text):
    1. 8D45F0    lea eax,[ebp-10h]
    2. 8D04850C954A00   mov eax,[eax*4+4A950Ch]
    3. 668945EC mov [ebp-14h],ax
    15 байт
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    skifi
    Можно было бы найти неиспользуемое пространство (или цепочку таких пространств) и впихнуть код с переходами по jmp.
     
  9. binom

    binom New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2006
    Сообщения:
    12
    ИХМО так и надо делать, а не извращаться с уменьшением размера. А неиспользуемое пространство найти легко, т.к. выравниваие кода будет полюбому. Полистай листснг найдеш без труда, в листинге IDA обозначает его как align X, где Х - число неиспользуемых байт для обеспечения выравнивания.