引用论坛里的一位DogWang兄弟的帖子:我使用BedRock根据bigboote的make your own pe packer的代码学习加壳。感觉很有长进,但在给delphi6/7编译的exe加壳的时候,运行加壳后的文件,系统提示此文件不是有效的win32应用。
刚刚开始我以为是TLS的问题,后来发现不是,bambam处理TLS使用了所谓的TLS_proxy,用假的tls代替了原始的tls.
希望高人能帮我解决delphi的问题。bambam004的代码在源码区可以下载。
我也与DogWang兄弟遇到的问题一样,不知道是怎么回事,而且还有一个问题就是,我在Stub的
dll文件增加几个功能后,按照上面的手法增加了如下对Kernel32.dll函数的调用
typedef HGLOBAL (__stdcall *PFNGLOBALALLOC)(UINT, SIZE_T);
typedef HGLOBAL (__stdcall *PFNGLOBALFREE)(HGLOBAL);
typedef BOOL (__stdcall *PFNISDEBUGGERPRESENT)(void);
typedef VOID (__stdcall *PFNEXITPROCESS)(UINT);
typedef BOOL (__stdcall *PFNVIRTUALPROTECT)(LPVOID, SIZE_T, DWORD, PDWORD);
typedef UINT (__stdcall *PFNGETSYSTEMDIRECTORY)(LPTSTR,UINT);
typedef HANDLE (__stdcall *PFNFINDFIRSTFILE)(LPCTSTR,LPWIN32_FIND_DATA);
typedef BOOL (__stdcall *PFNFINDCLOSE)(HANDLE);
typedef HMODULE (__stdcall *PFNGETMODULEHANDLE)(LPCTSTR);
typedef HRSRC (__stdcall *PFNFINDRESOURCE)(HMODULE,LPCTSTR,LPCTSTR);
typedef HGLOBAL (__stdcall *PFNLOADRESOURCE)(HMODULE,HRSRC);
typedef DWORD (__stdcall *PFNSIZEOFRESOURCE)(HMODULE,HRSRC);
typedef LPVOID (__stdcall *PFNLOCKRESOURCE)(HGLOBAL);
typedef HANDLE (__stdcall *PFNCREATEFILE)(LPCTSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
typedef HANDLE (__stdcall *PFNCREATEFILE)(LPCTSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
typedef BOOL (__stdcall *PFNWriteFile)(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
typedef BOOL (__stdcall *PFNCloseHandle)(HANDLE);
typedef DWORD (__stdcall *PFNSetFilePointer)(HANDLE,LONG,PLONG,DWORD);
typedef HANDLE (__stdcall *PFNCreateMutex)(LPSECURITY_ATTRIBUTES,BOOL,LPCTSTR);
typedef DWORD (__stdcall *PFNGetLastError)(VOID);
pfnGetSystemDirectory = (PFNGETSYSTEMDIRECTORY)GetProcAddress(hMod, "GetSystemDirectoryA");
pfnFindFirstFile = (PFNFINDFIRSTFILE)GetProcAddress(hMod, "FindFirstFileA");
pfnFindClose = (PFNFINDCLOSE)GetProcAddress(hMod, "FindClose");
pfnGetModuleHandle = (PFNGETMODULEHANDLE)GetProcAddress(hMod, "GetModuleHandleA");
pfnFindResource =(PFNFINDRESOURCE)GetProcAddress(hMod, "FindResourceA");
pfnSizeofResource =(PFNSIZEOFRESOURCE)GetProcAddress(hMod, "SizeofResource");
pfnLoadResource =(PFNLOADRESOURCE)GetProcAddress(hMod, "LoadResourceA");
pfnLockResource=(PFNLOCKRESOURCE)GetProcAddress(hMod, "LockResourceA");
pfnCreateFile =(PFNCREATEFILE)GetProcAddress(hMod, szCreateFile);
FillMemory(szCreateFile, strlen(szCreateFile), 0);
pfnWriteFile =(PFNWriteFile)GetProcAddress(hMod, szWriteFile);
FillMemory(szWriteFile, strlen(szWriteFile), 0);
pfnCreateMutex = (PFNCreateMutex)GetProcAddress(hMod, "CreateMutexA");
pfnGetLastError =(PFNGetLastError)GetProcAddress(hMod, "GetLastError");
用这几个函数实现了一些小功能后,一切运行正常,但当我多增加几条代码后,压缩后的程序总是运行出错,不知道怎么回事,有哪位对bambam004研究比较深的兄弟,希望大家一起来讨论下
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课