Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Исследование защиты игр портала "Realore.com"

Обсудить статью на форуме

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

Автор: Soft_Ice <Soft_Ice@mail.ru>

Исследование защиты игр портала "Realore.com"
на примере игры "Bubble Xmas" v 1.06

автор : Soft_Ice (с) ...::: Soft_Ice CracK LaB :::...
инструменты: IDA Pro v4.51; QEDIT (Hexx Edit), PeID2006, Asprstripper v2.07ht

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

Предисловие

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

Часть 1. Распаковка

Запустим PEID2006 или любой другой инструмент, который поможет нам определить, каким именно упаковщиком-протектором упакована наша игра. Игры портала обычно упакованы в разнобразные билды протектора АСПРотект (от версии 1.2-1.3 до 2.12 SKE) или Армадилло.Замечательная тулза PEiD способна проанализировать сигнатуры файла движка игры и определить это.

В нашем случае получаем , что игра запакована протектором АСПРотект 1.3 Опытные реверсеры конечно могут запросто снять его вручную. Однако, мы новички, или не можем это сделать (а может быть просто нет времени) Воспользуемся другой замечательной тулзой от SYD - ASPRstripper v2.07ht , чтобы снять протектор и распаковать ЕХЕ игры. Для этого открываем в AStripper наш файл game.exe В опциях настройки тулзы необходимо включить все, кроме пожалуй удаления блек-листов (это мало где работает и вряд ли нам понадобится) После удачной распаковки, сохраните распакованую копию под именем _game.exe Stripper заявит нам о наличие Stolen Bytes - если есть желание (и умение) можно их восстановить, однако можно этого не делать.

Для более поздних версий АСПРотект (типа 2.хх SKE) необходимо использовать ASPRStripper v2.11rc1-rc2-v2.13b В них я обычно, наоборот убирал практически все настройки.

Для версий Армадилло - отличная тулза для распаковки Dillo Die v1.5 Все отлично распаковывалось при дефолтных опциях.

Часть 2. Проверка серийника и ее обход

Наш распакованный файл поначалу не запустится. Окно с названием plugin весело сообщит нам -Crypt API not found. Please re-install application and contact with AEE support (support@realore.com).

Оказывается , распакованный файл все же запустился и работает проверка и защита игры.Попробуем ее убрать или обойти. Для этого запустим IDA Pro и дизассемблируем _game.exe. Для начала уберем вышеназванное окно. После окончания дизассемблирования, откроем окно String в IDA и найдем стринг с сообщением "Crypt API not found. Please re-install application and contact with AEE support (support@realore.com)"

Вот это место в листинге (IDA View A)

seg003:0046190C aCryptApiNotFou db 'Crypt API not found. Please re-install application and conta'
seg003:0046190C ; DATA XREF: sub_420970+1Ao
seg003:0046190C db 'ct with AEE support (support@realore.com).',0


Посмотрим, откуда из кода программы идет вызов этого стринга.


.text:00420970 sub_420970 proc near ; CODE XREF: sub_424210p
.text:00420970 push 4 ; lpProcName
.text:00420972 push 0FFFFFFFFh ; hModule
.text:00420974 call GetProcAddress rem Вызов программы дешифрации серийника !
.text:0042097A test eax, eax
.text:0042097C mov ds:dword_46C44C, eax
.text:00420981 jnz short loc_420999 rem если eax 0, то окно c сообщением об ошибке!
.text:00420983 push 10h ; uType
.text:00420985 push offset aPlugin ; lpCaption
.text:0042098A push offset aCryptApiNotFou ; lpText
.text:0042098F push eax ; hWnd
.text:00420990 call MessageBoxA
.text:00420996 xor eax, eax
.text:00420998 retn
.text:00420999 ; ---------------------------------------------------------------------------
.text:00420999
.text:00420999 loc_420999: ; CODE XREF: sub_420970+11j
.text:00420999 mov eax, 1 rem Если все нормально, то eax=1 и сообщения нет.text:0042099E retn
.text:0042099E sub_420970 endp


Зная, что умница IDA Pro сразу показывает снизу в инф строке реальный адрес в программе-смотрим его - адрес нашего прыжка ( jnz short loc_420999) это 0001FD81. Открываем _game.exe в любом ХЕКС редакторе (предпочитаю HVIEW) и правим опкод прыжка 75 на EB.Вместо jnz у нас получиться jmp и сообщения более не будет !

Запускаем наш распакованный ЕХЕ и наблюдаем, что программа незарегестрирована и жадно просит денег.Избавим ее от этого.Для начала найдем окно ввода серийного номера (кода) , введем неправильный код и посмотрим, как игра будет ругаться на это. После этого ищем соотв. стринги в листинге IDA и референс , откуда они вызываются. Если стрингов нет, может помочь поиск рефренса функции DialogBoxParamA , а также можно найти стринг-

Decryption error. Please re-install application and contact'with AEE support (support@realore.com).и пройти к месту его вызова. (К нему Мы потом еще вернемся) Мы увидим, что он вызывается из некой подпрограммы, а вот она вызывается из подпрограммы проверки валидности серийника .В любом случае, мы придем к такому месту в коде-

Подпрограмма ввода и проверки Серийного номера (Приложение 1)

.text:004244D0 ; --------------- S U B R O U T I N E ---------------------------------------
.text:004244D0
.text:004244D0
.text:004244D0 sub_4244D0 proc near ; CODE XREF: sub_40ACE0+390p
.text:004244D0 ; sub_40E190+Bp ...
.text:004244D0 mov eax, ds:hWnd
.text:004244D5 mov ecx, ds:hInstance
.text:004244DB push esi
.text:004244DC mov esi, DialogBoxParamA ; Create a modal dialog box from a
.text:004244DC ; dialog box template resource
.text:004244E2 push 0 ; dwInitParam
.text:004244E4 push offset DialogFunc ; lpDialogFunc
.text:004244E9 push eax ; hWndParent
.text:004244EA push 68h ; lpTemplateName
.text:004244EC push ecx ; hInstance
.text:004244ED call esi ; DialogBoxParamA ; Create a modal dialog box from a
.text:004244ED ; dialog box template resource
.text:004244EF test eax, eax
.text:004244F1 jz short loc_424532
.text:004244F3 call sub_421750 rem Важно- подпрограмма дешифрации !
.text:004244F8 test eax, eax !
.text:004244FA push 0 ; dwInitParam
.text:004244FC jz short loc_42451B rem Если eax=0 - прыжок на сообщение о неверном коде
.text:004244FE mov edx, ds:hWnd
.text:00424504 mov eax, ds:hInstance
.text:00424509 push offset loc_424090 ; lpDialogFunc rem Если eax=1 - серийник верен !
.text:0042450E push edx ; hWndParent
.text:0042450F push 6Dh ; lpTemplateName
.text:00424511 push eax ; hInstance
.text:00424512 call esi ; DialogBoxParamA ; Create a modal dialog box from a
.text:00424512 ; dialog box template resource
.text:00424514 call sub_4209A0 rem Проверка и сообщение Decryption Error
.text:00424519 pop esi
.text:0042451A retn ; dwInitParam
.text:0042451B ; ---------------------------------------------------------------------------
.text:0042451B
.text:0042451B loc_42451B: ; CODE XREF: sub_4244D0+2Cj rem Сообщение о неверном серийнике!!!
.text:0042451B mov ecx, ds:hWnd
.text:00424521 mov edx, ds:hInstance
.text:00424527 push offset loc_423FD0 ; lpDialogFunc
.text:0042452C push ecx ; hWndParent
.text:0042452D push 6Dh ; lpTemplateName
.text:0042452F push edx ; hInstance
.text:00424530 call esi ; DialogBoxParamA ; Create a modal dialog box from a
.text:00424530 ; dialog box template resource
.text:00424532
.text:00424532 loc_424532: ; CODE XREF: sub_4244D0+21j
.text:00424532 pop esi
.text:00424533 retn
.text:00424533 sub_4244D0 endp

Итак, мы видим, что функция DialogBoxParamA передает введенный нами серийник в некую программу дешифрации и проверки его на валидность text:00424514 call sub_4209A0 Если эта подпрограмма возвращает в еах 0, то выполняется прыжок .text:004244FC jz short loc_42451B на сообщение о неверном серийнике , а если еах=1 серийник правильный. Посмотрим вызовы подпрограммы дешифрации серийника call sub_421750 (ее референсы) - их 4-5 и более ! Это означает, что серийник проверяется во многих местах и править джамп бессмысленно - игра останется триальной. Следовательно, нам необходимо править саму подпрограмму дешифрации. Откроем ее в IDA -

подпрограмма дешифрации серийного номера (Приложение 2)

.text:00421750 ; --------------- S U B R O U T I N E ---------------------------------------

.text:00421750 sub_421750 proc near ; CODE XREF: sub_424210+Fp
.text:00421750 ; sub_424260+27p ...
.text:00421750
.text:00421750 var_64 = byte ptr -64h
.text:00421750 var_62 = byte ptr -62h
.text:00421750 var_61 = byte ptr -61h
.text:00421750 var_60 = dword ptr -60h
.text:00421750 var_5C = byte ptr -5Ch
.text:00421750 var_5B = byte ptr -5Bh
.text:00421750 var_5A = byte ptr -5Ah
.text:00421750 var_59 = byte ptr -59h
.text:00421750 var_58 = byte ptr -58h
.text:00421750 var_57 = byte ptr -57h
.text:00421750 var_56 = byte ptr -56h
.text:00421750 var_55 = byte ptr -55h
.text:00421750 var_54 = byte ptr -54h
.text:00421750 var_53 = byte ptr -53h
.text:00421750 var_52 = byte ptr -52h
.text:00421750 var_51 = byte ptr -51h
.text:00421750 var_50 = dword ptr -50h
.text:00421750 var_4C = byte ptr -4Ch
.text:00421750 var_4A = byte ptr -4Ah
.text:00421750 var_48 = byte ptr -48h
.text:00421750 var_46 = byte ptr -46h
.text:00421750 var_44 = byte ptr -44h
.text:00421750 var_42 = byte ptr -42h
.text:00421750 var_40 = dword ptr -40h
.text:00421750 var_34 = dword ptr -34h
.text:00421750
.text:00421750 sub esp, 64h
.text:00421753 lea eax, [esp+64h+var_40]
.text:00421757 push edi
.text:00421758 push eax
.text:00421759 call sub_4216D0
.text:0042175E lea edi, [esp+6Ch+var_40]
.text:00421762 or ecx, 0FFFFFFFFh
.text:00421765 xor eax, eax
.text:00421767 add esp, 4
.text:0042176A repne scasb
.text:0042176C not ecx
.text:0042176E dec ecx
.text:0042176F cmp ecx, 16h rem Проверка на число символов рег номера ! (от22 )
.text:00421772 jnb short loc_421779 rem Если 22 проверяем - прыжок !

.text:00421774 pop edi
.text:00421775 add esp, 64h
.text:00421778 retn
.text:00421779 ; ---------------------------------------------------------------------------
.text:00421779
.text:00421779 loc_421779: ; CODE XREF: sub_421750+22j
.text:00421779 lea edi, [esp+68h+var_40]
.text:0042177D or ecx, 0FFFFFFFFh
.text:00421780 xor eax, eax
.text:00421782 push esi
.text:00421783 repne scasb
.text:00421785 not ecx
.text:00421787 dec ecx
.text:00421788 lea edx, [esp+6Ch+var_40]
.text:0042178C push ecx
.text:0042178D lea ecx, [esp+70h+var_50]
.text:00421791 push ecx
.text:00421792 push edx
.text:00421793 call sub_4215C0 rem - Может быть вызов рег номера из реестра или стека.text:00421798 lea eax, [esp+78h+var_50]
.text:0042179C push 0Ch
.text:0042179E lea ecx, [esp+7Ch+var_40]
.text:004217A2 push eax
.text:004217A3 push ecx
.text:004217A4 call sub_4215C0
.text:004217A9 add esp, 18h
.text:004217AC mov ecx, 4
.text:004217B1 lea edi, [esp+6Ch+var_60]
.text:004217B5 lea esi, [esp+6Ch+var_50]
.text:004217B9 xor edx, edx
.text:004217BB mov byte ptr [esp+6Ch+var_60], 0B3h
.text:004217C0 mov byte ptr [esp+6Ch+var_60+1], 84h
.text:004217C5 mov byte ptr [esp+6Ch+var_60+2], 0C7h
.text:004217CA mov byte ptr [esp+6Ch+var_60+3], 23h
.text:004217CF mov [esp+6Ch+var_5C], 0D7h
.text:004217D4 mov [esp+6Ch+var_5B], 0D8h
.text:004217D9 mov [esp+6Ch+var_5A], 0B8h
.text:004217DE mov [esp+6Ch+var_59], 15h
.text:004217E3 mov [esp+6Ch+var_58], 11h
.text:004217E8 mov [esp+6Ch+var_57], 2Ah
.text:004217ED mov [esp+6Ch+var_56], 0C4h
.text:004217F2 mov [esp+6Ch+var_55], 6Dh
.text:004217F7 mov [esp+6Ch+var_54], 4Dh
.text:004217FC mov [esp+6Ch+var_53], 0C3h
.text:00421801 mov [esp+6Ch+var_52], 0F8h
.text:00421806 mov [esp+6Ch+var_51], 0Ah
.text:0042180B repe cmpsd
.text:0042180D pop esi
.text:0042180E jz short loc_421817
.text:00421810 xor eax, eax
.text:00421812 pop edi
.text:00421813 add esp, 64h
.text:00421816 retn
.text:00421817 ; ---------------------------------------------------------------------------
.text:00421817
.text:00421817 loc_421817: ; CODE XREF: sub_421750+BEj
.text:00421817 lea edi, [esp+68h+var_34]
.text:0042181B or ecx, 0FFFFFFFFh
.text:0042181E xor eax, eax
.text:00421820 repne scasb
.text:00421822 not ecx
.text:00421824 dec ecx
.text:00421825 lea eax, [esp+68h+var_50]
.text:00421829 push ecx
.text:0042182A lea ecx, [esp+6Ch+var_34]
.text:0042182E push eax
.text:0042182F push ecx
.text:00421830 call sub_4215C0
.text:00421835 mov dl, [esp+74h+var_44]
.text:00421839 mov al, [esp+74h+var_42]
.text:0042183D mov cl, [esp+74h+var_48]
.text:00421841 add esp, 0Ch
.text:00421844 shr dl, 2
.text:00421847 shl al, 2
.text:0042184A or dl, al
.text:0042184C mov al, [esp+68h+var_4C]
.text:00421850 mov [esp+68h+var_64], dl
.text:00421854 mov dl, [esp+68h+var_46]
.text:00421858 shr cl, 2
.text:0042185B shl dl, 2
.text:0042185E or cl, dl
.text:00421860 mov dl, byte ptr [esp+68h+var_50+2]
.text:00421864 mov [esp+5], cl
.text:00421868 mov cl, [esp+68h+var_4A]
.text:0042186C shr al, 2
.text:0042186F shl cl, 2
.text:00421872 or al, cl
.text:00421874 pop edi
.text:00421875 mov [esp+64h+var_62], al
.text:00421879 mov al, byte ptr [esp+64h+var_50]
.text:0042187D shl dl, 2
.text:00421880 shr al, 2
.text:00421883 or dl, al
.text:00421885 xor eax, eax
.text:00421887 mov [esp+64h+var_61], dl rem Сравнение рег номера и эталона
.text:0042188B cmp dword ptr [esp+64h+var_64], 0FFFFFFFFh

.text:00421890 setz al rem Если все нормально, в еах=1, нет=0
.text:00421893 add esp, 64h
.text:00421896 retn
.text:00421896 sub_421750 endp


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

.text:0042176F cmp ecx, 16h
.text:00421772 jnb short loc_421779
.text:00421774 pop edi
.text:00421775 add esp, 64h
.text:00421778 retn

Заменим на

.text:0042176F mov eax, 1
.text:00421774 pop edi
.text:00421775 add esp, 64h
.text:00421778 retn


Править лучше в режиме дизасм в QVIEW. Если кусок нашего кода будет короче исходного по байтам, дописываем после команды retn нужное число команд NOP

Разумеется, есть и вариант исправить подпрограмму в самом конце -

.text:0042188B cmp dword ptr [esp+64h+var_64], 0FFFFFFFFh
.text:00421890 setz al

Заменить на
.text:0042176F mov eax, 1

+ Нужное число команды NOP ( безусловны переход, опкод 90)

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

Часть 3. Вторая проверка и сообщение Decrypt Error

Машина заводиться, колеса на месте, дверцы на месте, ездит... но только задним ходом (с) Г.Хазанов :)

Примерно так и есть (не у всех игр) .Запускаем - выдается сообщение (помните о стринге, о котором я говорил в самом начале)

Decryption error. Please re-install application and contact'with AEE support (support@realore.com)

Откроем снова листинг IDA (если Вы его закрыли), в месте вызова подпрограммы ввода и проверки Серийного номера (Приложение 1)

.text:00424514 call sub_4209A0
.text:00424519 pop esi
.text:0042451A retn


и видим, что после обхода подпрограммы дешифрации и сообщения о правильной регистрации есть (не у всех игр !) подпрограмма проверки ошибок дешифрации sub_4209A0.

Посмотрим ее листинг -

подпрограмма проверки ошибок дешифрации (Приложение 3)

.text:004209A0 ; --------------- S U B R O U T I N E ---------------------------------------

.text:004209A0 sub_4209A0 proc near ; CODE XREF: sub_424210+18p
.text:004209A0 ; sub_4244D0+44p
.text:004209A0
.text:004209A0 var_50 = dword ptr -50h
.text:004209A0
.text:004209A0 sub esp, 50h
.text:004209A3 mov al, ds:byte_46B8F4
.text:004209A8 push edi
.text:004209A9 mov byte ptr [esp+54h+var_50], al
.text:004209AD mov ecx, 13h
.text:004209B2 xor eax, eax
.text:004209B4 lea edi, [esp+54h+var_50+1]
.text:004209B8 rep stosd
.text:004209BA stosw
.text:004209BC stosb
.text:004209BD mov eax, ds:dword_46C454
.text:004209C2 test eax, eax
.text:004209C4 jz short loc_4209D0 rem Если нет ошибок еах=1 и нет прыжка.text:004209C6 mov eax, 1
.text:004209CB pop edi
.text:004209CC add esp, 50h
.text:004209CF retn
.text:004209D0 ; ---------------------------------------------------------------------------
.text:004209D0
.text:004209D0 loc_4209D0: ; CODE XREF: sub_4209A0+24j
.text:004209D0 lea ecx, [esp+54h+var_50]
.text:004209D4 push ecx
.text:004209D5 call sub_4216D0
.text:004209DA lea edi, [esp+58h+var_50]
.text:004209DE or ecx, 0FFFFFFFFh
.text:004209E1 xor eax, eax
.text:004209E3 add esp, 4
.text:004209E6 repne scasb
.text:004209E8 not ecx
.text:004209EA dec ecx
.text:004209EB jz short loc_420A26
.text:004209ED mov eax, ds:dword_46C44C
.text:004209F2 test eax, eax
.text:004209F4 jz short loc_420A12
.text:004209F6 lea edx, [esp+54h+var_50]
.text:004209FA push 0Ch
.text:004209FC push edx
.text:004209FD call eax
.text:004209FF test eax, eax
.text:00420A01 jz short loc_420A12
.text:00420A03 mov eax, 1
.text:00420A08 pop edi
.text:00420A09 mov ds:dword_46C454, eax
.text:00420A0E add esp, 50h
.text:00420A11 retn
.text:00420A12 ; ---------------------------------------------------------------------------
.text:00420A12 rem Наше сообщение об ошибке Decrypt Error !
.text:00420A12 loc_420A12: ; CODE XREF: sub_4209A0+54j
.text:00420A12 ; sub_4209A0+61j
.text:00420A12 push 10h ; uType
.text:00420A14 push offset aPlugin ; lpCaption
.text:00420A19 push offset aDecryptionErro ; lpText
.text:00420A1E push 0 ; hWnd
.text:00420A20 call MessageBoxA
.text:00420A26
.text:00420A26 loc_420A26: ; CODE XREF: sub_4209A0+4Bj
.text:00420A26 xor eax, eax
.text:00420A28 pop edi
.text:00420A29 add esp, 50h
.text:00420A2C retn
.text:00420A2C sub_4209A0 endp
.text:00420A2C
.text:00420A2C


Исправлять можно по разному, самое простое - в первой части убрать проверку и прыжок на сообщение об ошибке -

.text:004209C2 test eax, eax
.text:004209C4 jz short loc_4209D0 rem Заменить на nop nop !
.text:004209C6 mov eax, 1
.text:004209CB pop edi
.text:004209CC add esp, 50h
.text:004209CF retn

Примерно так - jz заменяем на две команды nop (90 90 в опкоде) У разных игр, эта подпрограмма может быть реализована по-разному (а може ее и не быть вовсе) так что здесь следует придерживаться простого метода - убрать прыжок, а если надо , то дописать пересылку в еах 1 (mov eax,1) При необходимости выровнять код командами nop

Заключение.

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

Автор - Soft_Ice Crack Lab 04.07.2005




Обсуждение статьи: Исследование защиты игр портала "Realore.com" >>>


Комментарии к статье: Исследование защиты игр портала "Realore.com"

SaNX 09.07.2006 15:48:32
" Нужное число команды NOP ( безусловны переход, опкод 90)"

Прикольно :)
---
Soft_Ice 18.07.2006 00:36:39
Ну пусть будет нужное кол-во команд NOP - суть это не меняет...
---
Soft_Ice 22.07.2006 22:27:35
Добавления к статье

1. Важно !!! Описанный выше метод реально присутствует не во всех играх портала, а только примерно в 60-80%. Также встречаются игры не запакованные протектором...

2. Выражение mov eax,1 аналогично выражениям xor eax,eax inc eax - но последние побайтно короче первого, потому можно и нужно их применять при патчинге.
---
retailer2006 09.02.2008 19:45:19
А вот у меня еще в самом начале не получилось, я когда jnz поменял на jmp(а также пробывал jz и je), у меня программа давала сбой и просила отчет для микрософта, вот так.
P.S. правда пробывал я версию 1.05 другой не нашел в сети. И еще, я новичек, поэтому хотел бы более подробного описания. Вот например я не очень понял зачем нужно " Зная, что умница IDA Pro сразу показывает снизу в инф строке реальный адрес в программе-смотрим его - адрес нашего прыжка ( jnz short loc_420999) это 0001FD81.Открываем _game.exe в любом ХЕКС редакторе (предпочитаю HVIEW) и правим опкод прыжка 75 на EB.Вместо jnz у нас получиться jmp и сообщения более не будет ! "
Я например в том же hiew - нажимал F4 - decode - далее F5 - ввожу адрес - .00420981
Получаю нужный мне переход, нажимаю F3 и только тогда вижу реальны адрес программы 0001FD81. Вопрос зачем он нужен раньше времени? Я как новичек кучу времени потратил вводя РЕАЛЬНЫЙ АДРЕС ПРОГРАММЫ в поиск. И пробывал не только в hiev. Я думаю не стоить новичкам пудрить мозги реальными адресами и делать на этом ТАКОЙ акцент.
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS