Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2010, 05:26   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Disassembler.Hook

Доброго времени суток мастера Assembler'исты, нужна маленькая помощь. При попытке hook'а "*.dll" в "*.exe" приложение, возникает такая проблема как Access Violation when reading... Не могу понять по какой причине! (Assembler изучаю не долго, недели две от силы, пожалуйста не ругать если что не так, новичок)

Метод hook'а:
Код:
PUSH PlayFun9.00888F81                      ; /FileName = "Map.dll"
CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>  ; \LoadLibraryA
OR EAX,EAX 
JE SHORT PlayFun9.00888FC8                          ; Выходим если .dll не найдена
PUSH PlayFun9.00888F8E                                ; /ProcNameOrOrdinal = "Init" -> Экспортируемая функция
PUSH EAX                                                     ; |hModule -> Получаем handle
CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd> ; \GetProcAddress ; 
MOV DWORD PTR DS:[888F68],EAX                   ; Копирую в пустое место но вот здесь мы и ругаемся на access violation
PUSH 1 
CALL EAX                                                     
JMP PlayFun9.00854EBC
PUSH 0                                                        ; /ExitCode = 0
CALL kernel32.ExitProcess                               ; \ExitProcess
Assembler'ный код (Такс, на всякий случай)
Код:
; Include
	include \masm32\include\masm32rt.inc
	Include	\masm32\macros\MACROS.ASM
	include HookThis.inc
	includeLib HookThis.lib
; -------

; Constant
.Const
; --------

; Data with definite values
.Data
	CLoadImage DD 006C167EH
	
	MiniMap_01 DB "World1\MiniMap.jpg",0
	MiniMap_02 DB "World2\MiniMap.jpg",0
	MiniMap_03 DB "World3\MiniMap.jpg",0

	MsgTitle DB "Test DLL", 0
	MsgCapti DB "Message", 0
; -------------------------

; Data with no definite values
.Data?
; ----------------------------

; Listing
.Code

DllEntry Proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
	MOV EAX, TRUE
	RET
DllEntry EndP

CheckImg Proc
	Local MapID:DWORD
	Push Ebp
	Mov Ebp,Esp
	Push Ecx
	Mov [MapID],Ecx
	Mov Eax,[MapID]
	Cmp DWORD Ptr Ds:[EAX+18H],0
	Je Short SetByte
	Mov Ecx, DWORD Ptr Ds:[8C5CF8H]
	Push Ecx
	; ----
	Cmp Ecx, 0
	Push 1
	Push 2900H
	Push 2601H
	Push 7B69H
	Lea Eax, MiniMap_01
	Push Eax
	Call CLoadImage
	ADD ESP,14
	Jmp Short NoImage
; ----
SetByte:
; ----
	Mov Al,1
	Jmp Short NoImage
; ----
NoImage:
; ----
	Mov Esp, Ebp
	Pop Ebp
	Ret
CheckImg EndP

CheckMap Proc 
	Push Ebp
	Mov Ebp, Esp
	Xor Eax, Eax
	Cmp DWORD Ptr Ss:[Ebp+8],0
	Jnz Short ValleyOfLoren
	Sete Al
	Jmp MapNotAllowed
; ----
ValleyOfLoren:
; ----
    Cmp DWORD Ptr Ss:[Ebp+8],1EH
	Jnz Short MapNotAllowed
	Sete Al
; ----
MapNotAllowed:
; ----
	Pop Ebp
	Ret
CheckMap EndP

Init Proc
    Invoke CheckImg
    Invoke CheckMap
	Ret
Init EndP

End DllEntry
; -------

Последний раз редактировалось coNsept; 28.07.2010 в 09:49.
coNsept вне форума Ответить с цитированием
Старый 29.07.2010, 22:44   #2
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

1. То что Вы хотите сделать никакой вовсе не хук, а динамическая подгрузка длл в адресное пространство Вашего процесса
2. Вы пишете в секцию только для чтения, похоже, вот Вам и вылетает поэтому исключение, что как бы говорит нам

Обращайтесь Hellcome in world of assembler :-D
Нет, ну правда..

Последний раз редактировалось yuran666666; 30.07.2010 в 09:05.
yuran666666 вне форума Ответить с цитированием
Старый 05.08.2010, 03:08   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Спасибо, разобрался! Действительно, секция только для чтения.
coNsept вне форума Ответить с цитированием
Старый 06.08.2010, 12:44   #4
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Кстати, чтобы задать атрибуты секции при компилировании в масме, можете воспользоваться аргументом линкера /SECTION
например для секции кода батник будет выглядеть так примерно:

c:\masm32\bin\ml.exe" /c /coff *.asm
c:\masm32\bin\Link.exe" /SUBSYSTEM:WINDOWS /SECTION:.text,RWE *.obj

RWE-это и будут атрибуты секции .text после компиляции
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 07.08.2010, 03:47   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Динамическая загрузка .dll в процесс

Возникла следующая проблема, но уже с "access violation read", с тем условием что секции были установлены в read и write.

Код:
; ----
Include \masm32\include\masm32rt.inc
Include \masm32\macros\MACROS.ASM
; ----

; ----
.Const
; ----

; ----
.Data
	PLoadImage DD 006C167EH
	
	MiniMap_00 DB "World1\MiniMap.jpg",0
	MiniMap_01 DB "World2\MiniMap.jpg",0
	MiniMap_02 DB "World3\MiniMap.jpg",0

	MsgTitle DB "Test DLL work!", 0
	MsgCapti DB "Message", 0
; ----

; -----
.Data?
; -----

; ----
.Code

DllEntry Proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
	Mov Eax, TRUE
	Ret
DllEntry EndP

Init Proc 
	;Invoke MessageBox, NULL, addr MsgTitle, addr MsgCapti,MB_ICONWARNING 
	; ----
	Local MapID:DWORD 
	Mov Edx, DWORD Ptr Ds:[8C5CF8H] 
	Mov MapID, Edx
	Push 1
	Push 0
	Push 2900H
	Push 2601H
	Push 7B69H 
	Lea Eax, MiniMap_00 
	Push Eax
	Call PLoadImage ; Данная процедура вызывается из .exe приложения, вот и с этим у меня проблемы
	; ----
	Xor Eax, Eax
	Cmp DWord Ptr Ds:[Ebp + 8], 0
	Mov Eax, 1
	Jmp MapNotAllowed
MapNotAllowed:
        Mov Ebp, Esp
        Pop Ebp
	Ret
	; ----
Init EndP

End DllEntry
; ----
Вызов процедуры и выдает "Access violation read", без, все работает замечательно! Есть у кого идеи как это исправить?

Просмотр со стороны отладчика

Код HTML:
0970100C >  55              PUSH EBP
0970100D    8BEC            MOV EBP,ESP
0970100F    83C4 FC         ADD ESP,-4
09701012    8B0D F85C8C00   MOV ECX,DWORD PTR DS:[8C5CF8]
09701018    894D FC         MOV DWORD PTR SS:[EBP-4],ECX
0970101B    6A 01           PUSH 1
0970101D    6A 00           PUSH 0
0970101F    68 00290000     PUSH 2900
09701024    68 01260000     PUSH 2601
09701029    68 697B0000     PUSH 7B69
0970102E    8D05 04307009   LEA EAX,DWORD PTR DS:[9703004]
09701034    50              PUSH EAX
09701035    FF15 00307009   CALL DWORD PTR DS:[9703000] ; 006C167E - Вызов той самой процедуры
0970103B    33C0            XOR EAX,EAX
0970103D    3E:837D 08 00   CMP DWORD PTR DS:[EBP+8],0
09701042    75 07           JNZ SHORT MiniMap.0970104B
09701044    B8 01000000     MOV EAX,1
09701049    EB 28           JMP SHORT MiniMap.09701073
0970104B    3E:837D 08 02   CMP DWORD PTR DS:[EBP+8],2
09701050    75 07           JNZ SHORT MiniMap.09701059
09701052    B8 01000000     MOV EAX,1
09701057    EB 1A           JMP SHORT MiniMap.09701073
09701059    3E:837D 08 03   CMP DWORD PTR DS:[EBP+8],3
0970105E    75 07           JNZ SHORT MiniMap.09701067
09701060    B8 01000000     MOV EAX,1
09701065    EB 0C           JMP SHORT MiniMap.09701073
09701067    3E:837D 08 1E   CMP DWORD PTR DS:[EBP+8],1E
0970106C    75 05           JNZ SHORT MiniMap.09701073
0970106E    B8 01000000     MOV EAX,1
09701073    8BEC            MOV EBP,ESP
09701075    5D              POP EBP
09701076    C9              LEAVE
09701077    C3              RETN

Последний раз редактировалось coNsept; 07.08.2010 в 04:24.
coNsept вне форума Ответить с цитированием
Старый 07.08.2010, 22:54   #6
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

что то вообще непонятно, что Вы имеете тут ввиду..
вы создаете длл, это понятно, данная длл по видимому должна экспортировать одну функцию - Init
в этой функции очень чертовски непонятен адрес непонятной функции PLoadImage DD 006C167EH - адреса же не должны браться с потолка
вообщем Вы инструкцией call передаете управление на адрес 006C167EH, я лично абсолютно незнаю что у Вас там и есть ли что-то вообще.. а Вы?

могу посоветовать Iczeliona, после ознакомления хотя бы с основными темами, такие вопросы пропадут сами собой
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 08.08.2010, 04:28   #7
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Цитата:
данная длл по видимому должна экспортировать одну функцию - Init
Вы все правильно поняли, данная .dll экспортирует одну процедуру. А на счет передачи управления на PLoadImage, так это адрес не с потолка, данный адрес, это процедура находящаяся в .exe файле, а что именно выполняет PLoadImage, я думаю не сильно важно, важно то что она не выполняется, так как я получаю ошибку "Access violation when read", еще не успев выполнить не одной команды из.

Последний раз редактировалось coNsept; 08.08.2010 в 04:33.
coNsept вне форума Ответить с цитированием
Старый 08.08.2010, 12:06   #8
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Вообщем на сколько я понял, эксе "экспортирует" функцию для длл, которую он сам же и подгрузил?
Уважаемый, если это не извращение, то уж и не знаю что тогда..
И задавать адреса вызовов процедур в виде ее конкретного адреса - не есть хороший тон...
Таки почитайте все же несколько букварей по ассемблеру
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 08.08.2010, 13:10   #9
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Хорошо, посоветуйте либо дайте чет почитать, как правильно передать управление из .dll, процедуре из .exe. За ранее благодарен за любую помощь.
coNsept вне форума Ответить с цитированием
Старый 08.08.2010, 15:51   #10
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

цикл статей:
http://wasm.ru/publist.php?list=1

в частности по длл:
http://wasm.ru/article.php?article=1001017

в частности по хукам:
http://wasm.ru/article.php?article=1001024

а вообще читайте от начала до конца весь цикл..
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HOOK zumm Общие вопросы Delphi 2 29.03.2010 20:21
Глобальный HOOK vma Общие вопросы C/C++ 0 25.03.2010 11:49
Hook на копирование. Dj_smart Win Api 4 26.05.2008 00:22
Hook... Roof Общие вопросы Delphi 5 06.11.2007 16:25
Hook off? Сильванович Михаил Win Api 1 03.04.2007 16:25