DLL to LIB

Тема в разделе "WASM.BEGINNERS", создана пользователем fragment, 2 авг 2010.

  1. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Спасибо, а листинг программы не посмотрите , что здесь не так , почему не удаляется ключ реестра и фаил? Запускаю как программу как Администратор.
     
  2. maybeZ3N

    maybeZ3N New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2010
    Сообщения:
    80
    Посмотрю, но сделаю это уже дома...
     
  3. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    fragment
    > у меня нету денег на такое дорогостоющее программное обеспечение.
    Так вот кто не оплатил подписку на васм!!!1
     
  4. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Серьезно помогите с программой , без неё не могу двигаца дальше в изучении масм, не хватает прав на нужные опирации с файлами папками и реестром.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    wf_
    Библиотека импорта, сгенерированная из def (где просто подряд идут имена ф-ий), не подойдет, потому что Си компилятор, например, для stdcall функций (которых в kernel32 подавляющее большинство) ожидает наличие манглинга соответствующего: в начале подчеркивание "_", потом имя функции, потом "@" и суммарный размер параметров в байтах.
    Например, _MessageBox@16.

    Нужно тогда воспользоваться тулзой из masm (implib кажется?), которой нужно передать .inc с прототипами, чтобы была инфа о числе и размере параметров.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Great
    Так либа по дефолту и сгенерится по всем правилам stdcall, разве не?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Из .def c помощью lib /def:xxx.def ?
     
  8. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    А где же мне найти def для ntdll.dll или kernel32.dll ?
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    fragment
    Написать самому. Как такой вариант.
     
  10. maybeZ3N

    maybeZ3N New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2010
    Сообщения:
    80
    Код (Text):
    1. .686p
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. includelib         ../lib/kernel32.lib
    6. includelib      ../lib/shell32.lib
    7. includelib      ../lib/advapi32.lib
    8. includelib      ../lib/user32.lib
    9.  
    10. .data?
    11. PROGRAM_FILESX86 db 260 dup (?)
    12. hKey dd ?
    13.  
    14. .data
    15. xchat db "\xchat\inst.conf",0
    16. RegistryKey db "Software\XChat\",0
    17. installed db "installed",0
    18.  
    19. .code
    20. start:
    21.  
    22. SHGetSpecialFolderPathA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    23.  
    24.     push 1
    25.     push 0002ah ;CSIDL_PROGRAM_FILESX86
    26.     push offset PROGRAM_FILESX86
    27.     push 0
    28.     call SHGetSpecialFolderPathA
    29.  
    30. lstrcatA PROTO :DWORD,:DWORD
    31.  
    32.     push offset xchat
    33.     push offset PROGRAM_FILESX86
    34.     call lstrcatA
    35.  
    36. DeleteFileA PROTO :DWORD
    37.  
    38.     push offset PROGRAM_FILESX86
    39.     call DeleteFileA    
    40.  
    41. RegOpenKeyExA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    42.  
    43.     push offset hKey
    44.     push 0000F003Fh ;KEY_ALL_ACCESS
    45.     push 0
    46.     push offset RegistryKey
    47.     push 80000001h ;HKEY_CURRENT_USER
    48.     call RegOpenKeyExA
    49. ;mov    hKey,eax -  Ну, надо читать мсдн, эта функция возвращает не хэндл, а статус.
    50.     RegDeleteValueA PROTO :DWORD,:DWORD; Думаю, что это то, что вам нужно, а то что написали вы уничтожает ветку с подзаписями, а эта ф-я только значения у ветки.
    51.     push    offset installed
    52.     push    hKey
    53.     call    RegDeleteValueA
    54.    
    55.    
    56. RegDeleteKeyA PROTO :DWORD,:DWORD
    57.  
    58.     push offset installed
    59.     push hKey
    60.     call RegDeleteKeyA
    61.    
    62. RegCloseKey PROTO :DWORD
    63.  
    64.     push hKey
    65.     call RegCloseKey
    66.  
    67. jmp msg
    68.  
    69. MessBoxA db "XChat Trial Reset",0
    70.  
    71. msg:
    72.  
    73. MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    74.  
    75.     push 00000030h
    76.     push 0h
    77.     push offset MessBoxA
    78.     push 0h
    79.     call MessageBoxA
    80.  
    81. ExitProcess PROTO :DWORD
    82.  
    83.     push eax
    84.     call ExitProcess
    85.  
    86. end start
    Я не знаю, что там за ветки у вашего хчата. Но думаю, что вам нужно было удалить значение, а не ветку, поэтому я использовал другую ф-ю. Но также и оставил вашу.
    У вас там лишний бэкслеш был - это раз.
    Вы вместо хэндла подсовывали статут, возвращённый ф-ей - это два.
    И по-моему, вы используете не ту ф-ю - это три.

    С реестром работаю в первый раз, но при использовании мсдн-а это не явл. большой проблемой. А также я делал поиск по нужной ф-ии в директории экзамплес масма.

    Какой-то не слишком красивый метод взлома вы используете....
     
  11. maybeZ3N

    maybeZ3N New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2010
    Сообщения:
    80
    Да, и ещё, похоже, что у вас неправильные пути к либам прописаны в исходнике. При замене одной точки на две - всё стало работать нормально...
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    fragment
    Говорю же, лучше заюзайте тулзу из masm пакета
     
  13. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    maybeZ3N спасибо ключик удаляется нормально, моя вина что я не разобрался с апи и допустил ошибки. А как быть с удалением файла?
     
  14. Scholium

    Scholium New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2009
    Сообщения:
    96
    Вот пример из соседнего топика, где показан способ построения полноценного lib-файла из shlwapi.dll. Конечно, этот способ не универсальный (из-за капризов «Иды», пример, shell32.dll), но выход все равно есть. В принципе, Вам нужны описания не всех системных функций, а только тех, которые используются в вашем проекте. А именно прототипы этих функций всегда можно найти у «Иды», загрузив в нее подходящую длл-ку. Важно понимать, что либы это предкомпилированные дефы (бинарные деревья), которые в свою очередь являются подобием h-файлов в Си. Прототип нужной функции всегда можно подсмотреть в «Иде» (для родной dll-ки или программы, ее использующей) и конвертнуть вручную или скриптом в формат def-файла. Думаю, что эта задача волне решаема. Позже я попробую создать собственный kernel32.lib из kernel32.dll.
     
  15. maybeZ3N

    maybeZ3N New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2010
    Сообщения:
    80
    У меня нет хчата. Ты бы привёл путь, который у тебя получается. Мне кажется, что ты где-то потерял слеш. А также, если у тебя семерка или висла, тебе потребуются права администратора.
     
  16. wf_

    wf_ New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2009
    Сообщения:
    40
    да действительно, с библиотекой ntdll возникли некоторые проблемы, до этого использовал lib.exe /DEF для генерации msvcrt.lib вроде проблем не было (или пока не обнаруженно). Т.ч. лучше наверно воспользоваться другим инструментом, или по-другому сгенерить def-файл.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Зачем эта возня вся нужна, динамический импорт решит все проблемы.
     
  18. Scholium

    Scholium New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2009
    Сообщения:
    96
    Ну, да. Если Вы пишете собственные программы на ассемблере, то можете ограничить себя только этим методом, хотя идея самоограничения, из-за лени разобраться, лично мне не импонирует. Но, другое дело, если Вы «потрошите» чужие dll-ки или exe-шники. Например, добиваетесь полной перекомпиляции бинарного кода, вместе с его ресурсами. Для чего это нужно, это уже другой вопрос. Только метод динамического импорта здесь не прокатит. Зато очень полезно сделать собственные либы, поддерживающие распознавание имен функций в «Иде» с подгруженными символами.

    Кстати, ординалы в kernel32.dll полностью соответствуют именам, начиная с единицы, без пропусков. Таким образом, для генерации kernel32.lib полностью годиться метод, приведенный в моей предыдущей ссылке. Другое дело, shell32.dll. Там ординалы имеют пропуски и начинаются с другой базы. Но и для него можно написать скрипт (я над этим работаю), генерирующий корректный деф-файл, а значит и «правильный» либ-файл. А вообще-то, по хорошему, если научиться извлекать нужную информацию из отладочных символов (pdb-файлов), то и «Ида» тогда будет не нужен.
     
  19. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    http://share.netbynet.ru/12makeit.zip Вот исходник , запускаю от имяни администоратора но фаил всеравно не удаляется , ошибка 5 , доступ запрезен. Почему так?
     
  20. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Scholium
    Из C/C++/Delphi нельзя вызвать LoadLibrary/GetProcAddress?