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

 eXeL@B —› Вопросы новичков —› директивы ассемблера DB и SAR
Посл.ответ Сообщение

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

Создано: 18 октября 2008 17:54 · Поправил: WantButCant
· Личное сообщение · #1

Всем привет, работаю с Olly Debugger... потихоньку читаю статьи, пробую разбирать dll фаилы...

и вот в одном фаиле (назначение коего - шифрование/дешифрование, как установленно) используется ряд директив DB (найти описание этой директивы мне удалось - а практическое её применение я не понимаю... и примеры найти не могу)

для наглядности кусочек кода:

Code:
  1. 045E2CB1      8A            DB 8A
  2. 045E2CB2      04            DB 04
  3. 045E2CB3      31            DB 31                                    ; CHAR '1'
  4. 045E2CB4      8B            DB 8B
  5. 045E2CB5      D9            DB D9
  6. 045E2CB6      83            DB 83
  7. 045E2CB7      E3            DB E3
  8. 045E2CB8      07            DB 07
  9. 045E2CB9      8A            DB 8A
  10. 045E2CBA      1C            DB 1C
  11. 045E2CBB      3B            DB 3B                                    ; CHAR ';'
  12. 045E2CBC      32            DB 32                                    ; CHAR '2'
  13. 045E2CBD      D8            DB D8
  14. 045E2CBE      32            DB 32                                    ; CHAR '2'
  15. 045E2CBF      DA            DB DA
  16. 045E2CC0      88            DB 88
  17. 045E2CC1      1C            DB 1C
  18. 045E2CC2      31            DB 31                                    ; CHAR '1'
  19. 045E2CC3      41            DB 41                                    ; CHAR 'A'
  20. 045E2CC4      3B            DB 3B                                    ; CHAR ';'
  21. 045E2CC5      CD            DB CD
  22. 045E2CC6      8A            DB 8A
  23. 045E2CC7      D07CE7 5B     SAR BYTE PTR DS:[EDI+5B],1





(из интернета)

Директива определения байта (DB)

Из различных директив, определяющих элементы данных, наиболее полезной является DB (определить байт). Символьное выражение в диpективе DB может содержать строку символов любой длины, вплоть до конца строки. Объектный код показывает символы кода ASCII для каждого байта. Шест.20 представляет символ пробела.

Числовое выражение в директиве DB может содержать одну или более однобайтовых констант. Один байт выражается двумя шест. цифpами.

Наибольшее положительное шест. число в одном байте это 7F, все «большие» числа от 80 до FF представляют отрицательные значения. В десятичном исчислении эти пределы выражаются числами +127 и -128.


И насколько я понял SAR это одна из команд сдвига... примеров так же найти не удалось, может кто-нибудь разъяснить как они используются?


P.S. из кода Олли не ясно - почему в комментах не на против всех DB стоит текст... настройки?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 18 октября 2008 21:35
· Личное сообщение · #2

Потому что олька это распознала как данные, а не код, проведи анализ заново или просто убери анализ вообще.



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

Создано: 20 октября 2008 21:02
· Личное сообщение · #3

и всё-таки, кто-нибудь может объяснить как и для чего используется инструкция DB?



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 20 октября 2008 21:10 · Поправил: tempread
· Личное сообщение · #4

WantButCan
Если нужно определить данные в программе,то используется db (данные - это не только строки ,но числовые значения). Определить стопроцентно,является ли байты в программе асемблерными командами или же данными невозможно. Но Олька пытается это делать эвристическими методами.
Если Олька ошибается,ей всегда можно помочь,указав что байты,которые она определила как данные,на самом деле команды(И Олька сразу послушно преобразует байты в соответствующие ассемблерные команды)



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

Создано: 20 октября 2008 21:31
· Личное сообщение · #5

tempread пишет:
Если нужно определить данные в программе,то используется db

... не совсем понимаю, что значит определить данные?... ведь код есть код, строка есть строка... и не совсем ясно - где определяются эти данные, ведь инструкция DB (в моём примере) содержит лишь 1 байт, т.е. какие-то данные и в ней (инструкции) не указано, где определять эти данные


т.е. DB это сравнение каких либо байт?


P.S. вроде в интернете нашёл разные справочники, но по ним всё же не ясно, как и для чего используется эта инструкция... во всяком случае, меня интересует использование DB применительно к шифрованию/дешефрации данных



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 20 октября 2008 21:53 · Поправил: tempread
· Личное сообщение · #6

В твоем примере указано, что имеются такие-то байты. Оля их показывает как данные,посредством DB.
Т.е. DB -это не команда, это просто указание того,что параметр этого обьявления является один байт.
Т.е. DB(а также DW и DD) - это условное обозначение,просто в языке Ассемблер этим обозначением решили указывать данные.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 20 октября 2008 21:59
· Личное сообщение · #7

Почитай справку по асму, DB-определение переменной в асме, просто обычные данные.
temp db 10-асм
BYTE temp=10;-С
Имя переменной только опущено в ольке за ненадобностью.



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

Создано: 21 октября 2008 09:21
· Личное сообщение · #8

м... а негли бы вы поделиться той справкой, в которой это написано, а то у меня уже справок штуки 3-4 и в каждой по разному написано




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 21 октября 2008 09:54
· Личное сообщение · #9

DB - резервирование памяти для данных размером 1 байт.Оля может часто выдавать такие данные просто выделяешь определённый участок и в коннтекстовом меню Оли выбираешь Analisis=>During next...=>Commands.

SAR - арефметический здвиг операндов в право

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




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

Создано: 25 октября 2008 16:11
· Личное сообщение · #10

Спасибо ClockMan'y, конвертил эти страшные DB в команды, но теперь возникла следующая проблема:

по всей видимости эти байты команд куда-то переписываются, т.е. они не исполняются из того места, где размещены... (думаю это способ защититься от дебага)

1) Как узнать куда они пишутся?

2) Как отследить работу этого ,переписанного куда-то, кода?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 25 октября 2008 17:04
· Личное сообщение · #11

С чего ты взял, что они пишутся-это раз.
Если пишутся, значит, сначала должны считаться, значит, ставь железный бряк на чтение.
А вообще выложил бы прогу и не гадал.



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

Создано: 25 октября 2008 17:38
· Личное сообщение · #12

часть длл, почему-то представлена данными, а не кодом состоящим из команд... т.к. этот код должен отвечать за шифрацию, не совсем понятно, почему он вызывается только 1 раз - с этого-то я и решил, что код куда-то пишется (как выяснил позже, только одно событие вызывает его), а нужный мне код в другом месте лежит - но всё в таком же формате

-----------------------------------------------------------------
дело в том, что нагружать кого-либо своими проблемами сильноне хочу... вопрос связан с наболевшем, на этом форуме... (с lineage...), а разобрать я пытаюсь, как длл шифрует трафик (длл не стандартная, весом 944кб)

могу конечно выложить и саму длл.. и остальные длл, с которыми она связана, а весь клиент вообще весит 4.89 гига...


писать заявку на слом смысла нет, я хочу научиться ломать сам, есть статьи по ольке, но они расчитаны на вскрытие ключей, слом лицензий... а в случае с интернет приложением дело сложнее и нет специализированных статей под это (я во всяком случае не нашёл)



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

Создано: 31 октября 2008 23:07
· Личное сообщение · #13

только начал читать PE формат, но очень уж интересно узнать:

Что, в сущности, представляет из себя import и как он работает?



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

Создано: 01 ноября 2008 00:22 · Поправил: WantButCant
· Личное сообщение · #14

так же небольшой вопросец, что за секция в фаиле (в мемори мап, в ольке) ".NewIT"? (в соседней колонке было написано imports, искал в инете по .NewIT - нифига не нашёл )




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 01 ноября 2008 00:42
· Личное сообщение · #15

Секция появляется когда ты дампиш плагином оли OllyDamp в нём содержится импортируемые функции(API).

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




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

Создано: 01 ноября 2008 07:54
· Личное сообщение · #16

Как это возможно? о_О... у меня нету этого плагина

Попутно тогда ещё вопрос: брик поинты на этой секции .NewIT вообще работать могут?



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

Создано: 01 ноября 2008 07:56 · Поправил: WantButCant
· Личное сообщение · #17

И ещё, вопросец: чем можно сравнить 2 текста, на различия? Я с такой задачей раньше не сталкивался... а сам, пока-что, проги писать не умею...

P.S. почему невозможно удалить пост??... нашёл я уже прогу - Beyond Compare 2




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 01 ноября 2008 19:23
· Личное сообщение · #18

Удалить нельзя, править можно. Чем и убедительно прошу пользоваться вместо того, чтобы писать несколько постов подряд.
Импорт-почитай не только сухие мелкомягкие доки, но и статьи про распаковку от зелёного к красному или распаковка это легко (или просто, не помню), там объяснено попроще, на ваме они есть. На название секции можешь внимание не обращать, оно может быть любым. Бряки на исполняемый код везде можно ставить. Сравнивать можешь через FC.exe, смотря какие различия.



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

Создано: 02 ноября 2008 17:22
· Личное сообщение · #19

может кто знает, что за формат фаила .BAK?? что в нём лежит и чем его можн опосмотреть/редактировать...

в инете вроде пишут, что это резервная копия фаила, так ли это?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 02 ноября 2008 17:38
· Личное сообщение · #20

Традиционно это просто копия файла, типа backup. Вообще не судьба взять и тупо сравнить 2 файла, оригинал и bak? Обязательно это надо спросить на форуме, тематика которого с баками ну никак.



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

Создано: 02 ноября 2008 17:40 · Поправил: WantButCant
· Личное сообщение · #21

тогда более подходящий вопрос - как можно отследить, какая команда вытащит определённую строку из стэка во время выполнения программы


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




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 02 ноября 2008 23:39
· Личное сообщение · #22

Возьми и бряк поставь хардварный на доступ. Ну ядрён-батон, возьми ты уже и почитай статьи, хватит ТАКИЕ то вопросы задавать. Это новички, конечно, но всему же есть предел. Почитай ольку для новичков, что она умеет и зачем оно нужно.



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

Создано: 03 ноября 2008 01:18
· Личное сообщение · #23

премного извиняюсь, если мои нубо-вопросы сильно раздражают... (в принципи, можно на них и не отвечать, буду мучаться сам), но всё же:

успел я прочитать 12 (из 40-ка) статей по олли (там где ещё все примеры разбираются на разных вариациях crackme.exe)... была там и статья про брик-поинты, и хардварные объяснялись и прочие, но про бряки на стэк там, как ни странно, не говорилось (вроде упомянулось, что об этом будет сказано где-то в ... "кукуево")

поэтому был бы рад ссылкам на конкретные статьи с конкретным содержание "как ставить бряки на стэк" (или т.п.)



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 03 ноября 2008 03:27
· Личное сообщение · #24

WantButCant ставь бряк HW на стэк 012xxxx (например) прога когда хахочет из стека вынуть данные бряк сработает. Мой тебе совет - прочитай все статьи по олли, потренируйся, почитай все статьи по теме с краклаба.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




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

Создано: 03 ноября 2008 18:25
· Личное сообщение · #25

Stack пишет:
почитай все статьи по теме с краклаба.

Ну все-то не обязательно, главное мои прочесть .
WantButCant пишет:
я хочу научиться ломать сам

WantButCant, когда поймёшь, что такое Ассемблер для Интел, вот такие лаймерские вопросы отпадут сами собой. Если сразу научиться не кнопки нажимать, а в суть врубаться, процесс обучения пойдёт быстрее и значительно интереснее, а со временем ещё и отдача больше будет.
Отвечать на вопросы типа "как ставить бряки на стэк" совершенно бесполезно.
Такие вопросы рождаются у людей которые:
1 не читают документацию (к Ольке на русском кстати есть)
2 не понимают, что такое стек, бряк и т.д.
3 торопятся спросить как только вопрос в голове появился

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




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

Создано: 04 ноября 2008 12:05 · Поправил: WantButCant
· Личное сообщение · #26

что-ж за напасть-то такая... пробывал я как-то перейти в стэк (в листинге кода) мне писалось, что такого адреса нема xD... и вот буквально минут 10 назад удалось

кстати зардварные бряки на стэке (у меня) почему-то не работают, а вот Memory on Acess тока в путь)


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


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