第1个300送分送出,请zlq,awanghero,NowCan,1fei,csdnflysnow领分(关于Windows程序如何保护自身不被别人非法修改)

xlqin 2001-10-25 09:03:14
讨论还在继续!
...全文
129 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
awanghero 2001-10-29
  • 打赏
  • 举报
回复
呵呵,我来领分啦!
xlqin 2001-10-27
  • 打赏
  • 举报
回复
up
csdnflysnow 2001-10-25
  • 打赏
  • 举报
回复

来领分啰。 :)
NowCan 2001-10-25
  • 打赏
  • 举报
回复
先up

再说MapFileAndCheckSum,这个函数其实是读取文件中的checksum标志,并且计算文件的checksum,然后把这两个值都输出。
文件中的checksum标志是编译时写入的,因此如果文件被改,那么checksum的计算值就会和编译时写入的不同,这样就能发现文件被修改。
但是也有特殊情况,就是在修改文件的同时也修改checksum,这样也许会骗过这个函数。

以上都是我的理解,请指教!
xlqin 2001-10-25
  • 打赏
  • 举报
回复
问题继续在
http://www.csdn.net/expert/topic/337/337961.shtm
中讨论,请移驾,顺带up一下,还有四位没来呢
xlqin 2001-10-25
  • 打赏
  • 举报
回复
up
zj_ok 2001-10-25
  • 打赏
  • 举报
回复
up
xxb_xxb 2001-10-25
  • 打赏
  • 举报
回复
ip
pursuer_zhao 2001-10-25
  • 打赏
  • 举报
回复
NowCan(能量、激情、雨水、彩虹——雷雨云) 的MapFileAndCheckSum函数的具体作用是什么?

help up.
xlqin 2001-10-25
  • 打赏
  • 举报
回复
up
xlqin 2001-10-25
  • 打赏
  • 举报
回复
请大家不要在这里回答,支持的可以帮助UP一下
xlqin 2001-10-25
  • 打赏
  • 举报
回复
=========================================================================
这上得分的第一批答案!
=========================================================================
 zlq(zlq) 回复于2001-10-24 17:35:07
完全防止被修改是不可能的, 不过可以在加密方面下工夫:
部分有关加密学的方法:
1. 增加判断分支;
2. 时间判断:从程序的第X行运行到第X+N行若时间上超过一定时间则可判断为被跟踪.
3. 设置虚假被破解点,程序后面再判断.

 awanghero(hero) 回复于2001-10-24 18:26:12
利用crc-32检测程序的完整性
电脑编程技巧与维护2000年第八期
 NowCan(能量、激情、雨水、彩虹——雷雨云) 回复于2001-10-24 20:10:50
看这个程序。

//---------------------------------------------------------------------------

#include <windows.h>
#include <imagehlp.h>


//---------------------------------------------------------------------------


int main(int argc, char* argv[])
{
DWORD HeadChksum=1,Chksum=0;
char Fn[512];
GetModuleFileName(GetModuleHandle(NULL),Fn,512);
if(MapFileAndCheckSum(Fn,&HeadChksum,&Chksum)!=CHECKSUM_SUCCESS)
{
MessageBox(NULL,"Check error!","Error",MB_OK);
}
else
{
if(HeadChksum!=Chksum)
MessageBox(NULL,"File changed.","Warning",MB_OK);
}
return 0;
}
//---------------------------------------------------------------------------

注意要在Project->Settings->Link中去掉Create debug info和link incrementally。选Category组合框的Customize,去掉Use program database,还要在Project Options中加入/release
 NowCan(能量、激情、雨水、彩虹——雷雨云) 回复于2001-10-24 20:11:41
对了,还有连上imagehlp.lib
 NowCan(能量、激情、雨水、彩虹——雷雨云) 回复于2001-10-24 20:11:46
对了,还有连上imagehlp.lib
 ray2_ls(轻衫踏雪) 回复于2001-10-24 20:45:41
up
 1fei(白天) 回复于2001-10-24 21:21:25
我提供几种思路:
1、多判断
注册点不要只有一个,最好有三到四个。在第一个被修改时,程序应当表现被破解的样子,在,正常工作一段时间后,将程序本身和其他相关资料删除。
2、标志隐藏
把你的注册标志存放在注册表一个不引人注意的地方,或存放在系统目录中以.dll结尾的文件等等。
3、时间标志
程序中加入多个时间判断的if语句,这样会让debug走向错误的语句分支上去。因为调试时程序走的慢,正常工作时程序运行的要快的多。

4、加入多进程。
多进程的交互程序最难难设计也最难调试。

5、把判断语句分布在程序的各个部分。(用inline函数封好)

以上五点合并,被破解的工作是比重新设计的工作量还要大。
 csdnflysnow() 回复于2001-10-24 21:38:20
一个很简单确很实用的办法:

至少我用softice这么久,我也想不出如何破解这种程序。
将程序的很多功能点分散,每个功能码对应一个变量。如我的程序要创建一个线程。但是
在创建线程之前要判断,m_iCreateThread == 0x55 , m_iCreateThread 是通过计算
注册码得到,只有正确的注册码才能得到这个这个值。 而判断是否注册成功的话又不判断
这个数字(切记)。 如果单纯修改可执行文件,看上去是注册成功,但是实际上根本无法
使用。

其实如何防止被破解 就要了解别人的破解方法。

xlqin 2001-10-25
  • 打赏
  • 举报
回复
怎么还没来齐?
xlqin 2001-10-25
  • 打赏
  • 举报
回复
请移驾到http://www.csdn.net/expert/topic/337/337961.shtm讨论!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧