三四年沒在這里發(fā)過貼了,湊個(gè)熱鬧,貼一小東西:CodeZap。
給 EXE 添加節(jié)顯示啟動(dòng)信息的代碼多的要死,CodeZap 這個(gè)最大的特色就是 C++ 寫成的,且提供了比較獨(dú)立美觀的Z函數(shù)。只要了解 C/C++ 語(yǔ)言,就能寫添加大量的代碼,完全可以工程化操作。
引用:
CodeZap 簡(jiǎn)要說明
CodeZap 是用來給 PE 文件添加額外代碼的 C++ SDK。您可以通過使用熟悉而且容易工程化的 C/C++ 語(yǔ)言來添加大量的可執(zhí)行代碼。
Codez 使用非常簡(jiǎn)單,你只要模仿 ZCode 函數(shù),寫出自己的 ZCode 即可。其中 ZCode 的要求如下:
1. ZCode 必須是 CDECL 調(diào)用規(guī)范。
2. ZCode 函數(shù)最后的 __asm 塊,除 #ifdef _DEBUG 包圍的之外,必須保留。
3. ZCode 中不能使用字符串常量。
4. ZCode 中不能調(diào)用外部函數(shù)。
5. ZCode 中可以調(diào)用 __forceinline 聲明的函數(shù)。
6. ZCode 中可以使用 CodeZap 中所有 Z 開頭的函數(shù)。
7. ZCode 中的 C++ 代碼可以任意添加,只要符合前面的所有條件。
8. 可以修改 #ifdef _DEBUG 中的匯編代碼為你所所要情形。
9. 可以修改函數(shù)的參數(shù)(基于上一條為前提)。
CodeZap 調(diào)用示例:
CodeZap(TEXT("C:\\ABC.CZ.exe"), TEXT("C:\\ABC.exe"), (PBYTE) ZCode);
Powered By Yonsm
WWW.Yonsm.NET
2007.4.31
|
支持 Visual C++ 6.0/2005 編譯
代碼:
接口函數(shù):
BOOL CodeZap(PCTSTR ptzDst, PCTSTR ptzSrc, PBYTE pbCode);
ZAPI HMODULE ZGetKernelHandle();
ZAPI HMODULE ZGetModuleHandle(PCTSTR ptzModule = NULL);
ZAPI HMODULE ZSearchModuleHandle(PCTSTR ptzModule, PBYTE pbBase = (PBYTE) 0x70000000, PBYTE pbMax = (PBYTE) 0x80000000);
ZAPI FARPROC ZGetProcAddress(HMODULE hModule, PCTSTR ptzProc);
代碼:
你如果要添加功能,則需要改寫的函數(shù): ZCode
VOID CDECL ZCode()
{
// KERNEL32
HMODULE hKernel32 = ZGetKernelHandle();
// GetProcAddress
TCHAR szGetProcAddress[] = {'G', 'e', 't', 'P', 'r', 'o', 'c', 'A', 'd', 'd', 'r', 'e', 's', 's', 0};
PGetProcAddress pGetProcAddress = (PGetProcAddress) ZGetProcAddress(hKernel32, szGetProcAddress);
if (!pGetProcAddress) return;
// LoadLibrary
CHAR szLoadLibrary[] = {'L', 'o', 'a', 'd', 'L', 'i', 'b', 'r', 'a', 'r', 'y', ZEND};
PLoadLibrary pLoadLibrary = (PLoadLibrary) pGetProcAddress(hKernel32, szLoadLibrary);
if (!pLoadLibrary) return;
// USER32
TCHAR tzUser32[] = {'U', 'S', 'E', 'R', '3', '2', 0};
HMODULE hUser32 = pLoadLibrary(tzUser32);
// MessageBox
CHAR szMessageBox[] = {'M', 'e', 's', 's', 'a', 'g', 'e', 'B', 'o', 'x', ZEND};
PMessageBox pMessageBox = (PMessageBox) pGetProcAddress(hUser32, szMessageBox);
TCHAR tzText[] = {'H', 'a', 'h', 'a', ',', ' ', 'I', ' ', 'a', 'm', ' ', 'C', 'o', 'd', 'e', 'Z', 'a', 'p', '!', 0};
TCHAR tzCaption[] = {'C', 'o', 'd', 'e', 'Z', 'a', 'p', 0};
pMessageBox(NULL, tzText, tzCaption, MB_ICONINFORMATION);
__asm
{
JMP _ZCodeEnd;
_ZJumpOEP:
// Jump to OEP: Jump delta will be fixed by CodeZap
JMP $ + 5;
#ifndef _DEBUG
// Put your own ASM code here
PUSHAD;
CALL ZCode;
POPAD;
#endif
JMP _ZJumpOEP;
_ZCodeEnd:
}
}
|