工具:MSVC6.0 UltraEdit
一、去除左側(cè)標(biāo)簽欄
查找文本 tabmanager
將下面一段中的 left 改為 none
<element layoutpos=left layout=filllayout()>
<element layout=borderlayout()>
<png layoutpos=right class="ChromeLeftBorder"/>
</element>
<msbltabs id=atom(tabmanager) padding=ifhc(rect(0,0,0,6), rect
(0,0,0,6))>
</msbltabs>
</element>
二、啟動多帳號
查找內(nèi)容"填:
3D B7 00 00 00 0F 85 B5 01 00 00
在"替換為"填:
3D B7 00 00 00 90 E9 B5 01 00 00
點擊"替換",然后保存即可.
三、去除標(biāo)題欄的BETA字樣
Ctrl+R, 在"查找內(nèi)容"填:
28 00 42 00 45 00 54 00 41 00 29 00 00 00 5F
在"替換為"填:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
點擊"替換",然后保存即可
四、字體變形解決方法:
element
{
fontface: sysmetricstr(6);
fontsize: sysmetric(-16);
}
這段代碼改成:
element
{
fontface: sysmetricstr(6);
fontsize: 9pt;
}
編譯,保存。記得修改前備份。
五、去廣告
element layoutpos=top layout=verticalflowlayout(0,2,2,2)
padding=rect(2,5,3,2)
修改為
element layoutpos=none layout=verticalflowlayout(0,2,2,2)
padding=rect(2,5,3,2)
編譯腳本,保存.
六、去掉搜索欄
搜索
element[id=atom(idSearchContainer)]
將
element[id=atom(idSearchContainer)]
{
layoutpos:bottom;
}
改為
element[id=atom(idSearchContainer)]
{
layoutpos:none;
}
七、去掉添加聯(lián)系人
搜索
cmdbutton[id=atom(idAddContact)]
將
cmdbutton[id=atom(idAddContact)]
{
Foreground:ifhc(menutext,ifhc(hotlight,blue));
layoutpos:bottom;
}
改為
cmdbutton[id=atom(idAddContact)]
{
Foreground:ifhc(menutext,ifhc(hotlight,blue));
layoutpos:none;
}
八、去掉msn今日
搜索
cmdbutton cmdid=40233 id=atom(msntodaybtn)
將
cmdbutton cmdid=40233 id=atom(msntodaybtn)
class="ToolbarBtn" layout=flowlayout(0,2,0,2) AccName=rcstr(4231)
AccRole=57 AccDesc=rcstr(4230) ShortcutString=rcstr(4229)
改為
cmdbutton cmdid=40233 class="ToolbarBtn"
layoutpos=none AccName=rcstr(4231) AccRole=57 AccDesc=rcstr(4230)
ShortcutString=rcstr(4229)
九、去掉我的共享空間
搜索
cmdbutton cmdid=40421 id=atom(spacebtn)
將
cmdbutton cmdid=40421 id=atom(spacebtn)
class="ToolbarBtn" layout=flowlayout(0,2,0,2) AccName=rcstr(4257)
AccRole=57 AccDesc=rcstr(61769) ShortcutString=rcstr(4256)
改為
cmdbutton cmdid=40421 class="ToolbarBtn"
layoutpos=none AccName=rcstr(4257) AccRole=57 AccDesc=rcstr(61769)
ShortcutString=rcstr(4256)
可以去掉全部的按鈕
element id=atom(idMeAreaButtons)
加上layoutpos=none.
十、去掉聊天窗口下放的文字廣告
搜索
element id=atom(adbannercont)
將
element id=atom(adbannercont) layout=filllayout()
layoutpos=bottom
改為
element layoutpos=none
最后,修改以后不要忘記保存.
最開始的思路是獲得explorer.exe的句柄,用ShellExecute啟動abc.exe。但是用explorer.exe的句柄創(chuàng)建的進程的父進程依然是調(diào)用和進程,而不是傳入句柄的進程。
看來直接的不行,只能用間接的了。把運行abc.exe的代碼段寫到explorer.exe的內(nèi)存里面去。然后讓explorer來運行這段代碼。
static DWORD CALLBACK ThreadProc(){
::ShellExecute(NULL,"open","abc.exe",NULL,NULL,SW_SHOW);
return TRUE;
}但是現(xiàn)在就出現(xiàn)問題了,ShellExecute在shell32模塊里,還需要LoadLibrary和GetProcAddress。同時它也 用了兩個字符串常量,這些字串會出現(xiàn)在本進程的內(nèi)存中,在explorer中運行代碼就會出錯,系統(tǒng)把它關(guān)掉。所以改用了WinExec來代替 ShellExecute,同時要把需要的字串和函數(shù)指針都寫到explorer的內(nèi)存區(qū)里。
typedef UINT (WINAPI * WINEXEC)(LPCSTR,UINT);
typedef struct tagTHREADDATA{
TCHAR fileName[20];
WINEXEC pWinexec;
}THREADDATA, *LPTHREADDATA;
static DWORD CALLBACK ThreadProc(LPTHREADDATA pData){
pData->pWinexec(pData->fileName,SW_SHOW);
return TRUE;
}
DWORD getExplorerPID(){
HWND startButtonHandle;
DWORD processID;
startButtonHandle = ::FindWindow (TEXT("Shell_TrayWnd"),NULL);
::GetWindowThreadProcessId( startButtonHandle, &processID );
return processID;
}注入內(nèi)存的過程:
user32Handle = ::GetModuleHandle(TEXT("kernel32"));
//得到kernel32模塊句柄
processHandle = ::OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ,FALSE,getExplorerPID());
//用explorer的PID來打開進程,并得到創(chuàng)建線程和寫的權(quán)限。
dataAddr = ::VirtualAllocEx(processHandle,0,sizeof(THREADDATA),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//在explorer的內(nèi)存內(nèi)里申請一塊內(nèi)存來存所用的數(shù)據(jù)
THREADDATA data = {TEXT("a.exe"),(WINEXEC)GetProcAddress(user32Handle,"WinExec"),};
WriteProcessMemory(processHandle,dataAddr,&data,sizeof(THREADDATA),&byteWrited);
//把數(shù)據(jù)寫到申請的內(nèi)存中
codeAddr = ::VirtualAllocEx(processHandle,0,sizeOfThreadProc,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//申請代碼的內(nèi)存區(qū)
WriteProcessMemory(processHandle,codeAddr,&ThreadProc,sizeOfThreadProc,&byteWrited);
//把代碼寫進去,這時我們己經(jīng)把我們要用的代碼和數(shù)據(jù)都準(zhǔn)備好了。
threadHandle = CreateRemoteThread(processHandle,NULL,0, LPTHREAD_START_ROUTINE)codeAddr,dataAddr,0,(LPDWORD)threadID);
//在explorer中創(chuàng)建一個線程,來執(zhí)行啟動abc.exe的代碼。所需的數(shù)據(jù)都己經(jīng)在explorer的內(nèi)存塊中,所以不會出問題。
WaitForSingleObject(threadHandle, INFINITE);
VirtualFreeEx(processHandle,dataAddr,0,MEM_RELEASE);
VirtualFreeEx(processHandle,codeAddr,0,MEM_RELEASE);
CloseHandle(threadHandle);
CloseHandle(processHandle);
//等待執(zhí)行完畢,釋放內(nèi)存,關(guān)閉句柄。這就完成了代碼的注入與執(zhí)行。