zoukankan      html  css  js  c++  java
  • 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 = 0;
        char* tmpByte;
        //printf("cmN_BytesToDWORD %p
    ", bytes);
        for(i=0;i<4;i++)
        {
            tmpByte = &bytes[i];
            if(tmpByte)
            {
                value |= (*tmpByte & 0xFF) <<(8*i);
                //printf("%x	 ", 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
    ", 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        128
    
    main(int argc,char *argv[])
    {
        char buf[BUF_SIZE];
        char outFile[64];
            
        FILE *filein = fopen( argv[1], "rb" );
        if(filein == NULL) {
            printf("open %s fail
    ", argv[1] );
            return 1;    
        }
        memset(outFile,0,64);
        sprintf(outFile,"decrypt_%s",argv[1]+2);
        //printf("--->%s
    ",outFile);
        FILE *fileout=fopen(outFile, "wb" );
        if(fileout == NULL) {
            printf("open outfile fail
    " );
            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;
    
    }
  • 相关阅读:
    react文本溢出hover气泡显示全部文本——JS判断文本溢出
    ecosystem.config
    git删除中间某次提交
    HTML5 新元素
    HTML5存储
    简述LVS(Linux虚拟服务器)
    简述线程池
    网络协议基础
    JVM常用性能检测工具
    线程间的“通信”方法
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/9278472.html
Copyright © 2011-2022 走看看