首页 > 解决方案 > 向客户提供带有未加密 h 文件的加密 c 代码

问题描述

我想知道是否可以向我们的客户提供加密的 c 文件和未加密的 h 文件,以便客户可以根据需要只更改 h 文件。我该怎么做?

提前致谢

艾伦·布卢门斯坦

标签: ccompilationcoding-style

解决方案


您可以混淆代码:

  /* After C++ Code Obfuscating */

  #include <sys/types.h>
  #include <sys/param.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
  #include <ctype.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include "gpsd_config.h"
  #include "bsd-base64.h"
  #define Assert(Cond) if (!(Cond)) abort()
  static const char Base64[]=
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";static
  const char Pad64='=';int b64_ntop(u_char const*src,size_t srclength,char*target
  ,size_t targsize){size_t datalength=0;u_char input[3];u_char output[4];size_t i
  ;while(2<srclength){input[0]=*src++;input[1]=*src++;input[2]=*src++;srclength-=
  3;output[0]=input[0]>>2;output[1]=((input[0]&0x03)<<4)+(input[1]>>4);output[2]=
  ((input[1]&0x0f)<<2)+(input[2]>>6);output[3]=input[2]&0x3f;Assert(output[0]<64)
  ;Assert(output[1]<64);Assert(output[2]<64);Assert(output[3]<64);if(datalength+4
  >targsize)return(-1);target[datalength++]=Base64[output[0]];target[datalength++
  ]=Base64[output[1]];target[datalength++]=Base64[output[2]];target[datalength++]
  =Base64[output[3]];}if(0!=srclength){input[0]=input[1]=input[2]='\0';for(i=0;i<
  srclength;i++)input[i]=*src++;output[0]=input[0]>>2;output[1]=((input[0]&0x03)
  <<4)+(input[1]>>4);output[2]=((input[1]&0x0f)<<2)+(input[2]>>6);Assert(output[0
  ]<64);Assert(output[1]<64);Assert(output[2]<64);if(datalength+4>targsize)return
  (-1);target[datalength++]=Base64[output[0]];target[datalength++]=Base64[output[
  1]];if(srclength==1)target[datalength++]=Pad64;else target[datalength++]=Base64
  [output[2]];target[datalength++]=Pad64;}if(datalength>=targsize)return(-1);
  target[datalength]='\0';return(datalength);}int b64_pton(char const*src,u_char*
  target,size_t targsize){size_t tarindex;int state,ch;char*pos;state=0;tarindex=
  0;while((ch=*src++)!='\0'){if(isspace(ch))continue;if(ch==Pad64)break;if((pos=
  strchr(Base64,ch))==NULL)return(-1);switch(state){case 0:if(target){if(tarindex
  >=targsize)return(-1);target[tarindex]=(pos-Base64)<<2;}state=1;break;case 1:if
  (target){if(tarindex+1>=targsize)return(-1);target[tarindex]|=(pos-Base64)>>4;
  target[tarindex+1]=((pos-Base64)&0x0f)<<4;}tarindex++;state=2;break;case 2:if(
  target){if(tarindex+1>=targsize)return(-1);target[tarindex]|=(pos-Base64)>>2;
  target[tarindex+1]=((pos-Base64)&0x03)<<6;}tarindex++;state=3;break;case 3:if(
  target){if(tarindex>=targsize)return(-1);target[tarindex]|=(pos-Base64);}
  tarindex++;state=0;break;}}if(ch==Pad64){ch=*src++;switch(state){case 0:case 1:
  return(-1);case 2:for(;ch!='\0';ch=*src++)if(!isspace(ch))break;if(ch!=Pad64)
  return(-1);ch=*src++;case 3:for(;ch!='\0';ch=*src++)if(!isspace(ch))return(-1);
  if(target!=0&&target[tarindex]!=0)return(-1);}}else{if(state!=0)return(-1);}
  return(tarindex);}

或者

 #include <stdio.h>
  #include <stdlib.h>
  int main(int a,char**A){FILE*B;typedef unsigned long C;C b[8];if(!(a==7&&(B=
  fopen(1[A],"rb"))))return 1;for(7[b]=0;7[b]<5;7[b]++)b[7[b]]=strtoul(A[2+7[b]],
  0,16-!7[b]*6);5[b]=3[b];while((6[b]=getc(B))!=(C)-1){if(2[b])for(7[b]=0;7[b]<4;
  7[b]++)if(((6[b]>>7[b])^(6[b]>>(7-7[b])))&1)6[b]^=(1<<7[b])^(1<<(7-7[b]));5[b]
  ^=6[b]<<(0[b]-8);for(7[b]=0;7[b]<8;7[b]++)if((5[b]>>(0[b]-1))&1)5[b]=(5[b]<<1)^
  1[b];else 5[b]<<=1;}5[b]&=((((C)1<<(0[b]-1))-1)<<1)|1;if(2[b])for(7[b]=0;7[b]<(
  0[b]>>1);7[b]++)if(((5[b]>>7[b])^(5[b]>>(0[b]-1-7[b])))&1)5[b]^=((C)1<<7[b])^((
  C)1<<(0[b]-1-7[b]));5[b]^=4[b];fclose(B);printf("%0*lX\n",(int)(0[b]+3)>>2,5[b]
  );return 0;}

但是,如果我是您的客户并且看到提供的这种资源,我会开始寻找另一个承包商。


推荐阅读