博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C BIN加密
阅读量:6937 次
发布时间:2019-06-27

本文共 17085 字,大约阅读时间需要 56 分钟。

 

#include 
#include
#include
#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 = 0; char* tmpByte; //printf("cmN_BytesToDWORD %p\n", bytes); for(i=0;i<4;i++) { tmpByte = &bytes[i]; if(tmpByte) { value |= (*tmpByte & 0xFF) <<(8*i); //printf("%x\t ", value); } } return value;}void cmN_DWORDToBytes(char* bytes, DWORD value){ int i; char* tmpbyte; for(i=0;i<4;i++) { tmpbyte = &bytes[i]; *tmpbyte = (BYTE)(value >> (8*i)) & 0xFF; }}bool cmN_GetBitFromDword(DWORD data, BYTE i){ if( (data>>i)&1 ) return 1; else return 0;}DWORD Mix_0(DWORD data){ return ( (cmN_GetBitFromDword(data, 22)<<31) | (cmN_GetBitFromDword(data, 8)<<30) | (cmN_GetBitFromDword(data, 7)<<29) | (cmN_GetBitFromDword(data, 21)<<28) | (cmN_GetBitFromDword(data, 0)<<27) | (cmN_GetBitFromDword(data, 25)<<26) | (cmN_GetBitFromDword(data, 20)<<25) | (cmN_GetBitFromDword(data, 6)<<24) | (cmN_GetBitFromDword(data, 19)<<23) | (cmN_GetBitFromDword(data, 16)<<22) | (cmN_GetBitFromDword(data, 24)<<21) | (cmN_GetBitFromDword(data, 5)<<20) | (cmN_GetBitFromDword(data, 23)<<19) | (cmN_GetBitFromDword(data, 1)<<18) | (cmN_GetBitFromDword(data, 18)<<17) | (cmN_GetBitFromDword(data, 15)<<16) | (cmN_GetBitFromDword(data, 26)<<15) | (cmN_GetBitFromDword(data, 3)<<14) | (cmN_GetBitFromDword(data, 17)<<13) | (cmN_GetBitFromDword(data, 14)<<12) | (cmN_GetBitFromDword(data, 4)<<11) | (cmN_GetBitFromDword(data, 13)<<10) | (cmN_GetBitFromDword(data, 2)<<9) | (cmN_GetBitFromDword(data, 30)<<8) | (cmN_GetBitFromDword(data, 12)<<7) | (cmN_GetBitFromDword(data, 29)<<6) | (cmN_GetBitFromDword(data, 28)<<5) | (cmN_GetBitFromDword(data, 11)<<4) | (cmN_GetBitFromDword(data, 9)<<3) | (cmN_GetBitFromDword(data, 31)<<2) | (cmN_GetBitFromDword(data, 27)<<1) | (cmN_GetBitFromDword(data, 10)<<0) );}DWORD Mix_1(DWORD data){ return ( (cmN_GetBitFromDword(data, 11)<<31) | (cmN_GetBitFromDword(data, 7)<<30) | (cmN_GetBitFromDword(data, 21)<<29) | (cmN_GetBitFromDword(data, 29)<<28) | (cmN_GetBitFromDword(data, 18)<<27) | (cmN_GetBitFromDword(data, 31)<<26) | (cmN_GetBitFromDword(data, 3)<<25) | (cmN_GetBitFromDword(data, 30)<<24) | (cmN_GetBitFromDword(data, 8)<<23) | (cmN_GetBitFromDword(data, 26)<<22) | (cmN_GetBitFromDword(data, 12)<<21) | (cmN_GetBitFromDword(data, 28)<<20) | (cmN_GetBitFromDword(data, 2)<<19) | (cmN_GetBitFromDword(data, 25)<<18) | (cmN_GetBitFromDword(data, 17)<<17) | (cmN_GetBitFromDword(data, 14)<<16) | (cmN_GetBitFromDword(data, 23)<<15) | (cmN_GetBitFromDword(data, 1)<<14) | (cmN_GetBitFromDword(data, 20)<<13) | (cmN_GetBitFromDword(data, 5)<<12) | (cmN_GetBitFromDword(data, 19)<<11) | (cmN_GetBitFromDword(data, 15)<<10) | (cmN_GetBitFromDword(data, 9)<<9) | (cmN_GetBitFromDword(data, 4)<<8) | (cmN_GetBitFromDword(data, 0)<<7) | (cmN_GetBitFromDword(data, 16)<<6) | (cmN_GetBitFromDword(data, 24)<<5) | (cmN_GetBitFromDword(data, 6)<<4) | (cmN_GetBitFromDword(data, 10)<<3) | (cmN_GetBitFromDword(data, 22)<<2) | (cmN_GetBitFromDword(data, 27)<<1) | (cmN_GetBitFromDword(data, 13)<<0) );}DWORD Mix_2(DWORD data){ return ( (cmN_GetBitFromDword(data, 13)<<31) | (cmN_GetBitFromDword(data, 23)<<30) | (cmN_GetBitFromDword(data, 9)<<29) | (cmN_GetBitFromDword(data, 20)<<28) | (cmN_GetBitFromDword(data, 3)<<27) | (cmN_GetBitFromDword(data, 25)<<26) | (cmN_GetBitFromDword(data, 14)<<25) | (cmN_GetBitFromDword(data, 24)<<24) | (cmN_GetBitFromDword(data, 2)<<23) | (cmN_GetBitFromDword(data, 11)<<22) | (cmN_GetBitFromDword(data, 30)<<21) | (cmN_GetBitFromDword(data, 16)<<20) | (cmN_GetBitFromDword(data, 6)<<19) | (cmN_GetBitFromDword(data, 19)<<18) | (cmN_GetBitFromDword(data, 1)<<17) | (cmN_GetBitFromDword(data, 5)<<16) | (cmN_GetBitFromDword(data, 0)<<15) | (cmN_GetBitFromDword(data, 22)<<14) | (cmN_GetBitFromDword(data, 12)<<13) | (cmN_GetBitFromDword(data, 26)<<12) | (cmN_GetBitFromDword(data, 8)<<11) | (cmN_GetBitFromDword(data, 21)<<10) | (cmN_GetBitFromDword(data, 10)<<9) | (cmN_GetBitFromDword(data, 17)<<8) | (cmN_GetBitFromDword(data, 28)<<7) | (cmN_GetBitFromDword(data, 4)<<6) | (cmN_GetBitFromDword(data, 29)<<5) | (cmN_GetBitFromDword(data, 15)<<4) | (cmN_GetBitFromDword(data, 31)<<3) | (cmN_GetBitFromDword(data, 18)<<2) | (cmN_GetBitFromDword(data, 7)<<1) | (cmN_GetBitFromDword(data, 27)<<0) );}DWORD Mix_3(DWORD data){ return ( (cmN_GetBitFromDword(data, 20)<<31) | (cmN_GetBitFromDword(data, 11)<<30) | (cmN_GetBitFromDword(data, 31)<<29) | (cmN_GetBitFromDword(data, 25)<<28) | (cmN_GetBitFromDword(data, 10)<<27) | (cmN_GetBitFromDword(data, 17)<<26) | (cmN_GetBitFromDword(data, 29)<<25) | (cmN_GetBitFromDword(data, 7)<<24) | (cmN_GetBitFromDword(data, 13)<<23) | (cmN_GetBitFromDword(data, 27)<<22) | (cmN_GetBitFromDword(data, 2)<<21) | (cmN_GetBitFromDword(data, 22)<<20) | (cmN_GetBitFromDword(data, 26)<<19) | (cmN_GetBitFromDword(data, 16)<<18) | (cmN_GetBitFromDword(data, 6)<<17) | (cmN_GetBitFromDword(data, 30)<<16) | (cmN_GetBitFromDword(data, 14)<<15) | (cmN_GetBitFromDword(data, 24)<<14) | (cmN_GetBitFromDword(data, 4)<<13) | (cmN_GetBitFromDword(data, 19)<<12) | (cmN_GetBitFromDword(data, 0)<<11) | (cmN_GetBitFromDword(data, 8)<<10) | (cmN_GetBitFromDword(data, 18)<<9) | (cmN_GetBitFromDword(data, 1)<<8) | (cmN_GetBitFromDword(data, 21)<<7) | (cmN_GetBitFromDword(data, 15)<<6) | (cmN_GetBitFromDword(data, 3)<<5) | (cmN_GetBitFromDword(data, 5)<<4) | (cmN_GetBitFromDword(data, 23)<<3) | (cmN_GetBitFromDword(data, 9)<<2) | (cmN_GetBitFromDword(data, 28)<<1) | (cmN_GetBitFromDword(data, 12)<<0) );}DWORD unMix_0(DWORD data){ return ( (cmN_GetBitFromDword(data, 2)<<31) | (cmN_GetBitFromDword(data, 8)<<30) | (cmN_GetBitFromDword(data, 6)<<29) | (cmN_GetBitFromDword(data, 5)<<28) | (cmN_GetBitFromDword(data, 1)<<27) | (cmN_GetBitFromDword(data, 15)<<26) | (cmN_GetBitFromDword(data, 26)<<25) | (cmN_GetBitFromDword(data, 21)<<24) | (cmN_GetBitFromDword(data, 19)<<23) | (cmN_GetBitFromDword(data, 31)<<22) | (cmN_GetBitFromDword(data, 28)<<21) | (cmN_GetBitFromDword(data, 25)<<20) | (cmN_GetBitFromDword(data, 23)<<19) | (cmN_GetBitFromDword(data, 17)<<18) | (cmN_GetBitFromDword(data, 13)<<17) | (cmN_GetBitFromDword(data, 22)<<16) | (cmN_GetBitFromDword(data, 16)<<15) | (cmN_GetBitFromDword(data, 12)<<14) | (cmN_GetBitFromDword(data, 10)<<13) | (cmN_GetBitFromDword(data, 7)<<12) | (cmN_GetBitFromDword(data, 4)<<11) | (cmN_GetBitFromDword(data, 0)<<10) | (cmN_GetBitFromDword(data, 3)<<9) | (cmN_GetBitFromDword(data, 30)<<8) | (cmN_GetBitFromDword(data, 29)<<7) | (cmN_GetBitFromDword(data, 24)<<6) | (cmN_GetBitFromDword(data, 20)<<5) | (cmN_GetBitFromDword(data, 11)<<4) | (cmN_GetBitFromDword(data, 14)<<3) | (cmN_GetBitFromDword(data, 9)<<2) | (cmN_GetBitFromDword(data, 18)<<1) | (cmN_GetBitFromDword(data, 27)<<0) );}DWORD unMix_1(DWORD data){ return ( (cmN_GetBitFromDword(data, 26)<<31) | (cmN_GetBitFromDword(data, 24)<<30) | (cmN_GetBitFromDword(data, 28)<<29) | (cmN_GetBitFromDword(data, 20)<<28) | (cmN_GetBitFromDword(data, 1)<<27) | (cmN_GetBitFromDword(data, 22)<<26) | (cmN_GetBitFromDword(data, 18)<<25) | (cmN_GetBitFromDword(data, 5)<<24) | (cmN_GetBitFromDword(data, 15)<<23) | (cmN_GetBitFromDword(data, 2)<<22) | (cmN_GetBitFromDword(data, 29)<<21) | (cmN_GetBitFromDword(data, 13)<<20) | (cmN_GetBitFromDword(data, 11)<<19) | (cmN_GetBitFromDword(data, 27)<<18) | (cmN_GetBitFromDword(data, 17)<<17) | (cmN_GetBitFromDword(data, 6)<<16) | (cmN_GetBitFromDword(data, 10)<<15) | (cmN_GetBitFromDword(data, 16)<<14) | (cmN_GetBitFromDword(data, 0)<<13) | (cmN_GetBitFromDword(data, 21)<<12) | (cmN_GetBitFromDword(data, 31)<<11) | (cmN_GetBitFromDword(data, 3)<<10) | (cmN_GetBitFromDword(data, 9)<<9) | (cmN_GetBitFromDword(data, 23)<<8) | (cmN_GetBitFromDword(data, 30)<<7) | (cmN_GetBitFromDword(data, 4)<<6) | (cmN_GetBitFromDword(data, 12)<<5) | (cmN_GetBitFromDword(data, 8)<<4) | (cmN_GetBitFromDword(data, 25)<<3) | (cmN_GetBitFromDword(data, 19)<<2) | (cmN_GetBitFromDword(data, 14)<<1) | (cmN_GetBitFromDword(data, 7)<<0) );}DWORD unMix_2(DWORD data){ return ( (cmN_GetBitFromDword(data, 3)<<31) | (cmN_GetBitFromDword(data, 21)<<30) | (cmN_GetBitFromDword(data, 5)<<29) | (cmN_GetBitFromDword(data, 7)<<28) | (cmN_GetBitFromDword(data, 0)<<27) | (cmN_GetBitFromDword(data, 12)<<26) | (cmN_GetBitFromDword(data, 26)<<25) | (cmN_GetBitFromDword(data, 24)<<24) | (cmN_GetBitFromDword(data, 30)<<23) | (cmN_GetBitFromDword(data, 14)<<22) | (cmN_GetBitFromDword(data, 10)<<21) | (cmN_GetBitFromDword(data, 28)<<20) | (cmN_GetBitFromDword(data, 18)<<19) | (cmN_GetBitFromDword(data, 2)<<18) | (cmN_GetBitFromDword(data, 8)<<17) | (cmN_GetBitFromDword(data, 20)<<16) | (cmN_GetBitFromDword(data, 4)<<15) | (cmN_GetBitFromDword(data, 25)<<14) | (cmN_GetBitFromDword(data, 31)<<13) | (cmN_GetBitFromDword(data, 13)<<12) | (cmN_GetBitFromDword(data, 22)<<11) | (cmN_GetBitFromDword(data, 9)<<10) | (cmN_GetBitFromDword(data, 29)<<9) | (cmN_GetBitFromDword(data, 11)<<8) | (cmN_GetBitFromDword(data, 1)<<7) | (cmN_GetBitFromDword(data, 19)<<6) | (cmN_GetBitFromDword(data, 16)<<5) | (cmN_GetBitFromDword(data, 6)<<4) | (cmN_GetBitFromDword(data, 27)<<3) | (cmN_GetBitFromDword(data, 23)<<2) | (cmN_GetBitFromDword(data, 17)<<1) | (cmN_GetBitFromDword(data, 15)<<0) );}DWORD unMix_3(DWORD data){ return ( (cmN_GetBitFromDword(data, 29)<<31) | (cmN_GetBitFromDword(data, 16)<<30) | (cmN_GetBitFromDword(data, 25)<<29) | (cmN_GetBitFromDword(data, 1)<<28) | (cmN_GetBitFromDword(data, 22)<<27) | (cmN_GetBitFromDword(data, 19)<<26) | (cmN_GetBitFromDword(data, 28)<<25) | (cmN_GetBitFromDword(data, 14)<<24) | (cmN_GetBitFromDword(data, 3)<<23) | (cmN_GetBitFromDword(data, 20)<<22) | (cmN_GetBitFromDword(data, 7)<<21) | (cmN_GetBitFromDword(data, 31)<<20) | (cmN_GetBitFromDword(data, 12)<<19) | (cmN_GetBitFromDword(data, 9)<<18) | (cmN_GetBitFromDword(data, 26)<<17) | (cmN_GetBitFromDword(data, 18)<<16) | (cmN_GetBitFromDword(data, 6)<<15) | (cmN_GetBitFromDword(data, 15)<<14) | (cmN_GetBitFromDword(data, 23)<<13) | (cmN_GetBitFromDword(data, 0)<<12) | (cmN_GetBitFromDword(data, 30)<<11) | (cmN_GetBitFromDword(data, 27)<<10) | (cmN_GetBitFromDword(data, 2)<<9) | (cmN_GetBitFromDword(data, 10)<<8) | (cmN_GetBitFromDword(data, 24)<<7) | (cmN_GetBitFromDword(data, 17)<<6) | (cmN_GetBitFromDword(data, 4)<<5) | (cmN_GetBitFromDword(data, 13)<<4) | (cmN_GetBitFromDword(data, 5)<<3) | (cmN_GetBitFromDword(data, 21)<<2) | (cmN_GetBitFromDword(data, 8)<<1) | (cmN_GetBitFromDword(data, 11)<<0) );}void hwEncodeRawDataForFlash(char * pChar, DWORD length, DWORD ref_address){ DWORD tmplength=0; 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>>2) & 0x03; if(type==0) { pre_xor_data = Mix_0(data_add); out_data = pre_xor_data^FLASH_HW_KEY_0; cmN_DWORDToBytes(pChar, out_data); } else if(type==1) { pre_xor_data = Mix_1(data_add); out_data = pre_xor_data^FLASH_HW_KEY_1; cmN_DWORDToBytes(pChar, out_data); } else if(type==2) { pre_xor_data = Mix_2(data_add); out_data = pre_xor_data^FLASH_HW_KEY_2; cmN_DWORDToBytes(pChar, out_data); } else if(type==3) { pre_xor_data = Mix_3(data_add); out_data = pre_xor_data^FLASH_HW_KEY_3; cmN_DWORDToBytes(pChar, out_data); } ref_address += 4; pChar += 4; tmplength += 4; } pChar -= tmplength;}void hwDecodeRawDataForFlash(char * pChar, DWORD length, DWORD ref_address){ DWORD tmplength=0; DWORD in_data, pre_xor_data, out_data; BYTE type; while( tmplength < length) { in_data = cmN_BytesToDWORD(pChar); type = (BYTE)(ref_address>>2) & 0x03; if(type==0) { 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==1) { 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==2) { 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==3) { 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 += 4; pChar += 4; tmplength += 4; } pChar -= tmplength;}#define BUF_SIZE 128main(int argc,char *argv[]){ char buf[BUF_SIZE]; char outFile[64]; FILE *filein = fopen( argv[1], "rb" ); if(filein == NULL) { printf("open %s fail\n", argv[1] ); return 1; } memset(outFile,0,64); sprintf(outFile,"decrypt_%s",argv[1]+2); //printf("--->%s\n",outFile); FILE *fileout=fopen(outFile, "wb" ); if(fileout == NULL) { printf("open outfile fail\n" ); return 1; } while(1) { int ret = fread(buf, 1, BUF_SIZE, filein); if(ret <=0) { break; } hwDecodeRawDataForFlash( &buf[0], BUF_SIZE, 0); fwrite(buf, 1, BUF_SIZE, fileout); } fclose(filein); fclose(fileout); return 0;}

 

转载地址:http://bwmjl.baihongyu.com/

你可能感兴趣的文章
Linux下jdk、Tomcat、MySQL的安装
查看>>
Basic Tutorials of Redis(3) -Hash
查看>>
4个小时实现一个HTML5音乐播放器
查看>>
兔子生兔子问题
查看>>
CSS 公共样式分享
查看>>
生成带内嵌图片的二维码
查看>>
多维数组排序
查看>>
JS 数组
查看>>
Angular2.0学习
查看>>
IDEA里五种目录类型简介(Mark Directory as)
查看>>
你懂不懂我不知道,反正我是晕了
查看>>
4.2 Routing -- Defining Your Routes
查看>>
关于virtualbox虚拟机中使用u盘
查看>>
[洛谷P2044][NOI2012]随机数生成器
查看>>
0053-三数相邻问题
查看>>
npm用法以及更换到淘宝镜像的方法
查看>>
My Spring Boot Samples
查看>>
1834. [ZJOI2010]网络扩容【费用流】
查看>>
quarz时间配置
查看>>
kernel 进阶API
查看>>