Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 553
от 30.05.2003, 21:00

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 3309
Отправлено ответов: 9714
Активность: 293.5 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

masquer
Статус: Профессиональный
Общий рейтинг: 138.72
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 122.64
URL: моя рассылка по Protected Mode
[Подробней >>]
Pin
Статус: Опытный
Общий рейтинг: 120.94
URL: My HOMEPAGE
[Подробней >>]
 
ASMодей
Статус: Профессиональный
Общий рейтинг: 114.82
[Подробней >>]
Дмитрий
Статус: Доверительный
Общий рейтинг: 151.28
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.94
URL: Программирование
[Подробней >>]
 
[MozgC]
Статус: Опытный
Общий рейтинг: 185.45
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 113.19
[Подробней >>]
Lynx
Статус: Опытный
Общий рейтинг: 130.5
[Подробней >>]
 
Vdr
Статус: Доверительный
Общий рейтинг: 110.4
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 119.12
[Подробней >>]
Tigran K. Kalaidjian
Статус: Опытный
Общий рейтинг: 117.51
URL: Методы оптимизации работы ПК
[Подробней >>]
 
_vt
Статус: Доверительный
Общий рейтинг: 118.63
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 132.97
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 108.4
URL: Beeblebrox / TMA HomePage
[Подробней >>]
 
St
Статус: Опытный
Общий рейтинг: 107.78
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 3271. Здраствуйте, вот решил задать несколько вопросиков =) Все они относятся к теме SoftICE & WinXP. Я ка... (ответов: 2)
Вопрос № 3272. К вопросам 3258 и 3226 (доступ к 4 Гб памяти в реальном режиме): 2 ASMодей: HIMEM работает в реально... (ответов: 2)
Вопрос № 3273. Привет всем крутым чувакам!!! У меня просьба, не могли бы вы показать пример или объяснить, как подс... (ответов: 3)
Вопрос № 3274. Sorry za spam, просто надо было проверить...... (ответов: 1)
Вопрос № 3275. Здрасте, не подскажете, как в ASM вывести строку на экран?... (ответов: 9)
Вопрос № 3276. Доброго времени суток ! :) В книге Зубкова на стр.428-431(глава Программирование для Windows - Гр... (ответов: 1)
Вопрос № 3277. Здрасте, господа эксперты. Вопросик к вам есть : Вопрос узкоспециализированный, но все же : Как в со... (ответов: 9)

Вопросов: 7, ответов: 27


 Вопрос № 3271

Здраствуйте, вот решил задать несколько вопросиков =)
Все они относятся к теме SoftICE & WinXP. Я как раз себе установил SoftICE v4.05 + patch на эту ОС и возникло нексколько странных моментов... Итак, начинаю:
1)В Windows XP нет функции hmemcpy, вместо нее вроде memcpy.
Но когда ставлю брейкпоинт на memcpy то он не срабатывает, хотя hmemcpy в Windows 98 срабытывал очень часто..
2)Не срабатывают стандартные брейепоинты, используемые для поиска пароля и т.д., такие как MessageBox, GetWindowText, GetDlgItemText (конечно c A и c W на конце) и т.д., почему? Читаю например пример по исследования какой-либо программы, там у них брейкпоинт срабатывает, а у меня нет..
3)В SoftICE при нажатии кнопки F12 (p ret) вместо того, чтобы выйти из стандартного модуля (user32, kernel32 и т.д.) в нужный отлаживаемый модуль, комппьютер виснет, приходится использовать F11...
4)Обычно при исследовании Delphi-программ используют поиск введеного серийного номера в памяти, и затем ставят брейкпоинт на найденный адрес памяти, но когда я пытаюсь найти введенный серийник в памяти и пишу в SoftICE'e "s 0 L FFFFFFFF "vvedenyi serinik"" то он все время находит его в том участке памяти, где я его ввел в SoftICE для поиска, т.е. он показывает, что нашел этот серийний, но я смотрю дамп память и вижу, что нашел он его в строке "s 0 L FFFFFFFF "vvedenyi serinik"", т.е. в самом себе как бы, а не в программе, где я его ввел.. что делать?
Вроде пока все, заранее спасибо.



Вопрос отправлен: 25.05.2003, 13:16
Отправитель: MozgC

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Доброе время суток, MozgC!
1. На этом свет клином не сошелся. Есть куча других способов обойтись буз этого.
2. Может их и нет там, или прога видит CC в начале...
3. Может с железом что-то не то, обычно все работает.
4. Строка может в уникоде храниться (как BrokenSword написал :)), а может шифроваться сразу же.

Ответ отправлен: 26.05.2003, 11:42
Отправитель: masquer


Отвечает Broken Sword

Приветствую Вас, MozgC!
Первое: я уже не знаю где можно высечь красными буквами, чтоб до всех дошло: Windows XP безглючно работает ТОЛЬКО (!!!) (подчеркнуто три раза) с SoftICE из DS 2.7 (или если уж совсем нигде не достать - то из DS 2.6)
1. Не срабатывание брейкпоинтов - первый симптом отличной от 2.7 SoftICE под XP. Но в данном конкретном случае - об использовании memcpy в XP я никогда не слышал
2. это типичный симптом (см. выше)
3. это второй симптом
4. это третий симптом, хотя с другой стороны может оказаться, что в памяти она храниться в виде строки с нулями (непомню как называется, но выглядит так: v,0,v,0,e,0,d,0,e,0,n,0,y,0,i или как то по другому

Ответ отправлен: 25.05.2003, 21:13
Отправитель: Broken Sword


 Вопрос № 3272

К вопросам 3258 и 3226 (доступ к 4 Гб памяти в реальном режиме):
2 ASMодей:
HIMEM работает в реальном режиме. Исключение 13 вызывается и обрабатывается им (А вот EMM386 в защищенном режиме работает и ДОС выполняется в V86). Исходник HIMEM (где все это видно) готов выслать. Также можно обратиться к памяти выше мега в т.н. Huge (aka Flat) Real Mode. Насколько я понял, HIMEM его и использует. Инфу и проги по HRM готов выслать также. Причем все это будет не защищенный, а реальный режим.
2 Pin:
Насчет контроллера доступа к памяти - есть ли какая-нить инфа по такому способу доступа (в реальном режиме. В памяти всплывает что-то типа Virtual DMA, но это уже защищенный режим)?
Использовать защищенный режим может быть и не лучше, т.к. сложнее. Если код невелик, а данных много, то проще в реальном режиме.



Вопрос отправлен: 26.05.2003, 09:43
Отправитель: IanPo

[Следующий вопрос >>] [Список вопросов]

Отвечает Pin

Здравствуйте, IanPo!
Информация по программированию контроллера прямого доступа к памяти где-то была. Я покапаюсь в своем архиве и вышлю вам. Обращайтесь на мыло: "postmaster@pinman.h5.ru".

Ответ отправлен: 27.05.2003, 17:41
Отправитель: Pin


Отвечает ASMодей

Здравствуйте, IanPo!
Да, похоже я немного напутал - после HIMEM остается реальный режим.
Тем не менее сути это не меняет: в реальном режиме адресовать можно
только 1 мегабайт. Однако за границу 1 Мб можно записывать данные и
в реальном режиме. В ранних процессорах Intel существовала одна
недоработка, позволяющая использовать около 64 Кб памяти свыше
1 Мб. Я не помню сейчас в чем заключалась эта недоработка, но это
было связано с какой-то адресной линией. По-моему именно такой механизм
должен использовать HIMEM.
А что касается режима HRM (он же BRM - Big Real Mode, он же FRM -
Flat Real Mode, то это и есть нереальный режим, описанный у Зубкова.
Суть его заключается в том, что происходит переключение в защищенный
режим, затем у всех сегментов устанавливается граница в 4 Гб. После этого
происходит переключение обратно в реальный режим, а у сегментов остается
размер в 4 Гб, причем их можно свободно использовать.
Тоже своего рода недоработка Intel...


Ответ отправлен: 27.05.2003, 21:16
Отправитель: ASMодей


 Вопрос № 3273

Привет всем крутым чувакам!!!
У меня просьба, не могли бы вы показать пример или объяснить, как подсчитать количество тактов процессора в определённой программе, к примеру в сортировке обменом.
Это нужно для сравнения этих самых сортировок.
Буду очень благодарен за ответы.
Привожу процедуру этой сортировки, и скажу ОГРОМНОЕ СПАСИБО тому кто исправит и допишет нужные команды.
Кхе, не слишком ли я халявлю? :-)
P.S. К курсачу надо. :-)


Приложение:


Вопрос отправлен: 26.05.2003, 13:18
Отправитель: Rotten (ROTTEN@intbel.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Здравствуйте, Rotten!
Ну, вначале делаешь
cpuid
rdtsc
запоминаешь eax:edx и в конце, разница и будет кол-во тиков. Правда погрешность имеется из-за multitreading, которая как-то решается, но не помню уже, как именно...

Ответ отправлен: 26.05.2003, 13:43
Отправитель: masquer


Отвечает Дмитрий

Здравствуйте, Rotten!
Думаю, что подсчитать ТОЧНОЕ количество тактов процессора будет невозможно. Это надо будет дизассемблировать процедурку и считать эти такты почти вручную. Плюс ко всему на разных процах одинаковые команды будут выполняться за разное количество тактов. Муторно все это. Гораздо проще запомнить время перед сортировкой и сравнить со временем после сортировки. Сортировку проводи 10, 100, 1000 раз (в цикле). Чем больше цикл, тем точнее будет результат. Потом вставь в цикл другую процедурку и снова замерь время. Так хоть примерно можно будет оценить быстродействие алгоритмов.

Ответ отправлен: 28.05.2003, 07:02
Отправитель: Дмитрий


Отвечает Bob Johnson

Добрый день, Rotten!
Вычислить количество тактов очень сложно, учитывая, что у тебя прога на паскале. Тут тогда надо дизассемблировать и смотреть. Но самый простой и, более того, точный вариант - это запускать твою процедуру несколько раз и смотреть, сколько это занимает времени. Потом также запускать другую и т.д. И та процедура, которая выполниться за меньшее время и будет наиболее быстрой.


Ответ отправлен: 28.05.2003, 16:24
Отправитель: Bob Johnson


 Вопрос № 3274

Sorry za spam, просто надо было проверить...



Вопрос отправлен: 26.05.2003, 14:14
Отправитель: MozgC

[Следующий вопрос >>] [Список вопросов]

Отвечает Дмитрий

Приветствую Вас, MozgC!
Тебе это надо было написать в рассылку по Java. Там сейчас творческий застой. Так что твое письмо пришлось бы кстати.

Ответ отправлен: 27.05.2003, 06:50
Отправитель: Дмитрий


 Вопрос № 3275

Здрасте, не подскажете, как в ASM вывести строку на экран?



Вопрос отправлен: 26.05.2003, 20:17
Отправитель: SuperAsm

[Следующий вопрос >>] [Список вопросов]

Отвечает [MozgC]

.MODEL small
.STACK 100h
.DATA
HelloMessage DB Привет Мир!',13,10,'$'
.CODE
mov ax,@data
mov ds,ax ;Ставим указатель на
;cегмент данных
mov ah,9 ;в AH - заталкиваем ф-ию
; 9 = вывод на экран (можно посмотреть в справочнике)
mov dx,OFFSET HelloMessage
;В dx помещаем указатель на строку
int 21h ;выводим строку
mov ah,4ch ;Завершаем прогу
int 21h
END


Ответ отправлен: 26.05.2003, 20:40
Отправитель: [MozgC]


Отвечает Dark_Lord

Доброе время суток, SuperAsm!
ah=09h
dx=offset string
int 21h

Ответ отправлен: 26.05.2003, 21:52
Отправитель: Dark_Lord


Отвечает Lynx

Здравствуйте, SuperAsm!
Мда... Короче есть несколько путей. Я знаю 2 из них:
1. С помощью функции 09h прерывания 21h. В этом случае
mov ah, 09h ;Номер функции
mov dx, offset <имя строки> ;Смещение строки, заканчивающейся символом '$'
int 21h ;Вывод строки
сама строка описывается так:
<имя строки> db 'Ну а тут текст $'
2. Записывать напрямую в видеобуфер:
push 0B800h
pop es ;Тут у нас адрес видеобуфера
mov ax, seg <имя строки>
mov ds, ax
mov si, offset <имя строки>
mov ah, 07h ;маска вывода символа
mov cx, 10 ;Длина строки
xor di, di ;Позиция вывода
Write:
lodsb
stosw
loop Write


Ответ отправлен: 26.05.2003, 22:02
Отправитель: Lynx


Отвечает Vdr

Здравствуйте, SuperAsm!
Смотри приложение.

Приложение:

Ответ отправлен: 27.05.2003, 10:50
Отправитель: Vdr


Отвечает Ayl

Приветствую Вас, SuperAsm!
Как хочешь. Можно с помощью функций DOS, можно с помощью функций BIOS, можно напрямую в видеопамять.
Как именно - см.Приложение


Приложение:

Ответ отправлен: 27.05.2003, 12:18
Отправитель: Ayl


Отвечает Tigran K. Kalaidjian

Добрый день, SuperAsm!
если есть строка:
str1 db "Всем привет !$"
то можно её вывести следующим образом:
lea dx, str1
mov ah, 09h
int 21h

Ответ отправлен: 27.05.2003, 16:32
Отправитель: Tigran K. Kalaidjian


Отвечает _vt

Приветствую Вас, SuperAsm!
(У меня это тоже было первым вопросом...)
Для начала попробуй с использованием функции 9 прерывания DOS.


Приложение:

Ответ отправлен: 27.05.2003, 19:09
Отправитель: _vt


Отвечает Дмитрий

Доброе время суток, SuperAsm!
Обычно используют функцию №9 прерывания ДОС. При этом DS:DX должно указывать на строку, заканчивающуюся знаком '$'. Но мне больше нравится функция №2 прерывания ДОС, которая выводит всего-лишь один символ, занесенный в DL. По-моему эта функция гибче, т. к. я могу в циклах выводить все, что угодно, строки разной длины и может быть даже выводить все это частями. Удачи!

Ответ отправлен: 28.05.2003, 07:12
Отправитель: Дмитрий


Отвечает Bob Johnson

Приветствую Вас, SuperAsm!
Под дос - функция 9 int 21h. Под windows - WriteFile/WriteConsole в STD_OUTPUT_HANDLE.


Ответ отправлен: 28.05.2003, 16:24
Отправитель: Bob Johnson


 Вопрос № 3276

Доброго времени суток ! :)
В книге Зубкова на стр.428-431(глава Программирование для Windows - Графические приложения, 7.3.3) есть пример Вин-программы с меню... Набив текст и скомпилировав его MASM32 с сайта WASM.RU, получил exe. Однако при запуске никакого окна прога не выводит, не говоря уже про меню, хотя предыдущая, с примером вывода окна, работает прекрасно... Не подскажете, в чём может быть проблема ?
Спасибо !
S/
P.S. Текст программы не привожу по причине его большого размера и наличия пары inc-файлов... Если уважаемые эксперты не имеют книги для ознакомления с текстом программы, то прошу мылить - вышлю исходники...
P.P.S. Соответствие набранной программы оригиналу проверено четырежды...



Вопрос отправлен: 26.05.2003, 20:32
Отправитель: Sslash (assem@ukr.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает [MozgC]

Привет, вышли мне все архивом на MozgCnoSpam@mail.ru - я посмотрю.

Ответ отправлен: 26.05.2003, 20:54
Отправитель: [MozgC]


 Вопрос № 3277

Здрасте, господа эксперты. Вопросик к вам есть :
Вопрос узкоспециализированный, но все же :
Как в софтайсе найти место где сравнивается введеный пароль в программе с правильным?
Если не трудно поподробнее плиз.



Вопрос отправлен: 26.05.2003, 20:58
Отправитель: NoobieUSR

[Следующий вопрос >>] [Список вопросов]

Отвечает Broken Sword

Здравствуйте, NoobieUSR!
если в программе введенный пароль где то сравнивается с правильным, то, уверяю тебя, такая программа никому не нужна, потому как писана она на бейсике учеником 5-го класса (в лучшем случае)

Ответ отправлен: 26.05.2003, 23:18
Отправитель: Broken Sword


Отвечает [MozgC]

Подробно - долго, это тебе лучше сходить например на cracklab.narod.ru и там почитать статьи, но вкратце:
1) Возможно это сравнение типа cmp eax,ebx
2) Условный переход после вызова процедуры типа
call 00450465
jne 00492FE8
3) Это может быть такого вида:
mov eax, [XXXXXXXX]
mov edx, [YYYYYYYY]
call ZZZZZZZZ
test al, al
jnz XYXYXYXY
Ну это так для начала, а дальше читай статьи и пробуй.

Ответ отправлен: 26.05.2003, 21:15
Отправитель: [MozgC]


Отвечает Lynx

Доброе время суток, NoobieUSR!
Ну ни фига себе. Т.е. ты считаешь, что есть некий универсальный алгоритм взлома программ??? Если бы всё было бы так просто, то давно написали бы какой нить AutoCracker и у Крякеров отняли бы их работу. Сначала надо чательно изучить код. Выяснить, как программа сравнивает пароли. Например она может вычислять свёртку пароля (хэш), а затем сравнивать эти хэши или же вызывать какую нить процедуру типа StrCmp. Каждый случай представляет отдельную головоломку, и универсального алгоритма поиска защитного механизма тебе никто не даст.


Ответ отправлен: 26.05.2003, 22:03
Отправитель: Lynx


Отвечает Maverick

Приветствую Вас, NoobieUSR!
Хех, мдаа...
Это из разряда "сколько лет водителю трамвая"
Проще поищи доки по хаку в нете.
В простейшем случае выглядит так...
Выводит например прога приглашение с вводом пароля, по некоторым признакам ты определяешь, что это окно является MessageBoxA, в айсе ставишь бряк на эту функцию и отлавливаешь ее, ну а дальше ручками отлаживаешь ее и ищешь.
Понятно :)
Напомню, это в самом простом случае.

Ответ отправлен: 27.05.2003, 04:31
Отправитель: Maverick


Отвечает Beeblebrox

Добрый день, NoobieUSR!
Как написать картину? Как стать мастером боевых искусств? Как стать хорошим врачом? Балериной? Ответ везде один и тот же - работать над собой. Много работать.

Ответ отправлен: 27.05.2003, 09:47
Отправитель: Beeblebrox


Отвечает masquer

Добрый день, NoobieUSR!
Элементарно можно найти - грузишь прогу в Symbol Loader, и, нажимая F8 (кажется, т.е. смысл в том, чтобы заходить во все call процедуры, включая все системные), трассируешь программу, забудь всякие F11/F12/F10 - это для ламеров команды, настоящие крякеры трассируют от "А" до "Я". Примерно через неделю/месяц/год (зависит от квалификации крякера) ты постигнешь великое мастерство крякера и начнешь подбирать пароли к тем прогам, у которых их и в помине нет, а также научишься в уме распаковывать и факторизовать длинные ключи...
Ты сам хоть понял, что спросил?

Ответ отправлен: 27.05.2003, 11:17
Отправитель: masquer


Отвечает St

Привет, NoobieUSR!
А кто сказал что пароль просто сравнивается с правильным? Там могут быть реализованы самые разные алгоритмы. Например часть пароля отвечает за включение одной части программы, а другая другой. Или сначала проверяется длина введенного пароля затем наличие букв-цифр и только потом какое-нибудь сложное преобразование строки. Я однажды использовал программу распознавания голосовых команд IN3 Voice Command - нашел к ней серийный номер в интернете, но оказалось что хотя она перестала просить денег, но все ограничения на число комманд остались, так что пришлось их отключать в 5 местах, благо проверки были сделаны однотипно. Так что в каждом конкретном случае может быть своя ситуация, увы. Главное условие - попытаться хоть немного разобраться что же программа делает с введенным паролем и не пропускать условные переходы без проверки - куда они ведут.
St

Ответ отправлен: 27.05.2003, 11:55
Отправитель: St


Отвечает Дмитрий

Приветствую Вас, NoobieUSR!
Предположим, что SI корректно установлен и отменно фунциклирует! Тогда:
1)Запускаешь прогу
2)Вызываешь SI и говоришь ему bpx GetWindowTextA
3)В своей проге вводишь левый регнум, типа "123-456"
4)Если все ОК SI всплывает
5)Теперь надобно найти адрес буфера, по которому расположена наша строка. Учтем, что:
int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount);. Следовательно стек будет выглядеть так:
DWORD -> EIP (0x0)
DWORD -> nMaxCount (0x4)
DWORD -> lpString (0x8)
6)Переведи окно дампа в режим DWORD командой dd
7)Скажи d ss:esp+8 и запиши искомый адрес
8)Установи точку останова на начало строки bpx ds:XXXXXX r
9)Возможно отладчик всплывет несколько раз внутри GetWindowText, поэтому давай команду p ret до тех пор, пока не выйдешь из MFC42!0F22
10)После выхода из MFC42!0F22 тебе должна попасться инструкция CALL [MSVCRT!_mbscmp]. Это функция сравнения введенной строки и сгенерированного регнума. Крути листинг вниз, пока не найдешь эту инструкцию
11)Установи курсор на эту инструкцию и скажи here
12)Если все ОК, то d ds:ecx даст тебе введенную нами строку, а d ds:edx сгенерированный программой регнум. Его-то и надо попытаться ввести в прогу.
З.Ы. Если прога стандартная, без извращений, написана под MFC, то должно все получиться.

Ответ отправлен: 28.05.2003, 08:28
Отправитель: Дмитрий


Отвечает Bob Johnson

Добрый день, NoobieUSR!
Ничего себе узкоспециализированный... Все зависит от того, как это сравнение происходит. Можно смотреть от того места, где пароль был введен, куда он затем помещается (в памяти) и уже потом смотреть, кто и когда обращается к этому участку данных.


Ответ отправлен: 28.05.2003, 16:25
Отправитель: Bob Johnson



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (31)
Perl (5)
Builder / Delphi (15)
Pascal (28)
Basic / VBA (12)
Java / JavaScript (11)
PHP (7)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (39)
Windows NT/2000/XP (31)
"Железо" (29)
Поиск информации (14)
Администратору
Windows NT/2000/XP (16)
Linux / Unix (10)
Юристу
Гражданское право (5)
Семейное право (2)
Трудовое право (3)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное