2012年5月28日月曜日

開発メモ⑥セキュリティ~APK内の画像ファイルを見えなくする

APKファイルは解凍されると内部で使用されている画像ファイルが丸見えになってしまします。
そこでバイナリ操作で内部リソースを暗号化する方法が考えられます。


 //ファイルをバイト配列に
    public static byte[] fileToByte(String fileName) 
        throws Exception {
        int size;
        byte[] byteAry=new byte[1024];
        FileInputStream fin=null;
        ByteArrayOutputStream out=null;
        try {
            fin=new FileInputStream(fileName);
            out=new ByteArrayOutputStream();
            while (true) {
                size=fin.read(byteAry);
                if (size<=0) break;
                out.write(byteAry,0,size);
            }
            fin.close();
            out.close();
            return out.toByteArray();
        } catch (Exception e) {
            try {
                if (fin!=null) fin.close();
                if (out!=null) out.close();
            } catch (Exception ee) {
            }
            throw e;
        }
    }

しかし、処理能力を考えるとファイル全体の暗号化は望ましくありません
たとえば画像ファイルならヘッダ情報を隠ぺいするだけでセルフハッキングを防止できます。
JPEGの例だと、予めヘッダの先頭を3バイトを消して、アプリ内部で修正ができます。
byte ary[] = { 0xFF , 0xD8 , 0xFF };//JPEGファイルの先頭3バイト