首页
社区
课程
招聘
[原创]C++中代码加解密及代码连锁的实现
发表于: 2009-12-23 12:46 7055

[原创]C++中代码加解密及代码连锁的实现

2009-12-23 12:46
7055

曾发了一个帖子
http://bbs.pediy.com/showthread.php?t=100887

有不少朋友联系我QQ,问代码加解密的实现方法,现公布一下代码示例

1.代码解密的实现

void fun()
{
  DWORD dwStartAddr,dwEndAddr;
  //获取要处理的代码的起始和终止地址
  _asm
  {
      push eax
      mov eax,offset fun_start
      mov dwStartAddr,eax
      mov eax,offset fun_end
      mov dwEndAddr,eax
      pop eax
  }
  CSms4 s4;//CSms4是一个sms4算法的加解密类
  s4.SetKey(key,16);//设置解密密钥,key的来源自己处理
  DWORD dwOldProtect, dwTemp;
  VirtualProtect( (LPVOID)dwStartAddr, dwEndAddr - dwStartAddr,PAGE_EXECUTE_READWRITE, &dwOldProtect );//去掉代码区内存保护
  s4.Decrypt( (BYTE*)dwStartAddr, dwEndAddr-dwStartAddr); //解密代码,当然你也可以做别的事情
  VirtualProtect( (LPVOID)dwStartAddr, dwEndAddr - dwStartAddr,dwOldProtect, &dwTemp); //恢复内存保护
  
fun_start:
  //需要处理的代码区域,以下仅为示例
  if ( VerifySerialNum() == FALSE )//这个被反汇编时通常为关键跳转,即使注册码不对,被破解人员修改之后,错误的注册码也被通过
  {
    //退出程序
  }
fun_end:

  //保存关键代码区域的md5,下一节中使用
  CMd5 md5;//CMd5为计算哈希的一个类
  md5.Md5Buffer((BYTE*)dwStartAddr, dwEndAddr-dwStartAddr,g_keyData );//g_keyData为全局的BYTE g_keyData[16],保存了关键代码的哈希
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 92
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看不懂  但还是支持一下……
2009-12-23 20:48
0
雪    币: 2687
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谁有sms4算法及md5算法类的实现文件?
2009-12-24 01:56
0
游客
登录 | 注册 方可回帖
返回
//