• XSS.stack #1 – первый литературный журнал от юзеров форума

вопросы по DLL

Quake3

TPU unit
Забанен
Регистрация
03.11.2010
Сообщения
4 529
Решения
4
Реакции
5 305
Депозит
0.046
Пожалуйста, обратите внимание, что пользователь заблокирован
Такая задача - есть DLL, которая экспортирует определенные функции, нужные в моей программе. Напрямую инклудить DLL (как стандартные Windows либы) я не могу, нужно загружать динамически. И тут возникает сложность - допустим, есть в длл функция MD5. Прототип ее такой
Код:
MD5 PROC string :DWORD, result_buffer :DWORD
. Я не могу ее использовать в программе, хотя пробовал по разному.

1 способ:
объявляю в коде прототип
Код:
MD5 PROTO :DWORD, :DWORD
делаю инклуд либы
Код:
includelib \masm32\path\mydll.lib
И загружаю в коде либу динамически, после вызываю функции через invoke.
Код:
invoke LoadLibrary,chr$("путь_к_mydll.dll")
invoke MD5,addr gate,addr buffer

Такой код не работает, а вылетает сразу же (в т.ч. при попытке отладки), с сообщением что не найдена такая-то dll.

2 способ:
убираю прототип и инклуд либы, а добавляю
Код:
extrn __imp__MD5@8:DWORD
MD5 equ __imp__MD5@8

Не компилируется с ошибкой
unresolved external symbol ___imp__MD5@8


Как быть? Есть ли какой-то способ, чтобы можно было вызывать эти функции через invoke (т.е. как будто бы длл загружена в память процесса обычным путем), или только юзать GetProcAddress и никак иначе?
 
invoke LoadLibrary,chr$("путь_к_mydll.dll")
invoke MD5,addr gate,addr buffer
а кто адрес апи искать будет ? :)

прописываешь прототип, подгружаешь либу (LoadLibraryA), ищешь адрес этой функи в ней (GetProcAddress), дергаешь апи, выгружаешь либу :)
 
ntdll.MD5Init
ntdll.MD5Update
ntdll.MD5Final

гугли Quake3 и не изобретай велосипед.

если не MD5, т.е. не конкретный пример, используется связка LoadLibrary/GetProcAddress
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Про стандартные функи MD5 не знал, спасибо; но в целом, это пример больше. Думал, может есть какие-то способы вызова кроме GetProcAddress, т.е. чтобы через invoke, но dll загружалась динамически. Выходит, что нет, жаль.
Просто код получается очень сложным и длинным, если писать что-то вида:

Код:
.code
local wsa:WSADATA

invoke LoadLibrary,chr$("ws2_32")
	mov hDll,eax
invoke GetProcAddress,hDll,chr$("WSAStartup")

lea ebx,wsa
push ebx
push 101h
call eax
Т.е. для вызова всего лишь 1 функи с dll нужно куча кода, а если еще добавить шифрование строк, то вообще. Думал, может можно как-то упростить (вариант - перейти на Си не предлагать :) ).
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Подскажите по такой теме. Подгружаю дллку через правку исполняемого файла на диске. Т.е. с помощью cff explorer открываю файл и в таблицу импорта добавляю мою дллку. И почему-то не всегда работает, т.е. в некоторых простых ехе работает, а вот в нотепаде нет. Почему так, где искать ошибку?

def:
Код:
LIBRARY mydll
EXPORTS LibMain
dll:
Код:
.386
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\macros\macros.asm
uselib kernel32, user32

.data
buff db MAX_PATH+1 dup(0)

.code
LibMain proc instance:DWORD,reason:DWORD,reserved:DWORD
  .if reason == DLL_PROCESS_ATTACH;если наша DLL загружена
	xor ebx,ebx
	invoke GetModuleFileName,ebx,offset buff,MAX_PATH;выводим текущий путь к файлу
	invoke MessageBox,0,offset buff,0,0
	.elseif reason == DLL_PROCESS_DETACH
    mov eax,1
  .endif
  
ret
LibMain ENDP
end LibMain
 
Пожалуйста, обратите внимание, что пользователь заблокирован
demien
я запускаю нотепад под олькой, и он тупо выполняется как положено, без этой длл. Хз как отследить.
 
так работает нотепад или нет? по идее если он не найдет твою дллку, то как минимум сепшен обеспечен
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ragnar
нотепад работает, не работает моя длл с ним. Я сделал простую дллку, которая выводит мессаджебокс с текущим путем к файлу. И этого не происходит почему-то.
 
можно погадать на кофейной гуще, разложить карты таро, постучать в бубен, принести жертву сатане.
а можно взять отладчик и посмотреть грузится ли дллка, выполняется ли её точка входа, попадает ли туда управление вообще.
выбор за вами

и да, еще вариант выложить свой код или семпл
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ragnar
сотона не помогает, вся надежда на вас.
fasm.su/dll.zip

сама дллка (ее код на предыдущей странице темы, последний пост),2.exe - файл который работает (прицепил к нему длл и все отлично), нотепад - провел аналогичные манипуляции, но не работает.
 
как заюзать ольку:
options->startup and exit->make first pause at System breakpoint
после этого увидим, что в первом случае дллка появляется в списке модулей, во втором нет

что бы это могло быть? ну по хорошему счету надо реверсить загрузчик и смотреть что не так, я думаю дело в том что в нотепаде bound тоесть отложенные импорты

ca17e04e9a193dde2786a2fa09e098df.jpg
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ragnar
Спасибо, не знал просто как олькой смотреть загруженные длл, да и про отложенный импорт надо почитать, наверное это как раз оно и есть.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх