Прошу по тестировать

Тема в разделе "WASM.HEAP", создана пользователем dgs, 18 мар 2009.

  1. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Привет всем, походу Томаш Криштак (кажется так его правильно величать) придумал новую технологию анти отладки, я в принципе люблю программировать на фасме, но последние две програмки не создают контролы пока их чем нить не запакуешь и следовательно бесполезны в простом виде. У меня Windows XP SP 3, прошу проверить на ваших машинах работа способность последней...
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    XPSP3. Пустое окно появляется, ничего больше нет. Запокавал upx-м тоже самое.
    Если не секрет, то что за технология ???
     
  3. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    В общем суть, я компилирую и у меня белый экран, хотя из исходника можете видеть, что там создано несколько контролов, сжимаю UPX'om версии 2.92b и все ок...

    Это я вообще то не совсем серьезно имел ввиду, насчет пропажи контролов, если добавлю ShareWare в прогу, пакую, то при распаковке, она будет бесполезна для отладки...
     
  4. shurik

    shurik Александр

    Публикаций:
    0
    Регистрация:
    27 авг 2006
    Сообщения:
    52
    Адрес:
    Украина
    XP SP2 -запустилось нормально, все контролы на месте. Проблема в SP3!?
     
  5. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    Перекуём баги на фичи! Если что-то не работает, как надо, теперь это зовётся гордым именем "технология анти отладки".


    «Я это… Ик… Код сломал, во!» ©анекдот
     
  6. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    ага, проблема в sp3, в режиме совместимости все в порядке... интересно в чем может быть проблема...
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Работает если указать запускать программу в режиме совместимости с 2000. В этом режиме грузится шим, его движок парсит таблицу импорта и перехватывает некоторые функции там. Вот выглядит код с хуками шима:
    Код (Text):
    1. 00403A31                                  push autorune.0040240D
    2. 00403A36                                  push 0F003F
    3. 00403A3B                                  push 0
    4. 00403A3D                                  push autorune.00402085                               ; ASCII "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
    5. 00403A42                                  push 80000001
    6. 00403A47                                  call dword ptr ds:[<&ADVAPI32.RegOpenKeyExA>]        ; AcLayers.7168F22E
    7. 00403A4D                                  cmp eax,-1
    8. 00403A50                                  jnz short autorune.00403A7B
    9. 00403A52                                  push 0
    10. 00403A54                                  push dword ptr ss:[ebp-4]
    11. 00403A57                                  push 1
    12. 00403A59                                  push 0
    13. 00403A5B                                  push autorune.004020CB                               ; ASCII "startup"
    14. 00403A60                                  push dword ptr ds:[40240D]
    15. 00403A66                                  call dword ptr ds:[<&ADVAPI32.RegQueryValueExA>]     ; AcLayers.7168D45D
    Эти две функции обрабатывает вначале враппер - AcLayers.dll. Ты пытаешся считать параметр "Startup", там его нет, но там есть "Common Startup", собственно и остальные параметры имеют префикс "Common". Шим эмулирует его, поэтому и работает.
    Насчёт "антиотладки" - это никакая не антиотладка, останов на диспетчере исключений, либо сразу на ntdll.ExecuteHandler() и мы попадаем прямо в твой сех.
    В принципе подход хороший, но реализация некуда не годится. Еспользовать GUI-калбаки для вызова своего кода весьма хороший способ, но нельзя из них генерировать исключения, ибо этим словят. Хороший вариант перехват KernelCallbackTable и вызов своего кода в каждом из её хэндлеров.
     
  8. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Спасибо всем...
    А можно пару совет на счет реализации?

    ps немного дополнил.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Не работает. Эмулятор возвращает строку "D:\Documents and Settings\...", ты в конец её добавляешь "*.*" и тогда работает. Реально значение параметра "%ALLUSERSPROFILE%\Главное меню\Программы\Автозагрузка", переменная %ALLUSERSPROFILE% не определена в виде символической ссылки, далее само собой FindFirstFile() возвращает ERROR_INVALID_NAME.
    Тут почитай http://www.virustech.org/f/viewtopic.php?id=35
     
  10. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    Это не антиотладка, это невнимательность при копипи… копипастинге кода. >.<''

    Пакеры (между прочим, далеко не все) просто затаптывают манифест. Вместо того, чтобы запаковывать программу, берём ресурсный редактор и прибиваем манифест из екзешника. Работает. И в режиме совместимости работает.

    Вопрос: топикстартер вообще понимает, что при этом происходит? ;)
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Имхо пакеры используют только нубы, либо те, кто пишет говнокод. Дрочево с манифестами и пр., зачем..
    Примитивная проверка типа этой:
    Код (Text):
    1. IsUpx proc UpxPresent:PBOOLEAN
    2. Local ThreadWin32StartAddress:PVOID
    3.     invoke ZwQueryInformationThread, NtCurrentThread, ThreadQuerySetWin32StartAddress, addr ThreadWin32StartAddress, sizeof PVOID, NULL
    4.     test eax,eax
    5.     mov edx,UpxPresent
    6.     jnz exit_
    7.     mov eax,ThreadWin32StartAddress
    8.     xor ecx,ecx
    9.     cmp word ptr [eax],0BE60h
    10.     jne not_upx_
    11.     cmp word ptr [eax + 6],0BE8Dh
    12.     jne not_upx_
    13.     cmp dword ptr [eax + 0Ch],0FFCD8357h
    14.     jne not_upx_
    15.     cmp word ptr [eax + 10h],10EBh
    16.     jne not_upx_
    17.     inc ecx
    18. not_upx_:
    19.     mov dword ptr [edx],ecx
    20.     xor eax,eax
    21. exit_:
    22.     ret
    23. IsUpx endp
     
  12. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Ага путь понял, спасибо. Тема закрыта.
     
  13. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    Clerk, при всём уважении, имхо сейчас вы всё усложняете. =)

    Что-то мне подсказывает, что ситуация развивалась по такому сценарию:

    …Пишет dgs код. Пишет-пишет-пишет, вдруг бац! - натыкается где-то на пример использования seh-обработчика фасмовского. Вау, думает, надо это тоже вставить в свой проект. Вставляет. Потом ещё пишет-пишет-пишет. Компилит. Не работает. Окошко создаётся, а контролы - нет. Потом запаковывает проект UPX-ом. Вау, контролы появились. Круто! Да Это Же, никак, "антиотладочная технология" (или другое умное слово). Открыл! Сам! Так, ещё раз. Компилим - не видно. Пакуем - видно. Всё, можно постить на васм…

    Антон, признавайтесь, так всё было?
     
  14. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Примерно так, только еще раз смотрим 3 и 6 пост и убеждаемся, что главной проблемой было бороться с этим явлением, а не:
    Я не называю себе гениальным программистом, я ламер, бывает впихививаю чужой код, но хочу стать настоящим ассемблерщиком. Сам термин "антиотладочная технология" я применял слегка в насмешку, не думая, что вы воспримите так все всерьез, ну простите, буду теперь осторожней с выражениями...
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    G13
    Я только подумал про упаковку прочитав твой 10-й пост. Почемуто я думал что целью топика является текст на работу во всех версиях ос, а антиотладка - какойто из скрытых калбэков, впрочем как оно и есть. Но я и подумать не мог, что это тест на работу запакованного модуля. Нужно было нормально описать задачу..
    Насчёт антиотладки посредством исключений, какиебы не использовались ухищрения, а их описано множество, все они основаны на нескольких особенностях:
    1. Вход в диспетчер исключений выполняется с взведённым RF(Resume Flag), изза чего пошаговый останов может быть выполнен только после исполнения первой его инструкции(но не при входе в него).
    2. Вход в диспетчер исключений исполняется с взведённым IF(Interrupt Flag) и 1-м битом регистра флагов.
    3. При входе в диспетчер исключений не изменяются регистры общего назначения, кроме Esp и Eip.
    4. При входе в диспетчер исключений не изменяются флажки CPAZSDOF.
    5. При входе в диспетчер исключений сбрасывается регистр Dr7.
    6. Если исключение трассировочное(#DB, STATUS_SINGLE_STEP), то при входе в диспетчер исключений сбрасывается TF(Trap Flag) в флажках. Другое исключение не приводит к сбросу TF.
    7. Контекст в стековом фрейме содержит регистр EFlags и Dr6 на момент возникновения исключения.
    8. Возврат после обработки исключения выполняется посредством сервиса NtContinue, который перезагружает весь контекст потока полностью(не исключая TF).
    9. Если у процесса установлен отладочный порт, то до вызова диспетчера исключений на порт посылается сообщение.
    10. Если запрещена нотификация дебуггера(ThreadHideFromDebugger), при исключении на порт отладчика сообщение не поступает.
    11. Обработка исключения требует некоторое время.
    Вроде всё учёл.. Если какойлибо антиотладочный трюк связанный с механизмом исключений не подходит ни под один из эхтих пунктов, то это будет новая техника.
     
  16. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Спасибо всем за информацию,

    [add]
    казалось бы все, но на по следок встал вопрос с win.ini, вот разбираюсь, почему не читает раздел? Хотя он у меня есть точно...
    Код (Text):
    1.         key.windows             db 'windows',0
    2.         sub.run                 db 'run',0      
    3. ...
    4.  
    5. invoke  GetProfileString, key.windows, sub.run, [text_buffer], [text_buffer], 1000h
     
  17. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    dgs, прошу прощения, если мой пост показался вам слишком резким. Просто раз уж в программе есть манифест, а в манифесте прописана зависимость:
    …то это самое Microsoft.Windows.Common-Controls, (то бишь библиотечка comctl32.dll) должно наличествовать в адресном пространстве процесса. Обычно для этого используется функция InitCommonControls (хотя можно с тем же успехом сделать LoadLibrary,"comctl32.dll" до создания первого окна). В противном случае из CreateWindow прилетит эксепшен (который у вас игнорится SEH-обработчиком).

     
  18. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Спасибо, теперь кое что встало на свои места...