Спасибо, а листинг программы не посмотрите , что здесь не так , почему не удаляется ключ реестра и фаил? Запускаю как программу как Администратор.
fragment > у меня нету денег на такое дорогостоющее программное обеспечение. Так вот кто не оплатил подписку на васм!!!1
Серьезно помогите с программой , без неё не могу двигаца дальше в изучении масм, не хватает прав на нужные опирации с файлами папками и реестром.
wf_ Библиотека импорта, сгенерированная из def (где просто подряд идут имена ф-ий), не подойдет, потому что Си компилятор, например, для stdcall функций (которых в kernel32 подавляющее большинство) ожидает наличие манглинга соответствующего: в начале подчеркивание "_", потом имя функции, потом "@" и суммарный размер параметров в байтах. Например, _MessageBox@16. Нужно тогда воспользоваться тулзой из masm (implib кажется?), которой нужно передать .inc с прототипами, чтобы была инфа о числе и размере параметров.
Код (Text): .686p .model flat,stdcall option casemap:none includelib ../lib/kernel32.lib includelib ../lib/shell32.lib includelib ../lib/advapi32.lib includelib ../lib/user32.lib .data? PROGRAM_FILESX86 db 260 dup (?) hKey dd ? .data xchat db "\xchat\inst.conf",0 RegistryKey db "Software\XChat\",0 installed db "installed",0 .code start: SHGetSpecialFolderPathA PROTO :DWORD,:DWORD,:DWORD,:DWORD push 1 push 0002ah ;CSIDL_PROGRAM_FILESX86 push offset PROGRAM_FILESX86 push 0 call SHGetSpecialFolderPathA lstrcatA PROTO :DWORD,:DWORD push offset xchat push offset PROGRAM_FILESX86 call lstrcatA DeleteFileA PROTO :DWORD push offset PROGRAM_FILESX86 call DeleteFileA RegOpenKeyExA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD push offset hKey push 0000F003Fh ;KEY_ALL_ACCESS push 0 push offset RegistryKey push 80000001h ;HKEY_CURRENT_USER call RegOpenKeyExA ;mov hKey,eax - Ну, надо читать мсдн, эта функция возвращает не хэндл, а статус. RegDeleteValueA PROTO :DWORD,:DWORD; Думаю, что это то, что вам нужно, а то что написали вы уничтожает ветку с подзаписями, а эта ф-я только значения у ветки. push offset installed push hKey call RegDeleteValueA RegDeleteKeyA PROTO :DWORD,:DWORD push offset installed push hKey call RegDeleteKeyA RegCloseKey PROTO :DWORD push hKey call RegCloseKey jmp msg MessBoxA db "XChat Trial Reset",0 msg: MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD push 00000030h push 0h push offset MessBoxA push 0h call MessageBoxA ExitProcess PROTO :DWORD push eax call ExitProcess end start Я не знаю, что там за ветки у вашего хчата. Но думаю, что вам нужно было удалить значение, а не ветку, поэтому я использовал другую ф-ю. Но также и оставил вашу. У вас там лишний бэкслеш был - это раз. Вы вместо хэндла подсовывали статут, возвращённый ф-ей - это два. И по-моему, вы используете не ту ф-ю - это три. С реестром работаю в первый раз, но при использовании мсдн-а это не явл. большой проблемой. А также я делал поиск по нужной ф-ии в директории экзамплес масма. Какой-то не слишком красивый метод взлома вы используете....
Да, и ещё, похоже, что у вас неправильные пути к либам прописаны в исходнике. При замене одной точки на две - всё стало работать нормально...
maybeZ3N спасибо ключик удаляется нормально, моя вина что я не разобрался с апи и допустил ошибки. А как быть с удалением файла?
Вот пример из соседнего топика, где показан способ построения полноценного lib-файла из shlwapi.dll. Конечно, этот способ не универсальный (из-за капризов «Иды», пример, shell32.dll), но выход все равно есть. В принципе, Вам нужны описания не всех системных функций, а только тех, которые используются в вашем проекте. А именно прототипы этих функций всегда можно найти у «Иды», загрузив в нее подходящую длл-ку. Важно понимать, что либы это предкомпилированные дефы (бинарные деревья), которые в свою очередь являются подобием h-файлов в Си. Прототип нужной функции всегда можно подсмотреть в «Иде» (для родной dll-ки или программы, ее использующей) и конвертнуть вручную или скриптом в формат def-файла. Думаю, что эта задача волне решаема. Позже я попробую создать собственный kernel32.lib из kernel32.dll.
У меня нет хчата. Ты бы привёл путь, который у тебя получается. Мне кажется, что ты где-то потерял слеш. А также, если у тебя семерка или висла, тебе потребуются права администратора.
да действительно, с библиотекой ntdll возникли некоторые проблемы, до этого использовал lib.exe /DEF для генерации msvcrt.lib вроде проблем не было (или пока не обнаруженно). Т.ч. лучше наверно воспользоваться другим инструментом, или по-другому сгенерить def-файл.
Ну, да. Если Вы пишете собственные программы на ассемблере, то можете ограничить себя только этим методом, хотя идея самоограничения, из-за лени разобраться, лично мне не импонирует. Но, другое дело, если Вы «потрошите» чужие dll-ки или exe-шники. Например, добиваетесь полной перекомпиляции бинарного кода, вместе с его ресурсами. Для чего это нужно, это уже другой вопрос. Только метод динамического импорта здесь не прокатит. Зато очень полезно сделать собственные либы, поддерживающие распознавание имен функций в «Иде» с подгруженными символами. Кстати, ординалы в kernel32.dll полностью соответствуют именам, начиная с единицы, без пропусков. Таким образом, для генерации kernel32.lib полностью годиться метод, приведенный в моей предыдущей ссылке. Другое дело, shell32.dll. Там ординалы имеют пропуски и начинаются с другой базы. Но и для него можно написать скрипт (я над этим работаю), генерирующий корректный деф-файл, а значит и «правильный» либ-файл. А вообще-то, по хорошему, если научиться извлекать нужную информацию из отладочных символов (pdb-файлов), то и «Ида» тогда будет не нужен.
http://share.netbynet.ru/12makeit.zip Вот исходник , запускаю от имяни администоратора но фаил всеравно не удаляется , ошибка 5 , доступ запрезен. Почему так?