利用程序几种常用的保护办法[网络技术]
本文“利用程序几种常用的保护办法[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1、前言
目前很多程序员都没有软件安全的意识,对自己辛辛劳苦的劳动成果不加保护,而这些贫乏保护意识的程序在日益强盛的SoftIce, OllyDBG(OllyICE), W32DASM等工具眼前显得如此脆弱,一个略微有点经验的Cracker大概在几分钟之内便可以简单的冲破防线;有些程序员固然有了保护自己程序的意识,但是普通都完好依靠于专业的保护软件举行加壳保护,对自己的程序本身在编码阶段却完好不设防,而这些出名的壳也并非安全,目前对这些出名的壳都有专门的脱壳工具和脱壳教材,一旦这些壳被剥掉,那么显目前Cracker眼前的也美满是一些赤裸裸的代码.
本文主要介绍在软件编码阶段举行一些必要的保护手段,在编译生成二进制代码后再举行外部加壳保护处理,这样应当更安全一些,一旦壳被攻破,还有内部的保护机制在起作用,已经写成类库,认为有效的可以下载略微改正便可以利用.
2、常用的几种编码阶段的保护手段
A、检测SoftIce驱动能否安装
检测SoffIce的驱动能否存在来判断能否安装了SoftIce,代码以下:
if(CreateFile( "\\\\.\\NTICE", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL)!=INVALID_HANDLE_VALUE)
{
There is SoftICE NT on your system;
}
if(CreateFile( "\\\\.\\SICE", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL)!=INVALID_HANDLE_VALUE)
{
There is SoftICE98 on your system;
}
B. 程序窗口句柄检测
检测能否存在窗口Ollyice大概OllyDbg等等,读者可以自行增添
char name1[]="OLLYDBG";
char name2[]="OLLYICE";
HWND hwnd=BlurFindWindow(name1); //循环检测windows全部顶层窗口,只要窗口名称中含有(模糊匹配)字符串name1,name2的窗口则阐明存在Ollyice大概OllyDbg
if(hwnd!=NULL)
{
There is OLLYDBG on your system;
}
hwnd=BlurFindWindow(name2);
if(hwnd!=NULL)
{
There is OLLYICE on your system;
}
C. 用线程环境块检测
TEB(Thread Environment Block) 在 Windows 9x 系列中被称为 TIB(Thread Information Block),它记录了线程的重要信息,并且每一个线程城市对应一个 TEB 构造.在TEB构造的 30h 偏移处存放着别的一个重要的数据构造的首地址PPEB:
typedef struct _NT_TEB
{
NT_TIB Tib; // 00h
PVOID EnvironmentPointer; // 1Ch
CLIENT_ID Cid; // 20h
PVOID ActiveRpcInfo; // 28h
PVOID ThreadLocalStoragePointer; // 2Ch
PPEB Peb; // 30h
ULONG LastErrorValue; // 34h
ULONG CountOfOwnedCriticalSections; // 38h
PVOID CsrClientThread; // 3Ch
PVOID Win32ThreadInfo; // 40h
ULONG Win32ClientInfo[0x1F]; // 44h
PVOID WOW32Reserved; // C0h
ULONG CurrentLocale; // C4h
ULONG FpSoftwareStatusRegister; // C8h
PVOID SystemReserved1[0x36]; // CCh
PVOID Spare1; // 1A4h
LONG ExceptionCode; // 1A8h
ULONG SpareBytes1[0x28]; // 1ACh
PVOID SystemReserved2[0xA]; // 1D4h
GDI_TEB_BATCH GdiTebBatch; // 1FCh
ULONG gdiRgn; // 6DCh
ULONG gdiPen; // 6E0h
ULONG gdiBrush; // 6E4h
CLIENT_ID RealClientId; // 6E8h
PVOID GdiCachedProcessHandle; // 6F0h
ULONG GdiClientPID; // 6F4h
ULONG GdiClientTID; // 6F8h
PVOID GdiThreadLocaleInfo; // 6FCh
PVOID UserReserved[5]; // 700h
PVOID glDispatchTable[0x118]; // 714h
ULONG glReserved1[0x1A]; // B74h
PVOID glReserved2; // BDCh
PVOID glSectionInfo; // BE0h
PVOID glSection; // BE4h
PVOID glTable; // BE8h
PVOID glCurrentRC; // BECh
PVOID glContext; // BF0h
NTSTATUS LastStatusValue; // BF4h
UNICODE_STRING StaticUnicodeString; // BF8h
WCHAR StaticUnicodeBuffer[0x105]; // C00h
PVOID DeallocationStack; // E0Ch
PVOID TlsSlots[0x40]; // E10h
LIST_ENTRY TlsLinks; // F10h
PVOID Vdm; // F18h
PVOID ReservedForNtRpc; // F1Ch
PVOID DbgSsReserved[0x2]; // F20h
ULONG HardErrorDisabled; // F28h
PVOID Instrumentation[0x10]; // F2Ch
PVOID WinSockData; // F6Ch
ULONG GdiBatchCount; // F70h
ULONG Spare2; // F74h
ULONG Spare3; // F78h
ULONG Spare4; // F7Ch
PVOID ReservedForOle; // F80h
ULONG WaitingOnLoaderLock; // F84h
PVOID StackCommit; // F88h
PVOID StackCommitMax; // F8Ch
PVOID StackReserve; // F90h
PVOID MessageQueue; // ???
} NT_TEB, *PNT_TEB;
以上是“利用程序几种常用的保护办法[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |