条件限制,用非智能手机发的,因而无法图文并貌,请大家包涵。
一、加密文件大体结构:
    1、只加密文件内容时。偏移14-15h是对其后一直到文件头结束处也就是加密数据开始处的校验值。文件头中文件名后至文件头结束处是八字节的salt和5字节的未知区域(功能暂不详),加密数据后紧跟固定的结束字符串c4 3d 7b 00 40 07 00。
    2、头和内容均加密时:偏移14-15h是salt2,尾部还出现一次。紧跟的是加密的文件头(头中尾部是salt1和5字节的未知区域)和加密的文件内容(压缩后再进行aes加密),最后就是salt2和经过aes加密的固定结束字符串。注:生成salt的函数调用了2次。

    二、简述salt算法:
     1、由SystemTime得到FileTime;
        2、分别对FileTime的两个DWORD进行hash_process;
     3、hash_final后得到的digest的最前面的两个DWORD就是salt。
三、加密过程:
    1、先将salt接在unicode形式的密码后再用hash_final生成aesinit、aeskey、10轮round key。
   2、压缩好的文件内容分组长为每一个分组128bit,开始加密前先与前一个分组xor生成一个state参与aes加密,第一个分组与aesinit进行xor。
    四、隐患:
    由于salt是随机产生,因而aeskey和round key也是随机的,文件加密结果就是随机的。这个变量的使用给我们提供了利用空间。插一句,假如由加密后数据逆推得到aeskey但由于是经过hash得到,这是不可逆的,所以不可能知道密码。唯一可行就是让其加密过程中自己将密码保存到salt处最好用可逆向的加密算法处理一下,这不会有任何影响,只是让它多了层含义。
   以上是我的一点肤浅的认识,望批评指正!
 天易love
 2009-10-2