Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация собственного Uninstall'а, Программа, удаляющая саму себя 
:(
    Опции темы
SenkraD
Дата 9.11.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Вообщем дело состоит так: мне надо, чтобы программа после своей работы удалила сама себя и каталог в котором она лежала - пытаюсь реализовать Uninstall...

Принимаются любые варианты (хотя бы идеи)


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 9.11.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



идея проста -- ищем на форуме подобные темы:
http://forum.vingrad.ru/topic-11951/0.html


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
FFFFFFF7
Дата 9.11.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.10.2006

Репутация: 2
Всего: 2



*.bat не подводил еще smile 
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL   Вверх
SenkraD
Дата 9.11.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



А можно как-нить без бат-файла? 
Это уже ради интереса


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 10.11.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



можно. читай мою ссылку.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
SenkraD
Дата 11.11.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Да читал я это всё...и не раз.
Ну вот один вариант...
Код

invoke CreateProcess,0,cline,0,0,0,NORMAL_PRIORITY_CLASS,0,0,sinfo,pinfo
invoke ExitProcess,0
cline:
db 'cmd ( а вот тут нада задержку сделать) del main.exe',0 


Но какой-то он не С++ ))

А все остальные варианты - так или иначе, на  костылях с использованием промежуточных файлов...

Единственный вариант из всех предложенных - 
Цитата
 пусти прогу в резедент и от туда удали сам исполняемый файл.

Но несколько непонятно, что именно имеется в виду:
сделать отдельный виртуальный процесс, или отдельную программу, которую потом всё равно придётся удалять?


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
mr.Anderson
Дата 11.11.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Да чем тебе батник не нравится... Создавай автоматически бат-файл, заполняй его нужной командой, причем в конце батника пропиши удаление самого батника. Затем запусти на выполнение. И усе.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
RatHat
Дата 11.11.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



sim7, да костыли это всё...
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
BUGOR
Дата 11.11.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



1. Попробуй на лету вызвать следующие функции(в том порядке, в котором я их пишу):

ExitProcess
DeleteFile
UnmapViewOfFile

Но на момент вызова ExitProcess все хэндлы которые открыл процесс должны быть закрыты, окон тоже быть не должно:

2. Если есть права, то выдели участок памяти в, например, explorer.exe, проинжектируй туда код с вызовом Sleep и DeleteFile и выполни его.

3. Если у тебя NTFS, то открой том в RAW и работай напрямую с MFT smile)




--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
SenkraD
Дата 12.11.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



BUGOR, спасибо за идеи!
Но тут же появились новые вопросы:

1. Что передать в функцию UnmapViewOfFile?
2. Я пытался для этого юзать ф-цию CreateRemoteThread (этим я уже два дня занимаюсь)

Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    //Блок для нахождения процесса explorer'а
    HANDLE HS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 P;
    P.dwSize = sizeof(PROCESSENTRY32);
    HANDLE hProc;
    if(Process32First(HS, &P))
    {
        do
        {
            hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, P.th32ProcessID);
            String str = P.szExeFile;
            if(str.LowerCase() == LowerCase("explorer.exe"))
            {
                if(hProc == NULL) ShowMessage("Process is not open");
                DWORD lpThreadID;

               /*Этот блок я добавил после того, как я не смог просто присоединиться к  
               эксплореру...Дал себе максимальные(по-моему) привилегии*/
               HANDLE hToken;
                _LUID Luid;
                TTokenPrivileges tkp;
                Cardinal ReturnLength;

                if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,&hToken))
                {
                    LookupPrivilegeValue(NULL, "SeSystemEnvironmentPrivilege", &Luid);
                    tkp.Privileges[0].Luid = Luid;
                    tkp.PrivilegeCount=1;
                    tkp.Privileges[0].Attributes=SE_PRIVILEGE_USED_FOR_ACCESS;
                    if (AdjustTokenPrivileges(hToken, False, &tkp, 0, NULL, (unsigned long*)(ReturnLength)))
                    {
                       //Попытка присоединения к эксплореру
                        HANDLE hT = CreateRemoteThread(hProc, NULL, 0, ThreadFunc, &P.th32ProcessID,  
                                                                                CREATE_SUSPENDED, &lpThreadID);
                        SetThreadPriority(hT, THREAD_PRIORITY_HIGHEST);
                        ResumeThread(hT);
                        CloseHandle(hT);
                    }
                }
            }
            CloseHandle(hProc);
        }
        while(Process32Next(HS, &P));
    }
    CloseHandle(HS);
}


этот код срабатывает у меня только для моего же процесса, для остальных процессов - выдаёт ошибку.
Где я ошибся или что я не дописал?

3. Мне надо универсальную программу, без привязки к какой-либо конкретной файловой системе...



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
BUGOR
Дата 15.11.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: нет
Всего: 16



Цитата

1. Что передать в функцию UnmapViewOfFile?


Очевидно, что свою базу GetModuleHandle(0);

Цитата

2. Я пытался для этого юзать ф-цию CreateRemoteThread (этим я уже два дня занимаюсь)


Если ты под админом привелегии тебе вряд ли какие понадобятся, если же твои права урезаны, то нужно получать SeDebugPrivilege. У меня есть 100% работающая реализация на ассемблере, реализовано всё в стиле ЯВУ, так что я думаю ты как сишник разберёшься:

Код

EnableDebugPrivilege proc
    local hTokenNew:HANDLE
    local tkpNew:TOKEN_PRIVILEGES
    invoke GetCurrentProcess
    mov ecx,eax
    invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hTokenNew
    .if eax != 0
      invoke LookupPrivilegeValue,0, $CT0("SeDebugPrivilege"),addr tkpNew.Privileges.Luid
      .if eax != 0
        mov tkpNew.PrivilegeCount,1
        mov tkpNew.Privileges.Attributes,SE_PRIVILEGE_ENABLED
        invoke AdjustTokenPrivileges,hTokenNew,0,addr tkpNew,0,0,0
        .if eax != 0
          invoke GetLastError
          .if eax == ERROR_SUCCESS
            mov eax,1
          .else
            xor eax,eax
          .endif
        .endif
      .endif
      push eax
      invoke CloseHandle,hTokenNew
      pop eax
    .endif
    ret
EnableDebugPrivilege endp


Это первое, второе, где после установки привелегий ты вновь пытаешься открыть процесс? Я не нашёл ещё одного вызова OpenPrcess. И последнее, чтобы твоя ThreadFunc выполнилась в контексте другого приложения её туда нужно проинжектировать smile

Это сообщение отредактировал(а) BUGOR - 15.11.2006, 11:34


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
SenkraD
Дата 15.11.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



пасибо.
А можно простой пример инжектирования


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.