Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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 |
Отписаться
Убрать рекламу |
В избранное | ||