某短视频APP数据提取在电子取证中的应用
2020-07-20周锋,谢波,廖赟
周 锋,谢 波,廖 赟
(南京拓界信息技术有限公司,江苏 南京 210014)
近年来,网络技术的进步极大地促进了短视频类应用的发展。据统计,2019年国内短视频独立用户规模达6.4亿,刷视频已成为许多人必不可少的生活娱乐方式。如此庞大的用户群体及活跃度使其附加的社交属性被无限放大。但一项针对用户使用习惯的研究表明,使用者均不同程度地表示不希望现实中的好友被自动关联到短视频平台上[1],这使得应用平台的交际圈有很强的独立性。从取证角度来说,随着短视频类APP用户的不断增多,应用中存储的社交信息也变得越来越重要,在某些案件中,此类应用内甚至存在侦破案件的直接证据[2]。所以,如何取得该类应用的使用数据是目前手机取证关注的重点问题。
1 应用数据包分析
Android设备使用Android安装包(AndroidPackage,APK)文件来安装应用程序。程序被安装到Android设备上后,都会运行在一个独立、安全的沙箱中,每个程序运行所产生的数据也存储于各自的文件夹中,互不干扰。
1.1 数据包获取
数据获取是数据分析的前提,可以用安卓调试桥(Android Debug Bridge,ADB)工具获取应用数据包。
文章提到的视频软件应用数据,其备份命令为“adb backup -f xxx.ab(文件存放位置)com.ss.android.xxx.aweme(应用程序包名)”,得到后缀名为.ab的备份文件。.ab文件解压后的databases和shared_prefs文件夹下分别存放着数据库文件和可扩展标记语言(Extensible Markup Language,XML)用户配置文件。
1.2 本地数据分析
短视频APP内与人物关系网相关的数据主要有个人信息、好友、粉丝、聊天记录以及发布和看过的视频等,有的存储在本地,有的存储在云服务器,需要先做一个判断。经测试,在网络断开的状态下,打开该APP仍能看到好友名录以及好友聊天记录,但看不到粉丝信息,由此判定好友及聊天信息存储在本地数据库中,而粉丝信息存储在云端,需要联网才能获得。分析数据包可发现,个人信息、手机号码、位置、聊天记录、关注的好友以及发布作品等均可拿到明文数据,其中,个人信息、手机号码及位置信息路径为.shared_prefs,聊天记录、关注的好友存放路径为.databases,发布的作品则保存于.cache目录下。
LoginSharePreferences.xml文件内保存着用户登录的手机号及登录时间信息。ss_location.xml文件内保存着用户登录时的位置信息,包括具体区域和经纬度信息。xxxxx_im_db为数据库文件,可以用SQLite数据库查看工具打开,里面存放着用户与好友的聊天记录。在该数据库文件中,sender字段为发送方UID,content字段为具体聊天内容。
所关注好友的信息存放在db_im_xx中,同样也是数据库文件,包含了用户身份证明(User Identification,UID)、昵称、用户个性签名等重要信息。同时,shared_prefs文件夹中存在名为imei的xml文件,记录着Andriod设备的国际移动设备识别码(International Mobile Equipment Identity,IMEI),可有效提升取证数据的可靠性。
2 云数据获取
2.1 网络请求URL
用户在查询粉丝数据时程序会自动向服务器发送一个获取粉丝数据的统一资源定位符(Uniform Resource Locator,URL)请求,服务器根据请求返回用户需要的信息[3]。此时,可以用Fiddler抓包工具以网络代理的方式获取到关于粉丝数据完整Get请求的URL链接,该URL中包含了user_id,APP版本号、每页获取粉丝数量、手机硬件、时间戳等信息。根据URL请求规则,要实现数据返还,还需要获得程序的cookie信息以及名为X-Gorgon的签名信息,其中,cookie信息可以由Fiddler抓包工具明文获得[4]。
2.2 签名信息
为保证数据安全,防止用户信息泄露,大多数应用向服务器发送URL请求时会采用签名验证机制,分析发现该应用的签名信息为X-Gorgen字符串,如图1所示。
使用jad x反编译工具打开安装程序的A PK,搜索“X-Gorgon”字符串查找签名信息的生成过程,由图1可知X-Gorgon值是由“a2”+“str2”+“str3”+“str4”计算生成的sb参数,再调用com.ss.sys.ces.a类中的Leviathan方法计算出来的。其中,“a2”为URL的消息摘要算法第5版(Message Digest Algorithm,MD5)值;“str2”为X-SS-STUB字段值(在程序map容器中预定义),由于获取粉丝的数据包中没有X-SSSTUB字段,所以设置为32位全0;“str3”为cookie的MD5值;“str4”为session_id的MD5值,可从数据包shared_prefs文件夹中的cookie数据文件ttnetCookieStore.xml中提取得到,拼接这4个MD5值可得sb参数。
Leviathan方法的实现逻辑存放在名为libcms.so的动态链接库中,仔细审视源代码Public static native byte[ ]Leviathan(int i, byte[ ] bAAr),发现Leviathan方法存在两个参数,一是当前时间戳,二是k.a方法转换sb字符串后的byte数组。所以,使用Leviathan方法对当前时间戳及拼接后的sb参数进行计算,返回byte[]数组转String后即是签名信息,可以使用unidbg工具库模拟加载libcms.so调用Leviathan方法计算出X-Gorgen签名信息。
2.3 获取粉丝数据
经过上面的研究,已经得到获取粉丝数据的所有条件,只需要写一个简单的粉丝数据获取程序即可,图2为数据获取程序的流程。
定义返回的数据自动生成一个.Json文件,单个请求默认返回20条粉丝数据,如果粉丝数量很多,就需要循环获取,此时将上一个.Json文件中获取的min_time参数替换到程序URL请求中即可获得下一页数据,如此循环,直到返回数据中的has_more参数值为false,即可获得全部粉丝数据。
图2 数据获取程序流程
3 结语
文章针对电子取证中软件的多元化,在传统手机数据获取方法的基础上,通过分析某视频APP的安装包及其应用数据,发现可使用APP逆向的方法获取到手机短视频应用包括个人信息、好友、粉丝云数据在内的重要信息。在一定程度上弥补了新形态的互联网下传统通信应用中案件相关信息缺失的缺陷,丰富了目标手机人物社交构建模型,为传统电子取证提供了新的思路。