URLDownloadToFileA(nullptr, "ссылка", "Путь до рабочего стола\\aaa.exe", 0, nullptr);
Спасибо за статью, очень пригодилось, надеюсь накинет тебе кто биток за твои старания)URLDownloadToFileA(nullptr, "ссылка", "Путь до рабочего стола\\aaa.exe", 0, nullptr);
This method its very shit, if anyone want know if you download file, need two second with http debugger, advised use your server, add ssl ping, encrypt data.URLDownloadToFileA(nullptr, "lien", "Chemin d'accès au bureau\\aaa.exe", 0, nullptr);
мне нужно скачать на раб. стол файл с названием aaaa.exe, можно фул код пожалуйста (вместе с urldownloadtofilea)Не ну блин, сказал бы, шо надо хотяб как-то рабочий стол получить, кек..
C:WCHAR DeskPath[MAX_PATH] = { 0 }; HRESULT Status = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY, NULL, 0, DeskPath);
Не ну блин, сказал бы, шо надо хотяб как-то рабочий стол получить, кек..
C:WCHAR DeskPath[MAX_PATH] = { 0 }; HRESULT Status = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY, NULL, 0, DeskPath);
Это не то, как вы добавляете две строки в C. Кроме того, вы пытаетесь объединить wchar с char, что не сработает. Я предлагаю прочитать книгу о том, как программировать на C.
wchar_t SavePath[MAX_PATH] = { 0 };
if (!ExpandEnvironmentStringsW(L"%USERPROFILE%\\Desktop\\aaaa.exe", SavePath, MAX_PATH))
{
MessageBoxW(NULL, L"ExpandEnvironmentStringsW() error", NULL, MB_OK);
ExitProcess(ERROR_SUCCESS);
}
if (!URLDownloadToFileW(NULL, L"https://google.com/file.exe", SavePath, 0, NULL))
{
MessageBoxW(NULL, L"URLDownloadToFileW() error", NULL, MB_OK);
ExitProcess(ERROR_SUCCESS);
}
огромное спасибо, выручилКод:wchar_t SavePath[MAX_PATH] = { 0 }; if (!ExpandEnvironmentStringsW(L"%USERPROFILE%\\Desktop\\aaaa.exe", SavePath, MAX_PATH)) { MessageBoxW(NULL, L"ExpandEnvironmentStringsW() error", NULL, MB_OK); ExitProcess(ERROR_SUCCESS); } if (!URLDownloadToFileW(NULL, L"https://google.com/file.exe", SavePath, 0, NULL)) { MessageBoxW(NULL, L"URLDownloadToFileW() error", NULL, MB_OK); ExitProcess(ERROR_SUCCESS); }
TCHAR path[MAX_PATH];
SHGetSpecialFolderPath(HWND_DESKTOP, path, CSIDL_DESKTOP, FALSE);
Ну не прям сокеты, если это HTTP/HTTPS, то можно wininet использовать, тк зачем над сокетами HTTP-протокол реализовывать руками, если он уже есть в wininet. Но надо помнить, что на семерках и ниже могут быть не установлены KBшки, которые добавляют поддержку современных TLS'ов в wininet. Хотя такие системы сейчас, наверное, уже редко встретишь.Я бы посоветовал, в зависимости от задачи, конечно не использовать URLDownloadToFile, а использовать сокеты
Вообще, мне кажется, что идея сделать свою реализацию HTTP протокола (а ведь для HTTPS нужен еще и SSL/TLS, также сервер может еще и под GZIP'ом захотеть отдавать и тд) поверх сокетов через прямые сисколы - это отличный способ отложить релиз своей малвари на годик-другой. Можно еще свою кучу реализовать, почему бы нет?Если малварь - только сокеты или прямые сисколы NtDeviceIoControlFile
Так если помнишь, где они там были, так может сам и найдешь их? Я бы посмотрел на твою реализацию TLS или хотя бы HTTP поверх сокетов, раз все давно реализовано.ты можешь глянуть поднять мои старинные посты на говновасме, все давно реализовано
Это не сложно, это овердохера кода. Например, HTTPS тянет за собой TLS, TLS тянет за собой условный RSA, RSA тянет за собой реализацию больших чисел. Все это переделывать руками не имеет смысла чуть более, чем полностью. При желании можно вместо wininet взять какой-нибудь libcurl (mbedtls, axTLS или тому подобного) и не париться, но это плюс N-сотен килобайт к размеру бинаря. Функционала, который уже есть в операционной системе.Сложно - но давно реализовано
URLDownloadToFileA(nullptr, "ссылка", "Путь до рабочего стола\\aaa.exe", 0, nullptr);
std::string Download_URL = "https://www.google.com";
std::string thepath = "C:\\Users\\%USERNAME%\\Desktop\\Filename";
URLDownloadToFileW(NULL, (LPCWSTR)Download_URL.c_str(), (LPCWSTR)thepath.c_str(), NULL, NULL);