没找到例子可以参考。 是自校验。。不是校验别的。。请大家告诉我哪里有例子可下。。谢谢.我的疑问:
  一般是这样写
 if  CRC32ChecksumOfFile(application.ExeName)=1 then
 begin
   //do something
 end;
那么:CRC32ChecksumOfFile(application.ExeName)=1 后面等号的值改下,不就 CRC32ChecksumOfFile(application.ExeName)得到的值一直会变吗?那怎么知道改后的值是多少呢???

解决方案 »

  1.   

    我理解楼主的意思是这样的:
    一个可执行文件需要对可执行文件本身进行校验,校验文件是一个函数,校验结果是一个常量,这个常量存储在EXE文件中,当程序编译之后修改这个校验结果值导致可执行文件本身校验结果也发生变化。
    这个问题我觉得可以这样做:
    将实际的校验结果定义为一个变量,这个变量尽量定义在程序的最开始(比如dpr文件中),这样会尽量避免添加新的变量引起校验结果变量存储位置的变化,也就是尽量将变量在可执行文件中的位置固定下来。
    先编译一个版本,想办法查找这个变量的地址,
    你的校验函数,即CRC32ChecksumOfFile在计算的时候排除这个变量地址值,这样你的文件版本不同,修改校验结果,即if  CRC32ChecksumOfFile(application.ExeName)=1 then 中等号后面的值不同的话,程序也是能够正常运行的。
      

  2.   

    var
      cs:string='[<[{[<[000000000000]}]>]}]';a1:=application.ExeName内容,取copy(cs,1,7)(即'[<[{[<[')之前的内容做checksum
    a2:=application.ExeName内容,取copy(cs,length(cs)-6,7)(即']}]>]}]')之后的内容做checksumif  a1 xor a2=strtointdef(copy(cs,8,length(cs)-14),-1) then 
    begin 
      //do something 
    end; 跟踪a1 xor a2是多少,替换cs里的那些0
      

  3.   

    是wooden954  说的意思。
    sz_haitao :不知道你说的是什么意思??
    资源串字符,不知道可行不。。试试看。。但好像都蛮复杂的