Ассемблер.Криптография.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 28 Feb 2011.

  1. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    а можно пример,а то я с длл-ми еще мало очень работал.(на асме)
    вот сама функция
    Code:
    CryptXor proc src:DWORD,sz:DWORD,xkey:DWORD
    	pusha
    	mov esi,src
    	mov edi,src
    	mov ecx,sz
    	xor eax,eax
    
    CryptXor_m1:
    	lodsb
    	xor eax,xkey
    	stosb
    	loop CryptXor_m1
    	popa
            ret
    CryptXor endp
    
    файл def:
    EXPORTS CryptXor

    а сама dll как должна выглядеть.и как допустим в проге вызвать ету функцию чтобы шифровать скажем строку и выдать в messagebox? я пробовал не получилось...
     
    #41 DooD, 9 Mar 2011
    Last edited: 9 Mar 2011
  2. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    нет,
    Code:
    LIBRARY <имя dll>
    EXPORTS CryptXor
    Сама DLL
    Code:
    .386
    .model flat, stdcall
    
    .code
    CryptXor proc src:DWORD,sz:DWORD,xkey:DWORD
    	pusha
    	mov esi,src
    	mov edi,src
    	mov ecx,sz
    	xor eax,eax
    
    CryptXor_m1:
    	lodsb
    	xor eax,xkey
    	stosb
    	loop CryptXor_m1
    	popa
            ret
    CryptXor endp
    end
    Компиляция
    Code:
    \masm32\bin\ml.exe /c /coff <имя длл.asm>
    \masm32\bin\link.exe /DLL /NOENTRY /DEF:<файл ДЕФ.def> <имя длл>.obj
    Вызывать функцию либо через include <имя длл>.lib Затем прописать прототип этой функции, и просто использоваться CryptXor.
    Либо второй вариант, используя WinAPI LoadLibraryA и GetProcAdress. С функциями разбирайся сам - это элементарно.
     
    #42 Sams, 9 Mar 2011
    Last edited: 9 Mar 2011
  3. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    а почему не прописал точку входа?Кстати имя dll вроде как не обязательно,у меня и так пахало
     
    #43 DooD, 9 Mar 2011
    Last edited: 9 Mar 2011
  4. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Обязательно или нет, а по правилам должно быть.

    А зачем здесь точка входа? Ты просто экспортируешь одну функцию. Для этого я при линковке указал, что точки входа быть не должно, ключом /NOENTRY.
     
  5. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    Сделал длл-ку.немного не так как предлагалось,но все работает.может надо кому? то я выложу...
     
    #45 DooD, 10 Mar 2011
    Last edited: 10 Mar 2011
  6. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Зачем? Полный исходник я дал. Файл .def тоже дал. Ключи компиляции - и об этом позаботился. Что бы сделать такую ДЛЛ, достаточно пару раз клацнуть ctrl+c, ctrl+v.
    Тем более не имеет абсолютно никакого смысла ради такой мелкой функции делать отдельную ДЛЛ. Её проще поместить в код программы.
     
  7. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    я сделал с entry point и в дэф писал только экспорт+ еще как ее юзать( loadlibrary и getprocaddress).ну хз,а вдруг...