c - 向客户提供带有未加密 h 文件的加密 c 代码
问题描述
我想知道是否可以向我们的客户提供加密的 c 文件和未加密的 h 文件,以便客户可以根据需要只更改 h 文件。我该怎么做?
提前致谢
艾伦·布卢门斯坦
解决方案
您可以混淆代码:
/* 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;}
但是,如果我是您的客户并且看到提供的这种资源,我会开始寻找另一个承包商。
推荐阅读
- java - JavaFX:如何在没有侦听器的情况下将文本包装在表格单元中?
- c# - 如何访问名称在变量中的类的属性
- node.js - 在 NestJS 上使用带有 Discord API 的 OAuth2 出现问题
- java - 带有泛型的未经检查的转换警告
- php - 查询以从三个表(Categories、Sub_Categories、Sub_Categories_three)中获取数据并在视图中显示
- json - 图片未显示在 vuetify 页面中
- windows - 检测是否通过应用程序插入 USB
- telegram-bot - 为什么电报机器人无法识别 url 而主题标签“#”位于消息的第一个?
- javascript - 打开下拉菜单时如何在正确的位置反转箭头图标?Javascript
- python - 如何在熊猫中包含带有多索引过滤器的条件?