#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加密的更多相关文章

  1. AM335X的应用程序自启动流程以及U盘更新应用程序记录

    在AM335X的SD卡更新系统学习记录中最后更新完系统后,以后运行应用程序都会从EMMC中取出Linux系统运行.接着介绍Linux系统是怎么自己启动我们编写的应用程序的. 1.在AM335X的SD卡 ...

  2. Encrypting bootloader (程序BIN文件加密及在线升级)

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...

  3. Encrypted bootloader (程序BIN文件加密及在线升级)

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...

  4. PHP的学习--RSA加密解密

    PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了. 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了. 密码没加 ...

  5. 如何使用DotfuscatorPro_4.9对软件进行加密

    DotfuscatorPro_4.9可以防止你的.NET软件被反编译,可以在一定程度上防止你的软件被反编译.现在很多软件都有被反编译的现象,虽然不能做到百分百的防范,但是你至少可以先做些技术上的处理, ...

  6. node.js下使用RSA加密事例(windows)

    1.安装openss 直接下载window下的安装包 http://houjixin.blog.163.com/blog/static/3562841020144143494875/ 以我发博文现在的 ...

  7. php rsa加密解密实例

    1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin ...

  8. MySQL的SSL加密连接与性能开销

    本文转载自:http://www.innomysql.net/article/23959.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Contents [hide] 1 前言 ...

  9. windows下OpenSSL加密证书安装步骤与使用方法

    OpenSSL加密证书一般用于签名认证,含私钥和公钥.在Linux系统中,OpenSSL一般是已经安装好了,可以直接使用.而在Windows系统中,是需要安装使用的. 最近在使用支付平台时,用到了Op ...

随机推荐

  1. openwrt生成的交叉编译器在哪里

    答:在staging_dir目录下,示例如下: 编译一个arm64架构所生成的编译器在staging_dir/toolchain-aarch64_generic_gcc-7.4.0_musl/bin/ ...

  2. BZOj 墨墨的等式(转化为最短路)题解

    题意:中文题意不解释... 思路:这道题居然可以转化为最短路orz,要等式有非负整数解,我们可以转化一下:每个ai不限数量,问你能用ai数组拼出多少个Bmin~Bmax范围内的数,有点像完全背包的感觉 ...

  3. BloomFilter–大规模数据处理利器

    转自: http://www.dbafree.net/?p=36 BloomFilter–大规模数据处理利器 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法. ...

  4. Google V8 引擎 原理详解

    V8 引擎概览 V8 引擎简介 Google V8 引擎使用 C++ 代码编写,实现了 ECMAScript 规范的第五版,可以运行在所有的主流 操作系统中,甚至可以运行在移动终端 ( 基于 ARM ...

  5. linux中find与rm实现查找并删除目录或文件

    linux 下用find命令查找文件,rm命令删除文件. 删除指定目录下指定文件find 要查找的目录名 -name .svn |xargs rm -rf 删除指定名称的文件或文件夹: find -t ...

  6. Splay树学习

    首先给出一论文讲的很好: http://www.docin.com/p-63165342.html http://www.docin.com/p-62465596.html 然后给出模板胡浩大神的模板 ...

  7. shell 判断字符串长度是否为0

    test.sh #!/bin/bash echo "enter the string:" read filename if test -z $filename ; then ech ...

  8. 百度地图API 显示区域边界及地名定位

    百度地图API 显示区域边界及地名定位 这个定位一共用了两个方法组成 一个是定位绘制区域边界线,另一个是地名定位 原理: 当用户输入省.市.县.区这种大地名时,我们要定位用户输入的这个位置,并显示轮廓 ...

  9. 使用Jenkins来实现内部的持续集成流程(上)

    前言 Jenkins和TeamCity都是大杀器,用于搭建内部持续集成环境都是妥妥的.本篇主要介绍Jenkins的安装,下篇将介绍相关配置和使用. 目录 安装和配置 第一次启动 插件安装,第一次进入时 ...

  10. Sublime 中文标题乱码

    ---title:Sublime 中文标题乱码--- #markdown语法(非Github Flavored) #解决办法: 在用户设置里添加一项,强制不根据 dpi 缩放dpi_scale: 1. ...