/****************************************************************
代码功能:对其它函数以及自身函数中的软断点(OD)进行检测
编写作者:Coderui
编写日期:2008年06月16日
编写语言:C/C++
编译环境:VC++ 6.0
联系邮箱:coderui@163.com
作者博客:http://hi.baidu.com/coderui
****************************************************************/
void Software(); //声明
void Software_End(); //声明
//--------------------------检测其它函数---------------------------------
typedef void (*PTRProtected_Code_Start)();
typedef void (*PTRProtected_Code_End)();
PTRProtected_Code_Start pStart;
PTRProtected_Code_End pEnd;
//--------------------------检测其它函数---------------------------------
//--------------------------检测自己函数---------------------------------
typedef void (*PTRSoftware)();
typedef void (*PTRSoftware_End)();
PTRSoftware pSoftware;
PTRSoftware_End pSoftware_End;
//--------------------------检测自己函数---------------------------------
//--------------------------检测其它函数---------------------------------
void Protected_Code_Start()
{
CString one = L"第一个函数";
AfxMessageBox(one);
_asm
{
// int 3;
// mov eax,0xcc;
}
}
void Protected_Code_End()
{
CString two = L"第二个函数";
AfxMessageBox(two);
_asm
{
// int 3;
}
}
//--------------------------检测其它函数---------------------------------
//--------------------------检测自己函数---------------------------------
void Software()
{
//编写作者:Coderui
//----------检测其它函数----------
pStart = Protected_Code_Start;
pEnd = Protected_Code_End;
DWORD i;
DWORD nSize = (DWORD)pEnd - (DWORD)pStart;
BYTE *p = (BYTE*)Protected_Code_Start;
for(i = 0; i < nSize; i++)
{
if(*p++ == 0xcc)
{
exit(0);
}
}
//----------检测其它函数----------
//编写作者:Coderui
//----------检测自己函数----------
pSoftware = Software;
pSoftware_End = Software_End;
DWORD j;
DWORD nLen = (DWORD)pSoftware_End - (DWORD)pSoftware;
BYTE *q = (BYTE*)pSoftware;
for(j = 0; j < nLen; j++)
{
if((*q++ ^ 0x55) == 0x99)//0x99 == 0xCC XOR 0x55
{
exit(0);
}
}
//----------检测自己函数----------
}
void Software_End()
{
CString three = L"第三个函数";
AfxMessageBox(three);
_asm
{
// int 3;
}
}
//--------------------------检测自己函数---------------------------------