#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. cookie注入原理详解(一)

    那我们还是围绕以下几个问题来看看cookie注入: 1.什么是cookie注入? 2.为什么要cookie注入? 3.怎样cookie注入? 1.什么是cookie注入? ♦cookie注入的原理是: ...

  2. 在pom.xml中使用distributionManagement将项目打包上传到nexus私服

    本文介绍 如何在pom.xml中使用distributionManagement将项目打包上传到nexus私服 1.pom.xml文件添加distributionManagement节点 <!- ...

  3. Using SQLXML Bulk Load in the .NET Environment

    http://msdn.microsoft.com/en-us/library/ms171878.aspx 1.首先创建一张表 CREATE TABLE Ord ( OrderID ,) PRIMAR ...

  4. codeforces 98 div2 C.History 水题

    C. History time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  5. android 官方demo地址

    android官方demo地址都放在了github上:https://github.com/googlesamples

  6. C# winform实现右下角弹出窗口结果的方法

    using System.Runtime.InteropServices; [DllImport("user32")] private static extern bool Ani ...

  7. C语言对表达式的求值顺序不是明确规定的

    讨论区看到的 WA来自那些递归下降求解的代码. 第一种情况,使用|| 和 &&: 例如s为所给串 int getval() { switch(s[c_s++]) { case 'p': ...

  8. New Concept English Two 3

    $课文5 无错号之虞 47. Mr.James Scott has a garage in Silbury and now he has just bought another garage in P ...

  9. Robot Framework中使用HttpLibrary教程and中文支持

    Robot Framework中使用and转参数时,默认不支持中文模式,如图场景: 会出现这种错误 FAIL : UnicodeDecodeError: 'ascii' codec can't dec ...

  10. GPU编程自学7 —— 常量内存与事件

    深度学习的兴起,使得多线程以及GPU编程逐渐成为算法工程师无法规避的问题.这里主要记录自己的GPU自学历程. 目录 <GPU编程自学1 -- 引言> <GPU编程自学2 -- CUD ...