Сейчас на форуме: _MBK_, vsv1 (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Спецы PE-формата, объясните необъяснимое!
Посл.ответ Сообщение

Ранг: 21.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 марта 2007 10:55
· Личное сообщение · #1

Если создать текстовый файл с текстом bugoga. И сохранить под именем bugoga.exe. Затем этот ТЕКСТОВЫЙ файл запустить, то увидим пляшущий курсор, и принтер будет печатать в бесконечном цикле пустые страницы. Даже если это "пасхальное яйцо", объясните, как это может работать????????




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 28 марта 2007 11:20
· Личное сообщение · #2

по-моему бред) такой файл даже не запуститься, он же не РЕ

-----
[nice coder and reverser]





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 28 марта 2007 11:33
· Личное сообщение · #3

sewell
А ты подумай.
У Касперского была статья "Ассемблерные головоломки" (или что-то в этом роде). Там составлялся файл, состоящий из одних ASCII-символов, принадлежащих к алфавитно-цифровой (+знаковой) области.
Запускается он, так как система его интерпретирует, как COM-файл, скорее всего. По 100h грузится и гоняет "bugoga" как опкоды.
Посмотри hiew-ом или чем-нибудь другим, в какой вид интерпретируется эта строка (какой ассемблерный код выходит).
Скорее всего, если ты говоришь про принтер, происходит вызов к.-л. прерывания, или запись в порт происходит (что менее вероятно).

Отладь, во всяком случае файл, и посмотри, какие инструкции выполняются.
Может быть, вообще программа в разнос идет, так как нет инструкций int 20h или подобных (разумеется, для ExitProcess там места нет =), тогда на конкретной машине (или даже в конкретном случае загрузки) результат выполнения будет иным.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 21.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 марта 2007 11:52
· Личное сообщение · #4

Crawler
Смотрел в hiew - полный бред. Отладчик, естественно, не берет (ну не PE это формат).
Hellspawn
Это не бред, у меня все происходит так, как написал. Вот это уже бред .



Ранг: 21.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 марта 2007 12:05
· Личное сообщение · #5

Вот, кстати, скрин.

b8cd_28.03.2007_CRACKLAB.rU.tgz - bug2.tif




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 28 марта 2007 12:12
· Личное сообщение · #6

sewell пишет:
Вот, кстати, скрин.

По нему можно сказать, что это окно cmd.exe, винда думает, что это .com-файл. Значит пара байт закидывает в принтер команду на печать пустых страниц.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 28 марта 2007 13:19
· Личное сообщение · #7

Я про эту фишку уже давно узнал, только после апдэйта винды работать перестало.

-----
Yann Tiersen best and do not fuck




Ранг: 21.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 марта 2007 13:33 · Поправил: sewell
· Личное сообщение · #8

PE_Kill
Чисто ради интереса, какое может быть объяснение? В чем прикол то? Как это работает?
Кстати, менял и название файла - работало, и оставлял одну быкву b - работало, и три буквы и более, при первой b, и иные комбинации на b. Но остальные комбинации вызывали ошибку, что и должно было быть изначально.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 28 марта 2007 17:29
· Личное сообщение · #9

у меня ничё не работает карма наверное...

-----
[nice coder and reverser]




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 28 марта 2007 17:58 · Поправил: tundra37
· Личное сообщение · #10

В 98-м не работает. Если переименовать в bugoga.com вышибает виртуалку !
В ХП с СП2 работает так : курсор встает в начало окна(у меня буфер на 300 строк).
Если кликнуть в окне мышой курсор начинает прыгать. На принтере действительно
висит печать документа без имени !
debug показывает, что действительно выполнение начинается с буквы 'b' - это код 0х62
Т.е. все дело в том что за ней идет. IDA показывает такие команды:

seg000:0100 bound si, [di+67h]
seg000:0103 outsw
seg000:0104 db 67h
seg000:0104 popa

Для одной буквы 'b' остальные байты в debug одинаковы. Вот результат.

seg000:0100 bound sp, [bx+si]
seg000:0102 stosb
seg000:0103 mov al, ds:0A0E2h

Кстати, мышка ни при чем. Просто надо немного подождать(5 сек.) и курсор начинает прыгать.
Возможно, просто в ДОС, эмулируемой ntvdm есть какой-то кусок, на котором это все происходит.
На другом ntvdm естественно происходит вылет.




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 28 марта 2007 18:09 · Поправил: lord_Phoenix
· Личное сообщение · #11

хм.. если не работает - можно запустить 2 копии сразу и смотреть..
зы. это не ре..
зы2. все дело в bound :]
зы3. русские в мс все жгут
Кладем в файл вот такой код:

#include <windows.h>bool f (GUID const &A, GUID const &B) { return IsEqualGUID (A, B);}

Компилируем 64-разрядным кросс-компилятором (из x86_amd64) от VS 2005 (14.00.50727.762) с выдачей ассемблерного листинга:

cl /c /FAs test.cpp

Открываем ассемблерный файл, и видим там вот такую функцию:

?f@@YA_NAEBU_GUID@@0@Z PROC ; f

Забавная фраза появляется только, если компилировать 64-разрядным компилятором

зы4. имя неавжно..главное буква b внутри..а сталобыть и команда)

-----
Тут не могла быть ваша реклама




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 28 марта 2007 18:25
· Личное сообщение · #12

sewell, в стародавние времена (ещё до MS-DOS) был такой элементарный формат программ.
Машинные команды в нём шли прямо от нулевого байта.
COM-формат в DOS вышел именно оттуда. И на удивление M$ получил народное признание.
DOS (и, кстати, форточки) загружает программу не столько по расширению, сколько про содержанию.
То есть если файл имеет расширение из списка запускаемых, то ОСь определяет его формат по сигнатурам.
Если сигнатура PE или других форматов не найдена, то файл считается COM.
Тогда DOS выделяет сегмент 64кб и грузит туда программу.
Что значит грузит?
Это значит, что всё содержимое файла байт за байтом помещается в область памяти с логическим адресом от "Сег:100" до "Ceг:Последний байт файла". А перед этим заполняется служебная часть "от Сег:0 до FF".
Когда программа корректно завершается (в ДОС это делалось либо int 20 либо int 21 ah… забыл =) ось просто помечает данный сегмент как свободный. То есть до тех пор, пока кто-то что-то не запишет по адресам этого сегмента, в нём будут оставаться байты уже отработавшей программы.

Таким образом, если создать некий файл с белибердой и назвать его *.EXE, система не найдя в нём сигнатуры известных форматов загрузит этот файл как COM и передаст управление белиберде от смещения 100h до кода завершения программы или ошибки прерывания или ещё какой-нибудь ошибки. А что было раньше в данном сегменте, зависит от конкретной системы и способа запуска.

Господа чайники начинайте свой путь к самоварам с Чтивы 0: bitfry.narod.ru ;)
Hellspawn пишет:
у меня ничё не работает карма наверное...

+1 =)

-----
Всем привет, я вернулся





Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 28 марта 2007 18:27
· Личное сообщение · #13

имхо вопрос был про бугога, а не про ре =)

-----
Тут не могла быть ваша реклама




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 28 марта 2007 18:38
· Личное сообщение · #14

Ну уж раз матерщина пошла - можно того же эффекта добится от слов 'ebu' 'ebi' или 'ebal'
Пишем в файл ebu MS и наслаждаемся
==========================
Решил доисследовать и построить фразу. 'I ebal MS' дает эксепшн, но мы же не лыком шиты - жмем "Пропустить" и получаем :
Расширенная ошиЪка 516
W>
Но I можно прекрасно заменить на Я
+++++++++++++++++++++++++++
Похоже bound вызывает спецфункции ntvdm ???




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 28 марта 2007 18:40 · Поправил: lord_Phoenix
· Личное сообщение · #15

<lord_Phoenix> гг, бугагу на баше запретил. да..а вот lol.com c текстом "ebi mumu" без кавычек нет..хотя он дает такой же еффект )

tundra37 пишет:
Похоже bound вызывает спецфункции ntvdm ???

BOUND - Array Index Bound Check (80188+)
Usage: BOUND src,limit
Modifies flags: None
Array index in source register is checked against upper and lower
bounds in memory source. The first word located at "limit" is
the lower boundary and the word at "limit+2" is the upper array bound.
Interrupt 5 occurs if the source value is less than or higher than
the source.

Clocks Size

Operands 808x 286 386 486 Bytes
reg16,mem32 - nj=13 nj=10 7 2
reg32,mem64 - nj=13 nj=10 7 2
- nj = no jump taken

62 / r BOUND r16,m16&16
62 / r BOUND r32,m32&32

-----
Тут не могла быть ваша реклама




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 29 марта 2007 07:54
· Личное сообщение · #16

lord_Phoenix пишет:
Interrupt 5 occurs

INT 5 ( 3 штуки) дают паузу 5 сек., печать , эксепшн. и ошибку 516 после "Пропустить".
Курсор не скачет !




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 29 марта 2007 08:54
· Личное сообщение · #17

tundra37
Ну тогда думаем дальше.. но печать уже обьяснили ?

-----
Тут не могла быть ваша реклама




Ранг: 21.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 29 марта 2007 09:26 · Поправил: sewell
· Личное сообщение · #18

Спасибо, всем!!! Пошел учить матчасть на сайт к Bitfry
Хотя, ИМХО, Ирвин, который я штудировал - один из лучших учебников по асму....



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 29 марта 2007 17:23
· Личное сообщение · #19

lord_Phoenix пишет:
но печать уже обьяснили ?

Не нашел справочник по Интам в ДОС-е, но мой склероз подсказывает, что это PrintScreen.
По крайней мере INT 5, INT 20 печатают документ на 2 кило=25х80 , но курсор не скачет.
Решил посмотреть bugoga : там объем печати растет офигительно - за несколько секунд 2 Мб.
Ну и на закуску :
@1: INT 5
JMP @1
делает бугогу - печатает много и курсор скачет !!! Скорее всего в бугоге по какой-то причине происходит выход из прерывания опять на bound ? Интересно можно ли софтайсом это увидеть ?




Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 30 марта 2007 06:09
· Личное сообщение · #20

tundra37
INT 05 - PRINT SCREEN; CPU-generated (80186+) - BOUND RANGE EXCEEDED
INT 20 - DOS 1+ - TERMINATE PROGRAM

Copied from Ralf Brown's Interrupt List

-----
DREAMS CALL US





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 03 апреля 2007 19:01
· Личное сообщение · #21

PE_Kill пишет:
Я про эту фишку уже давно узнал, только после апдэйта винды работать перестало.

Я про эту фишку в 99 году узнал =)

Я был прав.

tundra37

В debug.exe/com протрейсить по t хорошо, и увидишь все, что надо.
Только дебаг по прерыванию, падла, скачет, как укушенный, поскипать нельзя (?)

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 08 апреля 2007 23:05
· Личное сообщение · #22

(сорри за второй пост подряд)

Вот что я думаю, это, по сути, комментарии к моему первому посту:

INT 05 - PRINT SCREEN; CPU-generated (80186+) - BOUND RANGE EXCEEDED

bound esi, [ebp+67]; знаем_сами_что (bound шерстит массив, вызывается int5 n раз ( tundra37 прав), для понимания того, что происходит, читаем пост LordPhoenix про эту команду или opcodes.hlp из masm32)
outsb edx, ds:esi; вывод_строки_в_порт (вот где все происходит), тут уж стоит посмотреть, куда именно
Тут пояснения: в edx адрес порта, ds:esi - выводимое в порт (почитайте opcodes.hlp)
popad; регистры восстанавливает, неважно
ret; смотрите сами, куда идет. Идет, наверное, наверх, смотрите стек перед ret непосредственно. Учтите, что мы в прерывании 5-ом были перед этим.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.



 eXeL@B —› Вопросы новичков —› Спецы PE-формата, объясните необъяснимое!
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати