C BIN加密
#include <stdio.h>
#include <string.h>
#include <stdlib.h> #ifndef DWORD
#define DWORD unsigned int
#endif #ifndef BYTE
#define BYTE unsigned char
#endif #ifndef bool
#define bool unsigned int
#endif #define FLASH_HW_KEY 0x08825252
#define FLASH_HW_KEY_0 ((FLASH_HW_KEY <<(32-11)) |(FLASH_HW_KEY>>11))
#define FLASH_HW_KEY_1 ((FLASH_HW_KEY <<(32-20)) |(FLASH_HW_KEY>>20))
#define FLASH_HW_KEY_2 ((FLASH_HW_KEY <<(32-26)) |(FLASH_HW_KEY>>26))
#define FLASH_HW_KEY_3 ((FLASH_HW_KEY <<(32-7)) |(FLASH_HW_KEY>>7)) DWORD cmN_BytesToDWORD(char* bytes)
{
int i;
DWORD value;
value = ;
char* tmpByte;
//printf("cmN_BytesToDWORD %p\n", bytes);
for(i=;i<;i++)
{
tmpByte = &bytes[i];
if(tmpByte)
{
value |= (*tmpByte & 0xFF) <<(*i);
//printf("%x\t ", value);
}
}
return value;
} void cmN_DWORDToBytes(char* bytes, DWORD value)
{
int i;
char* tmpbyte; for(i=;i<;i++)
{
tmpbyte = &bytes[i];
*tmpbyte = (BYTE)(value >> (*i)) & 0xFF;
}
} bool cmN_GetBitFromDword(DWORD data, BYTE i)
{
if( (data>>i)& )
return ;
else
return ;
} DWORD Mix_0(DWORD data)
{
return ( (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<) );
} DWORD Mix_1(DWORD data)
{
return ( (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<) );
} DWORD Mix_2(DWORD data)
{
return ( (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<) );
} DWORD Mix_3(DWORD data)
{
return ( (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<) );
} DWORD unMix_0(DWORD data)
{
return ( (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<) );
}
DWORD unMix_1(DWORD data)
{
return ( (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<) );
} DWORD unMix_2(DWORD data)
{
return ( (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<) );
}
DWORD unMix_3(DWORD data)
{
return ( (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<)
| (cmN_GetBitFromDword(data, )<<) );
} void hwEncodeRawDataForFlash(char * pChar, DWORD length, DWORD ref_address)
{
DWORD tmplength=;
DWORD in_data, data_add, pre_xor_data, out_data;
BYTE type; //to handle for each DWORD
while( tmplength < length)
{
//printf("tmplength %d\n", tmplength);
in_data = cmN_BytesToDWORD(pChar);
data_add = in_data + FLASH_HW_KEY;
type = (BYTE)(ref_address>>) & 0x03; if(type==)
{
pre_xor_data = Mix_0(data_add);
out_data = pre_xor_data^FLASH_HW_KEY_0;
cmN_DWORDToBytes(pChar, out_data); }
else if(type==)
{
pre_xor_data = Mix_1(data_add);
out_data = pre_xor_data^FLASH_HW_KEY_1;
cmN_DWORDToBytes(pChar, out_data);
}
else if(type==)
{
pre_xor_data = Mix_2(data_add);
out_data = pre_xor_data^FLASH_HW_KEY_2;
cmN_DWORDToBytes(pChar, out_data);
}
else if(type==)
{
pre_xor_data = Mix_3(data_add);
out_data = pre_xor_data^FLASH_HW_KEY_3;
cmN_DWORDToBytes(pChar, out_data);
} ref_address += ;
pChar += ;
tmplength += ;
} pChar -= tmplength;
} void hwDecodeRawDataForFlash(char * pChar, DWORD length, DWORD ref_address)
{
DWORD tmplength=;
DWORD in_data, pre_xor_data, out_data;
BYTE type; while( tmplength < length)
{
in_data = cmN_BytesToDWORD(pChar);
type = (BYTE)(ref_address>>) & 0x03;
if(type==)
{
in_data = in_data^FLASH_HW_KEY_0;
pre_xor_data = unMix_0(in_data);
out_data = pre_xor_data - FLASH_HW_KEY;
cmN_DWORDToBytes(pChar, out_data); }
else if(type==)
{
in_data = in_data^FLASH_HW_KEY_1;
pre_xor_data = unMix_1(in_data);
out_data = pre_xor_data - FLASH_HW_KEY;
cmN_DWORDToBytes(pChar, out_data);
}
else if(type==)
{
in_data = in_data^FLASH_HW_KEY_2;
pre_xor_data = unMix_2(in_data);
out_data = pre_xor_data - FLASH_HW_KEY;
cmN_DWORDToBytes(pChar, out_data);
}
else if(type==)
{
in_data = in_data^FLASH_HW_KEY_3;
pre_xor_data = unMix_3(in_data);
out_data = pre_xor_data - FLASH_HW_KEY;
cmN_DWORDToBytes(pChar, out_data);
} ref_address += ;
pChar += ;
tmplength += ;
} pChar -= tmplength;
} #define BUF_SIZE 128 main(int argc,char *argv[])
{
char buf[BUF_SIZE];
char outFile[]; FILE *filein = fopen( argv[], "rb" );
if(filein == NULL) {
printf("open %s fail\n", argv[] );
return ;
}
memset(outFile,,);
sprintf(outFile,"decrypt_%s",argv[]+);
//printf("--->%s\n",outFile);
FILE *fileout=fopen(outFile, "wb" );
if(fileout == NULL) {
printf("open outfile fail\n" );
return ;
} while()
{
int ret = fread(buf, , BUF_SIZE, filein);
if(ret <=)
{
break;
}
hwDecodeRawDataForFlash( &buf[], BUF_SIZE, );
fwrite(buf, , BUF_SIZE, fileout);
}
fclose(filein);
fclose(fileout);
return ; }
C BIN加密的更多相关文章
- AM335X的应用程序自启动流程以及U盘更新应用程序记录
在AM335X的SD卡更新系统学习记录中最后更新完系统后,以后运行应用程序都会从EMMC中取出Linux系统运行.接着介绍Linux系统是怎么自己启动我们编写的应用程序的. 1.在AM335X的SD卡 ...
- Encrypting bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- Encrypted bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- PHP的学习--RSA加密解密
PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了. 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了. 密码没加 ...
- 如何使用DotfuscatorPro_4.9对软件进行加密
DotfuscatorPro_4.9可以防止你的.NET软件被反编译,可以在一定程度上防止你的软件被反编译.现在很多软件都有被反编译的现象,虽然不能做到百分百的防范,但是你至少可以先做些技术上的处理, ...
- node.js下使用RSA加密事例(windows)
1.安装openss 直接下载window下的安装包 http://houjixin.blog.163.com/blog/static/3562841020144143494875/ 以我发博文现在的 ...
- php rsa加密解密实例
1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin ...
- MySQL的SSL加密连接与性能开销
本文转载自:http://www.innomysql.net/article/23959.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Contents [hide] 1 前言 ...
- windows下OpenSSL加密证书安装步骤与使用方法
OpenSSL加密证书一般用于签名认证,含私钥和公钥.在Linux系统中,OpenSSL一般是已经安装好了,可以直接使用.而在Windows系统中,是需要安装使用的. 最近在使用支付平台时,用到了Op ...
随机推荐
- 20145329 《网络对抗技术》PC平台逆向破解
shellcode注入 实践是在非常简单的一个预设条件下完成的: (1)关闭堆栈保护 (2)关闭堆栈执行保护 (3)关闭地址随机化 (4)在x32环境下 (5)在Linux实践环境 shellcode ...
- sqlite中的时间
插入时间的sql语句 ','-61') 时间格式'2014-11-17T19:37:32' 年月日和时分秒之间多了一个字母T,保存到数据库的时候,会自动给时间加8个小时. 保存的结果为2014-11- ...
- 【P4语言学习】Parser解析器
参考文章:王垠:谈谈Parser 簡單介紹 P4 語言(一)- Parser 什么是Parser 传统的parser,一般出现在编译器和编译原理课程中,援引<谈谈Parser>的定义: 首 ...
- mis权限系统
在mis中开发,主要目的是有一个统一的权限管理(即r360.right表),以及一个统一的系统和界面供后台配置管理 1.数据库准备工作: mis后台涉及表: right表是权限操作表,role_rig ...
- vue 脚手架 (三,配置文件config, build目录)
本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 上篇文章咱们介绍了vue web ...
- fib博弈
链接:https://www.nowcoder.com/acm/contest/77/G来源:牛客网 幼儿园开学了,为了让小盆友们能尽可能的多的享受假期.校长大人决定让小盆友分批到校,至于每批学生来 ...
- SGU 131. Hardwood floor 状压dp 难度:2
131. Hardwood floor time limit per test: 0.25 sec. memory limit per test: 4096 KB The banquet hall o ...
- itembase协同过滤的详细介绍
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:https://www.cnblogs.com/by-dream/p/9016289.html 前言 通常我们在网购的时候会遇到这 ...
- 201621123005《Java程序设计》第六次学习总结
201621123005<java程序设计>第六周学习总结 1.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对 ...
- C# #if, #else和#endif预处理指令
#if 使您可以开始条件指令,测试一个或多个符号以查看它们是否计算为 true.如果它们的计算结果确实为true,则编译器将计算位于 #if 与最近的 #endif 指令之间的所有代码.例如, ...