当前位置:编程学习 > VC++ >>

VC++信息安全编程(2)分析程序实现自我删除

 

很多时候,我们制作自动安装程序,安装完成以后自动删除,软件仅仅安装一次就自动删除,以保护软件知识产权。

 

软件自动删除的代码是如何实现的呢,我们来看下

 

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

 

/////////////////////////////////////////////////////////////////////////////

// CSelfDelDlg dialog

 

CSelfDelDlg::CSelfDelDlg(CWnd* pParent /*=NULL*/)

       : CDialog(CSelfDelDlg::IDD, pParent)

{

       //{{AFX_DATA_INIT(CSelfDelDlg)

              // NOTE: the ClassWizard will add member initialization here

       //}}AFX_DATA_INIT

       // Note that LoadIcon does not require a subsequent DestroyIcon in Win32

       m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

 

void CSelfDelDlg::DoDataExchange(CDataExchange* pDX)

{

       CDialog::DoDataExchange(pDX);

       //{{AFX_DATA_MAP(CSelfDelDlg)

              // NOTE: the ClassWizard will add DDX and DDV calls here

       //}}AFX_DATA_MAP

}

 

BEGIN_MESSAGE_MAP(CSelfDelDlg, CDialog)

       //{{AFX_MSG_MAP(CSelfDelDlg)

       ON_WM_PAINT()

       ON_WM_QUERYDRAGICON()

       ON_BN_CLICKED(IDC_Delete_1, OnDelete1)

       ON_BN_CLICKED(IDC_Delete_2, OnDelete2)

       ON_BN_CLICKED(IDC_Any, OnAny)

       //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

/////////////////////////////////////////////////////////////////////////////

// CSelfDelDlg message handlers

 

BOOL CSelfDelDlg::OnInitDialog()

{

       CDialog::OnInitDialog();

 

       // Set the icon for this dialog.  The framework does this automatically

       //  when the application's main window is not a dialog

       SetIcon(m_hIcon, TRUE);                  // Set big icon

       SetIcon(m_hIcon, FALSE);          // Set small icon

      

       // TODO: Add extra initialization here

      

       return TRUE;  // return TRUE  unless you set the focus to a control

}

 

// If you add a minimize button to your dialog, you will need the code below

//  to draw the icon.  For MFC applications using the document/view model,

//  this is automatically done for you by the framework.

 

void CSelfDelDlg::OnPaint()

{

       if (IsIconic())

       {

              CPaintDC dc(this); // device context for painting

 

              SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

 

              // Center icon in client rectangle

              int cxIcon = GetSystemMetrics(SM_CXICON);

              int cyIcon = GetSystemMetrics(SM_CYICON);

              CRect rect;

              GetClientRect(&rect);

              int x = (rect.Width() - cxIcon + 1) / 2;

              int y = (rect.Height() - cyIcon + 1) / 2;

 

              // Draw the icon

              dc.DrawIcon(x, y, m_hIcon);

       }

       else

       {

              CDialog::OnPaint();

       }

}

 

// The system calls this to obtain the cursor to display while the user drags

//  the minimized window.

HCURSOR CSelfDelDlg::OnQueryDragIcon()

{

       return (HCURSOR) m_hIcon;

}

 

void CSelfDelDlg::OnDelete1()

{

/*char name[256];

char *ptr=::GetCommandLine();   

strncpy(name,ptr,255);

for(int i=1;i<256;i++)if(name[i]=='\"')break;

char path[256];

for(int j=0;j<i;

*/

HMODULE module = GetModuleHandle(0);

CHAR buf[MAX_PATH];

GetModuleFileName(module, buf, sizeof(buf));

if(DeleteFile(buf))AfxMessageBox("自我删除成功!");

else MessageBox("自我删除失败!","直接用DeleteFile",MB_OK|MB_ICONEXCLAMATION);

}

 

void CSelfDelDlg::OnDelete2()

{

  HMODULE module = GetModuleHandle(0);

  CHAR buf[MAX_PATH];

  GetModuleFileName(module, buf, sizeof buf);

  CloseHandle(HANDLE(4));

__asm {

   lea eax, buf

   push 0

   push 0

  push eax

  push ExitProcess

  push module

  push DeleteFile

  push UnmapViewOfFile

  ret

}

}

 

void CSelfDelDlg::OnAny()

{

OSVERSIONINFO ver;

ver.dwOSVersionInfoSize=sizeof(ver);

GetVersionEx(&ver);    

//if(ver.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS){//Is win95 or 98

  AfxMessageBox("98");

  HMODULE h = GetModuleHandle(0);

  CHAR buf[MAX_PATH];

  GetModuleFileName(h, buf, sizeof buf);

  FILE *fp;

  if(!(fp=fopen("c:\\anyexe.bat","wb")))return;

  CString in;

  in="del ";

  in+=buf;

 

  in+="\r\n";

  in+="del ";

  in+="c:\\anyexe.bat";

  fwrite(in.GetBuffer(0),in.GetLength(),1,fp);

  fclose(fp);

  AfxMessageBox(in);

  ::S

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,