金山隐私保险箱电影怎么隐藏sd卡文件

金山隐私保险箱:安全随行 隐私随心(5)
图三十三 添加成功
在程序锁界面,用户可打开或取消锁定应用程序。
图三十四 程序锁操作
金山隐私保险箱的相关设置可以进一步的保证我们的隐私安全,包括是否启用密码、解锁方式、更改密码、设置安全问题、设置伪密码。
图三十五 设置
1、解锁方式
金山隐私保险箱提供数字解锁和九宫点阵解锁两种方式,更改解锁方式后需要重新进行密码及安全问题设置。
图三十六 更改解锁方式
图三十七 九宫点阵解锁
2、设置伪密码
尽管对隐私内容进行了加密,但不能小看了人类的好奇心与八卦之魂,有时候亲朋好友会找你要密码,你是给还是不给?金山隐私保险箱推出了伪装空间,为我们解决了这一苦恼。只需要预先设置一个伪密码,到时候将伪密码告诉他们就可以了。
图三十八 登录伪装空间
通过伪密码登陆金山隐私保险箱后只能进行伪装空间,你可以在伪装空间中设置加密一些不那么私密的内容让别人查看。
图三十九 伪装空间设置
金山隐私保险箱1.2beta2总结:
金山隐私保险箱为我们的手机隐私带来了全新的安全方式,除了可以加密常规的图片、视频文件,金山隐私保险箱还可以对其他文件及文件夹进行加密;同时可为我们加密保存账户信息,并检测我们的密码是否足够安全;此外金山隐私保险箱还为用户提供应用程序加密服务,我的程序我做主。除了以上功能外,金山隐私保险箱更是支持双SD卡机型,并且为用户贴心地提供了伪装空间,不怕别人索要密码!
金山隐私保险箱1.2beta2:
相关报道:
新闻热线:010-
责任编辑:张厅
名企动态: |
标志着Windows迈出个性化计算的第一步……
本站特聘法律顾问:于国富律师
Copyright (C) 1997-金山隐私保险箱不能查找SD卡文件_百度知道
金山隐私保险箱不能查找SD卡文件
我的手机是华为C8331,之前用金山哗碃糕度蕹道革权宫护隐私保险箱可以找到SD卡文件,现在重装手机后,金山隐私保险箱不能查找到外置SD卡文件,手机内置的SD卡文件就可以找到,请问该怎么解决?
提问者采纳
你好哥们建议你安装最新的360手机卫士,它里边的隐私保险箱比较好用。
提问者评价
确是不错,谢谢
其他类似问题
您好,您是否备份了保险箱里面的文件呢?有的话选择恢复即可。如果没有备份就无法找回了如仍有疑问,欢迎您向金山企业知道提问如仍有疑问,欢迎您哗碃糕度蕹道革权宫护向金山网络企业平台提问
已回答127183
响应时间&10分钟
sd卡的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁你好,金山隐私保险箱里的文件找不到了,原因是我用sd卡女佣清理了sd卡,就这样,了,怎么办?_百度知道
你好,金山隐私保险箱里的文件找不到了,原因是我用sd卡女佣清理了sd卡,就这样,了,怎么办?
提问者采纳
如果没有备份就无法找回了如仍有疑问?有的话选择恢复即可,您是否备份了保险箱里面的文件呢您好
你好,我没有备份,但是我想知道,你说的无法找回了,是什么意思,我的图片和视频等东西是存在sd卡上的,怎么就没有了呢?我并没有删除这些东西啊。
您之前提到已经清理了sd卡导致文件找不到
你的意思是说,我的文件,图片,视频等资料经过加密以后,就不存在原来的位置了?全部被移到别的地方了?然后我清理了,就找不到了?是不是这样的意思呀?
不论移动到哪里,只要清理删除了,就是没有了。如果文件比较重要,建议优先备份以免丢失
提问者评价
已回答127183
响应时间&10分钟
其他类似问题
按默认排序
其他1条回答
有备份 直接备份 没有就把SD卡拿去专业人士恢复 你必须看着 小心密码泄漏
您可能关注的推广
sd卡的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁后使用快捷导航没有帐号?
安币&&4616
2148 盾4616 币帖子
0.前言& & 前段时间支付宝钱包手势密码被破解,很多朋友回复说“幸亏他们还加了个程序锁”,那么现实中的程序锁、保险箱之类的软件真的有他们描述的这么强悍吗?& & 另外,为了弥补被和谐的文章,就再发一篇存货出来吧,希望大家不要嫌弃。
1.背景& & 信息化时代的高速发展,同时也孕育了更多的网络攻击。网银被盗、隐私信息泄露等无疑成为了广大网民最为关注的问题。几年前,“艳照门”事件的曝光,更是引发了互联网的一阵恐慌。&&如今,移动互联网的迅速普及,手机相机的像素也越来越高,我们可以很方便的使用手机拍摄自己感兴趣的东西并上传到朋友圈、微博等。但是,这同时也引入了另外一个问题,拍了这么多东西,总有自己的一些隐私数据是不想对外公开的。于是,各大互联网厂商纷纷推出了能在移动设备上加密照片、音乐、视频等文件的应用程序。但是,这些应用真的能有效的保护好用户的隐私数据吗?他们的实现原理又是什么呢?带着这些疑问,今天我们就来分析下“金山隐私保险箱”的实现原理。
2.测试环境红米TD版百度云ROM 正式版V6金山隐私保险箱1.3Beta2
3.程序分析& & 金山隐私保险箱安装完之后,加密一张自己拍的照片。此时,程序会将加密好的文件保存到sd卡的.ksbox目录下,如图1所示。
07:41 上传
& && && && && && && && && &&&图1
&&将.ksbox目录导出到本地,使用sqlite expert工具打开db.sqlite文件,表结构入图2所示。
07:42 上传
& && && && && && && && && &&&图2
&&根据表结构我们大致可以知道,原始文件名、文件大小、被加密后的文件名等信息。知道了这些基本信息,我们接下来使用APK IDE解包程序,发现金山隐私保险箱自己实现了一个ImageInputStream的类,该派生自InputStream,具体的实现文件为com/ijinshan/mPrivacy/c/j.smali,如图3所示。
07:43 上传
& && && && && && && && && &&&图3
使用APK IDE搜索Lcom/ijinshan/mPrivacy/c/j,结果如图4所示。
07:44 上传
& && && && && && && && && &&&图4
定位到第一个new-instance的地方,代码如下所示,只截取我们所关注的部分。
代码:# 解码一个input stream到Bitmap
.method private static a(Ljava/lang/SI)Landroid/graphics/B
& & .locals 11
& & .prologue
& & const/4 v3, 0x1
& & const/4 v9, -0x1
& & const/high16 v6, 0x3f800000
& & const/4 v8, 0x0
& & .line 197
& & .line 200
& & :try_start_0
&&# 新建一个自定义的InputStream对象
& & new-instance v0, Lcom/ijinshan/mPrivacy/c/j;
&&# 使用文件初始化InputStream
& & invoke-direct {v0, p0}, Lcom/ijinshan/mPrivacy/c/j;-&&init&(Ljava/lang/S)V
& & .line 201
& & invoke-virtual {v0}, Lcom/ijinshan/mPrivacy/c/j;-&available()I
& & move-result v1
& & if-ne v1, v9, :cond_0
& & move-object v0, v8
& & .line 264
& & :goto_0
& & return-object v0
& & .line 205
& & :cond_0
&&# 新建一个BitmapFactory对象
& & new-instance v1, Landroid/graphics/BitmapFactory$O
& & invoke-direct {v1}, Landroid/graphics/BitmapFactory$O-&&init&()V
& & .line 208
& & const/4 v2, 0x1
& & iput-boolean v2, v1, Landroid/graphics/BitmapFactory$O-&inJustDecodeBounds:Z
& & .line 209
& & const/4 v2, 0x0
&&# 调用BitmapFactory的decodeStream方法,解码input stream到Bitmap
invoke-static {v0, v2, v1}, Landroid/graphics/BitmapF-&decodeStream(Ljava/io/InputSLandroid/graphics/RLandroid/graphics/BitmapFactory$O)Landroid/graphics/B复制代码调用decodeStream函数之后,就会进入我们派生的ImageInputStream类中。该类重写了read方法,主要用来自定义解码算法。我们来看下主要代码:
代码:.method public final read([BII)I
& & .locals 7
& & .prologue
& & const/4 v6, 0x0
& & const/16 v5, 0x400
& & .line 61
& & iget-object v0, p0, Lcom/ijinshan/mPrivacy/c/j;-&a:Ljava/io/FileInputS
&&# p2(byteOffset),p3(byteCount)=0x10000
& & invoke-virtual {v0, p1, p2, p3}, Ljava/io/FileInputS-&read([BII)I
& & move-result v0
& & .line 63
& & const/4 v1, -0x1
&&# 判断返回值是否为-1,-1即读到文件末尾
& & if-ne v0, v1, :cond_0
& & .line 103
& & :goto_0
& & return v0
& & .line 70
& & :cond_0
&&
&&# f保存了已读的字节数
& & iget-wide v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&f:J
& & const-wide/16 v3, 0x400
& & cmp-long v1, v1, v3
&&# 判断已读的字节数是否大于或等于0x400字节
& & if-gtz v1, :cond_5
&&# 第一次读的话,执行如下代码
& & .line 73
&&# e是个bool值,判断是否已经解密了前面的0x400字节
& & iget-boolean v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&e:Z
& & if-nez v1, :cond_1
&&# 第一次读取,未解密,执行如下代码
& & .line 75
& & iget-object v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&c:Lcom/ijinshan/mPrivacy/c/g;
&&# b是个String类型的变量,其中保存了加密后文件的路径,例如/storage/sdcard0/.ksbox/6b2c357d&&
& & iget-object v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&b:Ljava/lang/S
&&# 调用g;-&b方法,解密前面0x400字节
& & invoke-static {v1}, Lcom/ijinshan/mPrivacy/c/g;-&b(Ljava/lang/S)[B
& & move-result-object v1
&&# 将解密出来的字节数组保存到d变量中
& & iput-object v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&d:[B
& & .line 76
& & iget-object v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&d:[B
&&# 判断字节数组是否为空
& & if-eqz v1, :cond_1
& & .line 77
& & const/4 v1, 0x1
&&# 返回不为空,那么设置变量e为true,即解密成功
& & iput-boolean v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&e:Z
& & .line 80
& & :cond_1
&&# v0寄存器保存了实际读取到的字节数,p3是想要读取的字节数,即0x10000
& & if-ge v0, p3, :cond_3
& & move v1, v0
& & .line 82
& & :goto_1
&&# v2 = byteOffset + 实际读到的字节数
& & add-int v2, p2, v1
&&# 如果v2大于0x400,就跳到cond_4
& & if-gt v2, v5, :cond_4
& & .line 84
& & iget-object v2, p0, Lcom/ijinshan/mPrivacy/c/j;-&d:[B
& & if-eqz v2, :cond_2
& & .line 85
&&# 将前面解密的数据赋给v2寄存器
& & iget-object v2, p0, Lcom/ijinshan/mPrivacy/c/j;-&d:[B
&&# v2拷贝到p1,p2为srcOffset,v6是desOffset,v1为拷贝大小
& & invoke-static {v2, p2, p1, v6, v1}, Ljava/lang/S-&arraycopy(Ljava/lang/OILjava/lang/OII)V
& & .line 100
& & :cond_2
& & :goto_2
&&# 已经读取的字节数
& & iget-wide v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&f:J
&&# v0为实际读到的字节数,转成long,保存到v3
& & int-to-long v3, v0
& & add-long/2addr v1, v3
&&# 本次实际读到的字节数 + 以前已经读取的字节数,保存到f变量
& & iput-wide v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&f:J
& & goto :goto_0
& & :cond_3
& & move v1, p3
& & .line 80
& & goto :goto_1
& & .line 89
& & :cond_4
& & if-ge p2, v5, :cond_2
& & .line 91
& & iget-object v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&d:[B
& & if-eqz v1, :cond_2
& & .line 92
& & iget-object v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&d:[B
& & sub-int v2, v5, p2
&&# 后面的数据不用解密,直接拷贝即可
& & invoke-static {v1, p2, p1, v6, v2}, Ljava/lang/S-&arraycopy(Ljava/lang/OILjava/lang/OII)V
& & goto :goto_2
& & .line 98
&&# 如果已读的字节数大于0x400,就跳到这里执行
& & :cond_5
& & const/4 v1, 0x0
&&# 清空d变量
& & iput-object v1, p0, Lcom/ijinshan/mPrivacy/c/j;-&d:[B
& & goto :goto_2
.end method复制代码上面这段smali代码中比较关键的一个调用是invoke-static {v1}, Lcom/ijinshan/mPrivacy/c/g;-&b(Ljava/lang/S)[B,我们跟进去看一下。
代码:# 解密文件
# p0: 加密后文件的路径,例如/storage/sdcard0/.ksbox/6b2c357d&&
.method public static b(Ljava/lang/S)[B
& & .locals 2
& & .prologue
& & const/4 v1, 0x0
& & .line 456
& & :try_start_0
&&# 判断是否是我们的加密文件,判断文件开头特征等等
& & invoke-static {p0}, Lcom/ijinshan/mPrivacy/c/g;-&h(Ljava/lang/S)[B
& & move-result-object v0
& & .line 457
& & if-nez v0, :cond_0
& & move-object v0, v1
& & .line 472
& & :goto_0
& & return-object v0
& & .line 461
& & :cond_0
&&# 调用b(Ljava/lang/SI)[B,读取_e文件的内容
& & invoke-static {p0}, Lcom/ijinshan/mPrivacy/c/g;-&i(Ljava/lang/S)[B
&&# v0即为_e文件的内容
& & move-result-object v0
& & .line 462
& & if-eqz v0, :cond_1
& & .line 464
&&# 调用解密函数,解密v0
& & invoke-static {v0}, Lcom/ijinshan/mPrivacy/c/g;-&a([B)[B
& & :try_end_0
& & .catch Ljava/io/IOE {:try_start_0 .. :try_end_0} :catch_0
& & move-result-object v0
& & goto :goto_0
& & .line 467
& & :catch_0
& & move-exception v0
& & invoke-virtual {v0}, Ljava/io/IOE-&printStackTrace()V
& & :cond_1
& & move-object v0, v1
& & .line 472
& & goto :goto_0
.end method复制代码这里最为关键的是invoke-static {v0}, Lcom/ijinshan/mPrivacy/c/g;-&a([B)[B这个调用,a([B)[B这个函数是专门用来解密byte数组的,代码如下所示。
代码:# 解密算法
# buffer[i] = buffer[i] ^ 0x6b;
.method public static a([B)[B
& & .locals 3
& & .prologue
& & .line 264
& & array-length v0, p0
&&# 判断传入参数的buffer是不是大于0
& & .line 266
& & const/4 v1, 0x0
&&# 判断v1是否大于buffer的大小
& & :goto_0
& & if-ge v1, v0, :cond_0
&&# 取一个字节保存到v2
& & .line 267
& & aget-byte v2, p0, v1
&&# 与0x6b异或
& & xor-int/lit8 v2, v2, 0x6b
& & int-to-byte v2, v2
&&# 把异或得到的值写回原来的buffer中
& & aput-byte v2, p0, v1
&&# v1 + 1
& & .line 266
& & add-int/lit8 v1, v1, 0x1
&&# 继续循环
& & goto :goto_0
& & .line 270
& & :cond_0
& & return-object p0
.end method复制代码程序分析到这里,我们大致知道了金山隐私保险箱的解密步骤:
1.&&从InputStream类中派生自己的类,调用BitmapFactory的decodeStream函数解码文件输入流;
2.&&重写InputStream类的read函数,用来实现自己的解密算法;
3.&&解密的时候判断如果是前面最开始的0x400字节,那么读取filename_e文件,每个字节异或0x6B,如果是大于0x400字节,那么直接读取filename文件;
4.&&按照上面的步骤解密,最后输出的文件即为原始文件。
4.编写解密程序
既然知道了金山隐私保险箱的解密算法,那么自己实现一个解密程序也就很简单了,大致代码如下所示。
代码:#include &stdafx.h&
#include &Windows.h&
// szName - 加密文件的文件名
// szOriginName - 原始文件名
BOOL DecodeStream(WCHAR *szName, WCHAR *szOriginName)
{
&&BOOL bRet = FALSE;
&&
&&if (!szName || !szOriginName)
&&{
& & return bR
&&}
&&HANDLE hFile = CreateFile(szName,
& & FILE_ALL_ACCESS,
& & FILE_SHARE_READ | FILE_SHARE_WRITE,
& & NULL,
& & OPEN_EXISTING,
& & FILE_ATTRIBUTE_NORMAL,
& & NULL);
&&if (hFile == INVALID_HANDLE_VALUE)
&&{
& & return bR
&&}
&&DWORD dwHigh = 0;
&&DWORD dwSize = GetFileSize(hFile, &dwHigh);
&&if (dwSize & 0x400)
&&{
& & CloseHandle(hFile);
& & return bR
&&}
&&
&&PBYTE pBuffer = (PBYTE)malloc(dwSize);
&&if (pBuffer == NULL)
&&{
& & CloseHandle(hFile);
& & return bR
&&}
&&
&&memset(pBuffer, 0, dwSize);
&&HANDLE hSaveFile = CreateFile(szOriginName,
& & FILE_ALL_ACCESS,
& & FILE_SHARE_READ | FILE_SHARE_WRITE,
& & NULL,
& & CREATE_ALWAYS,
& & FILE_ATTRIBUTE_NORMAL,
& & NULL);
&&if (hSaveFile == INVALID_HANDLE_VALUE)
&&{
& & CloseHandle(hFile);
& & free(pBuffer);
& & return bR
&&}
&&WCHAR szPath[MAX_PATH] = {0};
&&wsprintf(szPath, L&%s%s&, szName, L&_e&);
&&HANDLE hFile_e = CreateFile(szPath,
& & FILE_ALL_ACCESS,
& & FILE_SHARE_READ | FILE_SHARE_WRITE,
& & NULL,
& & OPEN_EXISTING,
& & FILE_ATTRIBUTE_NORMAL,
& & NULL);
&&if (hFile_e == INVALID_HANDLE_VALUE)
&&{
& & CloseHandle(hFile);
& & CloseHandle(hSaveFile);
& & free(pBuffer);
& & return bR
&&}
&&DWORD dwRet = 0;
&&bRet = ReadFile(hFile_e, pBuffer, 0x400, &dwRet, NULL);
&&if (!bRet)
&&{
& & CloseHandle(hFile);
& & CloseHandle(hSaveFile);
& & CloseHandle(hFile_e);
& & free(pBuffer);
& & return bR
&&}
&&SetFilePointer(hFile, 0x400, NULL, FILE_BEGIN);
&&bRet = ReadFile(hFile, pBuffer+0x400, dwSize-0x400, &dwRet, NULL);
&&if (!bRet)
&&{
& & CloseHandle(hFile);
& & CloseHandle(hSaveFile);
& & CloseHandle(hFile_e);
& & free(pBuffer);
& & return bR
&&}
&&for (int i = 0; i & 0x400; i++)
&&{
& & pBuffer[i] = pBuffer[i] ^ 0x6b;
&&}
&&
&&WriteFile(hSaveFile, pBuffer, dwSize, &dwRet, NULL);
&&CloseHandle(hFile);
&&CloseHandle(hSaveFile);
&&CloseHandle(hFile_e);
&&free(pBuffer);
&&return bR
}
int _tmain(int argc, _TCHAR* argv[])
{
&&DecodeStream(L&C:\\Users\\Administrator\\Desktop\\98fca88&,
& & L&C:\\Users\\Administrator\\Desktop\\1.jpg&);
&&return 0;
}复制代码执行完如上代码之后,图片被解密出来,并且能正常打开。至此,金山隐私保险箱就被我们轻易的攻破了。如图5所示:
07:50 上传
& && && && && && && && && && && &图5
&&分析完金山隐私保险箱之后,我后来又去看了下360隐私保险箱和腾讯手机管家的隐私保险箱,大致的加解密流程都差不多,都只加解密文件开头的0x400字节,只是各自的加密算法不同罢了,但是回过头来想想,既然它们都能把文件还原回去,也就是说这个过程一定是可逆的。
&&经过上面的分析,目前移动端的隐私保护软件基本上也就只是个心里安慰罢了。在日常生活中,我们还是要自珍自爱,尽量不要把私密的文件保存在移动设备上,也不要去下载来历不明的软件、外挂等。
(353.62 KB, 下载次数: 64)
07:55 上传
点击文件名下载附件
安币&&6699
王者护卫, 积分 8116, 距离下一级还需 1884 积分
285 盾6699 币帖子
安币&&4616
2148 盾4616 币帖子
其实想想就知道了……完整的复杂加密消耗的资源太大了……现在的图片视频动不动几个G,要加密解密的的内存CPU都是个巨额数字,透明加密也不现实,所以加密前几个字节还是折中的办法……
&主要问题是,密码其实已经是一个古老的技术了,更多的不应是密码,而是通过别的性质和形式来加入,G3手机的一个解锁方式就是一个非常好的方式。&
安币&&36576
16876 盾36576 币帖子
火狐 发表于
其实想想就知道了……完整的复杂加密消耗的资源太大了……现在的图片视频动不动几个G,要加密解密的的内存C ...
主要问题是,密码其实已经是一个古老的技术了,更多的不应是密码,而是通过别的性质和形式来加入,G3手机的一个解锁方式就是一个非常好的方式。
安币&&4616
2148 盾4616 币帖子
这个是加密算法简单了,就是一个异或,改成aes等算法,每次进入文件保险柜的时候需要输入密码就能解决了
参加【那些年我们看过的电视】活动,获得的奖励
捍卫权益,全民行动,揭露360恶意行为活动勋章
产品体验师
百度安全产品体验师专属勋章
有了熊孩子勋章,就表示你是百度粉丝团的一员哦!
论坛推荐 /1
多款引擎个性化组合,给你带来最合适的安全防护体验;
更多个性化皮肤选择,为你留住更多不期而遇的色彩。
&2014 Baidu |

我要回帖

更多关于 360隐私保险箱电脑版 的文章

 

随机推荐