Использование отладчика Soft-Ice
Я думаю, что никаких проблем с самим процессом установки ни у кого не возникло,
поэтому эту часть мы просто опустим. Для того, чтобы наиболее эффективно
использовать отладчик, его надо для начала отконфигурировать. Тут мы рассмотрим
только Windows95/98 версию, описание для WindowsNT возможно появится позже.
После установки Soft-Ice'а следует войти в директорию, куда устанавливали и
найти файл winice.dat. В нем находится вся конфигурация Soft-Ice. Вот пример
моего собственного файла конфигурации.
PENTIUM=ON
NMI=ON
ECHOKEYS=OFF
NOLEDS=OFF
NOPAGE=OFF
SIWVIDRANGE=ON
THREADP=ON
LOWERCASE=OFF
PHYSMB=32
SYM=1024
HST=256
TRA=8
MACROS=32
INIT="wl;wr;wd 4;wc 11;set font 2;code on;faults off;ec;x;"
F1="h;"
F2="^wr;"
F3="^src;"
F4="^rs;"
F5="^x;"
F6="^ec;"
F7="^here;"
F8="^t;"
F9="^bpx;"
F10="^p;"
F11="^G @SS:ESP;"
F12="^p ret;"
SF3="^format;"
CF8="^XT;"
CF9="TRACE OFF;"
CF10="^XP;"
CF11="SHOW B;"
CF12="TRACE B;"
AF1="^db es:di;"
AF2="^db ds:si;"
AF3="^db es:edi;"
AF4="^db ds:esi;"
AF5="CLS;"
AF8="^XT R;"
AF11="^dd dataaddr->0;"
AF12="^dd dataaddr->4;"
CF1="altscr off; lines 60; wc 32; wd 8;"
CF2="^wr;^wd;^wc;"
; WINICE.DAT
; (SIW95\WINICE.DAT)
; for use with SoftICE Version 3.0 (Windows 95)
; 14 Aug 1996
; ***** Examples of export symbols that can be included for Windows 95 *
; Change the path to the appropriate drive and directory
EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll
EXP=c:\windows\system\comdlg32.dll
EXP=c:\windows\system\shell32.dll
;EXP=c:\windows\system\bwcc.dll
;EXP=c:\windows\system\advapi32.dll
;EXP=c:\windows\system\shell232.dll
;EXP=c:\windows\system\comctl32.dll
;EXP=c:\windows\system\crtdll.dll
;EXP=c:\windows\system\version.dll
;EXP=c:\windows\system\netlib32.dll
;EXP=c:\windows\system\msshrui.dll
;EXP=c:\windows\system\msnet32.dll
;EXP=c:\windows\system\mspwl32.dll
;EXP=c:\windows\system\mpr.dll
Что нам тут надо? Первым делом мы находим строку, начинающуюся словом "INIT" и
вставляем туда все необходимые параметры для загрузки.
Основные команды Soft-Ice:
- lines # - указывает количество строк в окне Soft-Ice'а
допустимые значения - 25, 43, 50, 60
- set font # - установить размер шрифта
допустимые значения - 1, 2, 3
- wc # - количество линий в окне с кодом (запуск без параметров включает/выключает данное окно)
- wd # - количиство линий в окне с данными (запуск без параметров включает/выключает данное окно)
- wr - включить/выключить окно с регистрами
- wf - включить/выключить окно с регистрами сопроцессора
- ww # - количество линий в watch окне (запуск без параметров включает/выключает данное окно)
- r - изменение регистров
r eax - теперь можем изменить регистр eax
r eax 12345678 - регистр eax будет равен 12345678h
- r fl=X - изменяем флаги регистров
r fl=z - изменить Zero Flag
r fl=c - изменить Carry Flag
- code on/off - показывать/непоказывать опкоды ассемблерных команд
- faults on/off - всплывать/невсплывать в Soft-Ice'е при возникновении ошибок
- i1here on/off - всплывать/невсплывать в Soft-Ice при выполнении 1-го прерывания
- i3here on/off - всплывать/невсплывать в Soft-Ice при выполнении 3-го прерывания
- exp PartialFuncName - показывает загруженную символьную информацию (имена функций из загруженных dll)
exp GetWindowText - покажет все функции, начинающиеся с "GetWindowText"
- d seg:off - показать данные
d 13F:0060E590 - показывает побайтно
(вместо "d" может также использоваться "dw" или "dd", тогда данные будут
показываться не побайтно, а словами и двойными слова соответственно)
- e seg:off - редактировать данные
e 13F:0060E590 - оказываемся в окне с данными и можем вводить все прямо с клавиатуры
e 13F:0060E590 75 - заменяет байт по адресу 13F:0060E590 на 75
- s seg:off l length data - поиск данных
length - длинна участка памяти, в котором производить поиск
s 13F:00000000 l FFFFFFFF 'Serial Number' - поиск текстовой строки
s 13F:00000000 l FFFFFFFF 34,0A,CA,14,88,55 - поиск определенновой байтовой
последовательности
- p - выполнить одну инструкцию (при этом call воспринимается также как одна инструкция и выполняется без захода в него)
по умолчанию данной команде соответствует клавиша F10
- p ret - выполнять до первой встреченной инструкции "ret"
по умолчанию данной команде соответствует клавиша F12
- t - выполнить одну инструкцию (заходим в call, int и пр.)
по умолчанию данной команде соответствует клавиша F8
- bpint IntNumber if Expression - всплывать по прерыванию
bpint 21 - всплываем при выполнении 21 прерывания
bpint 21 if ah==09 - всплываем при выполнении 21 прерывания если регистр AH=09
- bpio -h IONumber R/W/RW - всплывать при доступе к определенному порту
bpio -h 378 R - всплываем, если читаются данные из порта 378
bpio -h 378 W - всплываем, если записываются данные в порт 378
- bpm seg:off R/W/RW - всплываем, если производится доступ к памяти
bpm 13F:0045040A RW - всплываем при чтении/записи байта по адресу 13F:45040A
также, вместо "bpm" могут использоваться команды "bpmw" и "bpmd", в таком случае следится уже за словом и двойным словом соответственно
- bpx seg:off if Expression - установить точку остановки
bpx 137:4F0DA5 - всплываем, когда выполнение программы дойдет до адреса 137:4F0DA5 (т.е. регистр CS будет равен 137, а регистр EIP будет равен 4F0DA5).
Конструкцию "if Expression" использоватеь не обязательно.
*!!!*Вместо команды можно также использовать функцию
bpm seg:off с дополнительным параметром "X" - ее следует использовать если
bpx по каким-либо причинам не срабатывает.
bmp 0137:01234567 X
- bc # - удаляет брэйкпоинт
bc * - удаляем все брэйкпоинты
bc 1 3 9 A - удаляем брэйкпоинты номер 1, 3, 9, 0A
- be # - разрешить использование брэйкпоинта
используется также, как и "bc #"
- bd # - временно запретить использование брэйкпоинта
используется также, как и "bc #"
- bpe # - изменить значение брэйкпоинта
bpe 3 - изменить значение брэйкпоинта номер 3
Параметр "EXP=" в файле winice.dat используется для загрузки символьной
информации из dll и exe файлов (или файлов с другими расширениями, но которые
также являются исполняемыми).
Я бы порекомендовал загружать только те dll, которые Вы можете увидеть выше,
т.к. каждая из них занимает часть оперативной памяти и далеко не всегда
нужна. К тому же, любую необходимую dll всегда можно загрузить через SoftIce
Symbol Loader (файл loader32.exe).
Зачем это вообще надо? Это надо, чтобы не искать, по какому адресу в памяти
находится необходимая нам функция Windows API (или любая другая функция из
нужной нам dll), а использовать ее символьное значение, например, мы сможем
использовать "bpx GetWindowTextA" вместо "bpx CS:01234567".
Допустим, что Вы уже все отконфигурировали и запустили Soft-Ice. Что же делать
дальше? Для начала нажмем Ctrl-D (клавиши, устанавливаемые по умолчанию, их
можно изменить) и окажемся в консоли отладчика. Оказались?
Замечательно, значит отладчик действительно загружен и можно нажать Ctrl-D
еще раз, чтобы выйти из консоли. Дальнейшие Ваши действия будут зависеть от
того вида защиты, который Вам придется обходить. Их мы рассмотрим уже в другой
раз.
Брэйкпоинт |
Точка останова. Место, в котором отладчик останавливается и передает
управление программой Вам. |
Legal Stuff
Любое использование текста в Средствах Массовой Информации без разрешения
автора запрещено и преследуется по закону.
Любое изменение и присвоение себе авторства запрещено и преследуется по
закону.
Любые вопросы, исправления или комментарии отправляйте по адресу:
hijaq666@hotmail.com
---
SoftICE - торговая марка NuMega
Windows - торговая марка Microsoft Corp.
Обратно...