设为首页 加入收藏

TOP

基于VC++实现PE的修改编程(二)
2013-07-22 18:12:48 来源: 作者: 【 】 浏览:323
Tags:基于 实现 修改 编程

 

  unsigned char waddress ={0};

  waddress =(char)(dwAddress>>24)&0xFF;

  waddress =(char)(dwAddress>>16)&0xFF;

  waddress =(char)(dwAddress>>8 )&0xFF;

  waddress[0]=(char)(dwAddress    )&0xFF;

  return waddress;

  }

  BOOL CPe::WriteNewEntry(int ret,long offset, DWORD dwAddress)

  {

  CString strErrMsg;

  long retf;

  unsigned char waddress ={0};

  retf=_lseek(ret,offset,SEEK_SET);

  if(retf==-1)

  {

  AfxMessageBox("Error seek.");

  return FALSE;

  }

  memcpy(waddress,StrOfDWord(dwAddress),4);

  retf=_write(ret,waddress,4);

  if(retf==-1)

  {

  strErrMsg.Format("error write: %d",GetLastError());

  AfxMessageBox(strErrMsg);

  return FALSE;

  }

  return TRUE;

  }

  BOOL CPe::WriteMessageBox(int ret,long offset,CString strCap,CString strTxt)

  {

  CString strAddress1,strAddress2;

  unsigned char waddress ={0};

  DWORD dwAddress;

  // 获取MessageBox在内存中的地址.

  HINSTANCE gLibMsg=LoadLibrary("user32.dll");

  dwMessageBoxAadaddress=(DWORD)GetProcAddress(gLibMsg,"MessageBoxA");

  // 计算校验位.

  int nLenCap1 =strCap.GetLength()+1;   // 加上字符串后面的结束位.

  int nLenTxt1 =strTxt.GetLength()+1;   // 加上字符串后面的结束位.

  int nTotLen=nLenCap1+nLenTxt1+24;

  // 重新计算MessageBox函数的地址.

  dwAddress=dwMessageBoxAadaddress-(dwProgRAV+dwNewEntryAddress+nTotLen-5);

  strAddress1=StrOfDWord(dwAddress);

  // 计算返回地址.

  dwAddress=0-(dwNewEntryAddress-dwOldEntryAddress+nTotLen);

  strAddress2=StrOfDWord(dwAddress);

  // 对话框头代码(固定).

  unsigned char cHeader ={0x6a,0x40};

  // 标题定义. 

  unsigned char cDesCap ={0xe8,nLenCap1,0x00,0x00,0x00};

  // 内容定义.

  unsigned char cDesTxt ={0xe8,nLenTxt1,0x00,0x00,0x00};

  // 对话框后部分的代码段.

  unsigned char cFix[12]

          

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇基于VC++实现APC注入 下一篇VC++锁屏程序遇到的问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: