Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.
Как расшарить папку
A: (Drunkard)
Оригинальная ссылка: нету

Вариант 1 (All Systems)
// Две функции: 1)Разрешает общий доступ к папке. 2) Запрещает его.
 
 // Работают под Win9x/ME/NT/2000/XP
 
 // Кодирование на WIN_32_API
 
 // Компилятор BC++ 5.01
 
 #define _UNICODE
 
 // Кроме прочего нужно добавить нижеследующие строчки
 
 #include <lm.h>
 
 // svrapi.h не включать!
 
 // Кусок из файла SVRAPI.H
 
 // т.к. подключить его полностью невозможно
 
 #define SHI50F_RDONLY 0x0001
 
 #define SHI50F_FULL 0x0002
 
 #define SHI50F_DEPENDSON (SHI50F_RDONLY|SHI50F_FULL)
 
 #define SHI50F_ACCESSMASK (SHI50F_RDONLY|SHI50F_FULL)
 
 #define SHI50F_PERSIST 0x0100
 
 #define SHI50F_SYSTEM 0x0200
 
 
 
 struct share_info_50
 
 {
 
     char shi50_netname[LM20_NNLEN+1];    /* share name */
 
     unsigned char shi50_type;                 /* see below */
 
     unsigned short shi50_flags;                /* see below */
 
     char FAR * shi50_remark;                 /* ANSI comment string */
 
     char FAR * shi50_path;                     /* shared resource */
 
     char shi50_rw_password[SHPWLEN+1]; /* read-write password (share-level security) */
 
     char shi50_ro_password[SHPWLEN+1]; /* read-only password (share-level security) */
 
 }; /* share_info_50 */
 
 
 
 // Описание функций
 
 BOOL CrShare(HWND, char*, char*, WORD);// Расшаривает папку. При успехе возвращает TRUE
 
 BOOL DelShare(HWND, char*, WORD);// Запрещает общий доступ. При успехе возвращает TRUE
 
 
 
 // Name - локальный путь к расшарив. папке. Последн. символ не должен быть '\'
 
 // NetName - имя будущего общего ресурса. Длина имени меньше LM20_NNLEN
 
 // WORD WinVer содержит версию Windows. WINNT - предопределенная в программе константа.
 
 
 
 BOOL CrShare(HWND hwnd, char* Name, char* NetName, WORD WinVer)
 
 {
 
     HINSTANCE hIn;
 
     HANDLE hShareAdd;
 
     DWORD nLevel;
 
     NET_API_STATUS nStatus;
 
     DWORD Error;
 
     char Str[MAX_PATH+80], BufErr[80];
 
     char *sTitle = "Функция предоставления общего доступа";
 
 
 
     CharUpper(Name); // Преобразование в верхний регистр внесено в тело функции по просьбе klep-а
 
     CharUpper(NetName); // Преобразование в верхний регистр внесено в тело функции по просьбе klep-а
 
 
 
     if(WinVer == WINNT)
 
     {// Если NT/2000/XP
 
         typedef NET_API_STATUS (*SHAREADDNT)(LPWSTR servername, DWORD level, LPBYTE buf, LPDWORD parm_err);
 
         SHAREADDNT pShareAdd;
 
         SHARE_INFO_502 si;
 
         WCHAR wsName[MAX_PATH], wsNetName[MAX_PATH], wsRemark, wsPasswd;
 
 
 
 // Преобразуем в UNICODE
 
         if(!MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, NetName, -1, wsNetName, MAX_PATH))
 
         {
 
             Error = GetLastError();
 
             FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Error, LANG_SYSTEM_DEFAULT, BufErr, 80, NULL);
 
             sprintf(Str, "Затрудняюсь преобразовать в UNICODE сетевое имя папки.\nОшибка %u: %s", Error, BufErr);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             return FALSE;
 
         };
 
 
 
         if(!MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Name, -1, wsName, MAX_PATH))
 
         {
 
             Error = GetLastError();
 
             FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Error, LANG_SYSTEM_DEFAULT, BufErr, 80, NULL);
 
             sprintf(Str, "Затрудняюсь преобразовать в UNICODE путь к папке.\nОшибка %u: %s", Error, BufErr);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             return FALSE;
 
         };
 
 
 
         wsRemark = (WCHAR)0;
 
         wsPasswd = (WCHAR)0;
 
         memset(&si,0,sizeof(SHARE_INFO_502));
 
 
 
         nLevel = 502;
 
         si.shi502_netname = (LPTSTR)wsNetName;
 
         si.shi502_type = STYPE_DISKTREE;
 
         si.shi502_remark = (LPTSTR)&wsRemark;
 
         si.shi502_permissions = ACCESS_ALL;
 
         si.shi502_max_uses = -1;
 
         si.shi502_current_uses = 0;
 
         si.shi502_path = (LPTSTR)wsName;
 
         si.shi502_passwd = (LPTSTR)&wsPasswd;
 
         si.shi502_reserved = 0;
 
         si.shi502_security_descriptor = NULL;
 
 
 
         hIn = LoadLibrary("NETAPI32.DLL");
 
         if(hIn == NULL)
 
         {
 
             sprintf(Str, "Затрудняюсь загрузить библиотеку NETAPI32.DLL");
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             return FALSE;
 
         };
 
 
 
         hShareAdd = GetModuleHandle("NETAPI32.DLL");
 
         if(hShareAdd)
 
         {
 
             pShareAdd = (SHAREADDNT)GetProcAddress((HMODULE)hShareAdd, "NetShareAdd");
 
 
 
             if(!pShareAdd)
 
             {
 
                 MessageBox(hwnd, "Затрудняюсь получить адрес функции NetShareAdd в NETAPI32.DLL", sTitle, MB_SYSTEMMODAL|MB_OK);
 
                 CloseHandle(hShareAdd);
 
                 FreeLibrary(hIn);
 
                 return FALSE;
 
             };
 
         }
 
         else
 
         {
 
             Error = GetLastError();
 
             FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Error, LANG_SYSTEM_DEFAULT, BufErr, 80, NULL);
 
             sprintf(Str, "Затрудняюсь получить указатель на NETAPI32.DLL\nОшибка %u: %s", Error, BufErr);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             FreeLibrary(hIn);
 
             return FALSE;
 
         }
 
         nStatus = pShareAdd(NULL, nLevel, (LPBYTE)&si, NULL);
 
 
 
         if(nStatus! = NERR_Success)
 
         {
 
             sprintf(Str, "Затрудняюсь открыть общий доступ к папке %s\nОшибка: %u", Name, nStatus);
 
 
 
             if(nStatus == NERR_DuplicateShare) // Шареное имя уже есть точно такое же
 
                 strcat(Str, "\nСетевое имя уже существует.");
 
 
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             CloseHandle(hShareAdd);
 
             FreeLibrary(hIn);
 
             return FALSE;
 
         };
 
 
 
         CloseHandle(hShareAdd);
 
         FreeLibrary(hIn);
 
     }
 
     else
 
     {     // Win9x
 
         typedef NET_API_STATUS (*SHAREADD)(char* servername, short level, char* buf, unsigned short parm_err);
 
         SHAREADD pSvrApi;
 
         struct share_info_50 si50;
 
         DWORD SizeSI50;
 
         CHAR sRemark;
 
 
 
         SizeSI50 = sizeof(struct share_info_50);
 
         memset(&si50,0,SizeSI50);
 
         sRemark=(CHAR)0;
 
         nLevel = 50;
 
         strcpy(si50.shi50_netname, NetName);
 
         si50.shi50_type = STYPE_DISKTREE;
 
         si50.shi50_flags = SHI50F_FULL|SHI50F_PERSIST;
 
 //        si50.shi50_remark = NULL;                                        BUG в Win98. Выявлен   klep-ом
 
         si50.shi50_remark=(LPTSTR)&sRemark;   // Решение найденное klep-ом и мной :)
 
         si50.shi50_path = Name;
 
         si50.shi50_rw_password[0] = '\0';
 
         si50.shi50_ro_password[0] = '\0';
 
         hIn = LoadLibrary("SVRAPI.DLL");
 
 
 
         if(hIn == NULL)
 
         {
 
             sprintf(Str, "Затрудняюсь загрузить библиотеку SVRAPI.DLL");
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             return FALSE;
 
         };
 
 
 
         hShareAdd = GetModuleHandle("SVRAPI.DLL");
 
 
 
         if(hShareAdd)
 
         {
 
             pSvrApi = (SHAREADD)GetProcAddress((HMODULE)hShareAdd, "NetShareAdd");
 
 
 
             if(!pSvrApi)
 
             {
 
                 MessageBox(hwnd, "Затрудняюсь получить адрес функции NetShareAdd в SVRAPI.DLL", sTitle, MB_SYSTEMMODAL|MB_OK);
 
                 CloseHandle(hShareAdd);
 
                 FreeLibrary(hIn);
 
                 return FALSE;
 
             };
 
         }
 
         else
 
         {
 
             Error = GetLastError();
 
             FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Error, LANG_SYSTEM_DEFAULT, BufErr, 80, NULL);
 
             sprintf(Str, "Затрудняюсь получить указатель на SVRAPI.DLL\nОшибка %u: %s", Error, BufErr);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             FreeLibrary(hIn);
 
             return FALSE;
 
         }
 
 
 
         nStatus = pSvrApi(NULL, (short)nLevel, (char*)&si50, (unsigned short)SizeSI50);
 
 
 
         if(nStatus! = NERR_Success)
 
         {
 
             sprintf(Str, "Затрудняюсь открыть общий доступ к папке %s\nОшибка: %u", Name, nStatus);
 
 
 
             if(nStatus == NERR_DuplicateShare) // Шареное имя уже есть точно такое же
 
                 strcat(Str, "\nСетевое имя уже существует.");
 
 
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             CloseHandle(hShareAdd);
 
             FreeLibrary(hIn);
 
             return FALSE;
 
     };
 
 
 
     CloseHandle(hShareAdd);
 
     FreeLibrary(hIn);
 
 }
 
 return TRUE;
 
 }
 
 
 
 // NetName - имя существующего общего ресурса.  Длина имени меньше LM20_NNLEN
 
 // WORD WinVer содержит версию Windows. WINNT - предопределенная в программе константа.
 
 
 
 BOOL DelShare(HWND hwnd, char* NetName, WORD WinVer)
 
 {
 
     HINSTANCE hIn;
 
     HANDLE hShareDel;
 
     NET_API_STATUS nStatus;
 
     DWORD Error;
 
     char Str[MAX_PATH+80], BufErr[80];
 
     char *sTitle = "Функция отмены общего доступа";
 
 
 
     CharUpper(NetName); // Преобразование в верхний регистр внесено в тело функции по просьбе klep-а
 
 
 
     if(WinVer == WINNT)
 
     {
 
         typedef NET_API_STATUS (*SHAREDELNT)(LPWSTR servername, LPWSTR netname, DWORD parm);
 
         SHAREDELNT pShareDel;
 
         WCHAR wsNetName[MAX_PATH];
 
 
 
 // Преобразуем в UNICODE
 
         if(!MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, NetName, -1, wsNetName, MAX_PATH))
 
         {
 
             Error = GetLastError();
 
             FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Error, LANG_SYSTEM_DEFAULT, BufErr, 80, NULL);
 
             sprintf(Str, "Затрудняюсь преобразовать в UNICODE сетевое имя папки.\nОшибка %u: %s", Error, BufErr);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             return FALSE;
 
         };
 
 
 
         hIn = LoadLibrary("NETAPI32.DLL");
 
 
 
         if(hIn == NULL)
 
         {
 
             sprintf(Str, "Затрудняюсь загрузить библиотеку NETAPI32.DLL");
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             return FALSE;
 
         };
 
 
 
         hShareDel = GetModuleHandle("NETAPI32.DLL");
 
 
 
         if(hShareDel)
 
         {
 
             pShareDel = (SHAREDELNT)GetProcAddress((HMODULE)hShareDel, "NetShareDel");
 
 
 
             if(!pShareDel)
 
             {
 
                 MessageBox(hwnd, "Затрудняюсь получить адрес функции NetShareDel в NETAPI32.DLL", sTitle, MB_SYSTEMMODAL|MB_OK);
 
                 CloseHandle(hShareDel);
 
                 FreeLibrary(hIn);
 
                 return FALSE;
 
             };
 
         }
 
         else
 
         {
 
             Error = GetLastError();
 
             FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Error, LANG_SYSTEM_DEFAULT, BufErr, 80, NULL);
 
             sprintf(Str, "Затрудняюсь получить указатель на NETAPI32.DLL\nОшибка %u: %s", Error, BufErr);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             FreeLibrary(hIn);
 
             return FALSE;
 
         }
 
 
 
         nStatus = pShareDel(NULL, wsNetName, 0);
 
 
 
         if(nStatus! = NERR_Success)         {
 
             sprintf(Str, "Затрудняюсь закрыть общий доступ к ресурсу %s\nОшибка сети : %u", NetName, nStatus);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             CloseHandle(hShareDel);
 
             FreeLibrary(hIn);
 
             return FALSE;
 
         };
 
     }
 
     else
 
     {
 
 // Win9x
 
         typedef NET_API_STATUS (*SHAREDEL)(LPTSTR servername, LPTSTR netname, DWORD parm);
 
         SHAREDEL pSvrApi;
 
 
 
         hIn = LoadLibrary("SVRAPI.DLL");
 
         if(hIn == NULL)
 
         {
 
             sprintf(Str, "Затрудняюсь загрузить библиотеку SVRAPI.DLL");
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             return FALSE;
 
         };
 
 
 
         hShareDel = GetModuleHandle("SVRAPI.DLL");
 
 
 
         if(hShareDel)
 
         {
 
             pSvrApi = (SHAREDEL)GetProcAddress((HMODULE)hShareDel, "NetShareDel");
 
 
 
             if(!pSvrApi)
 
             {
 
                 MessageBox(hwnd, "Затрудняюсь получить адрес функции NetShareDel в SVRAPI.DLL", sTitle, MB_SYSTEMMODAL|MB_OK);
 
                 CloseHandle(hShareDel);
 
                 FreeLibrary(hIn);
 
                 return FALSE;
 
             };
 
         }
 
         else
 
         {
 
             Error = GetLastError();
 
             FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Error, LANG_SYSTEM_DEFAULT, BufErr, 80, NULL);
 
             sprintf(Str, "Затрудняюсь получить указатель на SVRAPI.DLL\nОшибка %u: %s", Error, BufErr);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             FreeLibrary(hIn);
 
             return FALSE;
 
         }
 
 
 
         nStatus = pSvrApi(NULL, NetName, 0);
 
         if(nStatus! = NERR_Success)
 
         {
 
             sprintf(Str, "Затрудняюсь закрыть общий доступ к ресурсу %s\nОшибка: %u", NetName, nStatus);
 
             MessageBox(hwnd, Str, sTitle, MB_SYSTEMMODAL|MB_OK);
 
             CloseHandle(hShareDel);
 
             FreeLibrary(hIn);
 
             return FALSE;
 
         };
 
     }
 
 
 
     CloseHandle(hShareDel);
 
     FreeLibrary(hIn);
 
     return TRUE;
 
 }



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS