private IEnumerable <History> GetHistroies(string databaseFile) { var histroies = new List <History>(); if (string.IsNullOrEmpty(databaseFile)) { return(histroies); } string copyfiles = SqliteRecoveryHelper.DataRecovery(databaseFile, @"chalib\Android_QQBrowse_V5.1.0.780\database.charactor", "history"); var context = new SqliteContext(copyfiles); try { var objList = context.FindByName("history"); if (objList != null) { foreach (dynamic source in objList) { History history = new History(); history.DataState = DynamicConvert.ToEnumByValue(source.XLY_DataType, EnumDataState.Normal); history.Name = DynamicConvert.ToSafeString(source.NAME); history.Url = DynamicConvert.ToSafeString(source.URL); history.VisitTime = DynamicConvert.ToSafeDateTime(source.DATETIME); histroies.Add(history); } } } catch { } return(histroies); }
private string GetGroupsInfo(SqliteContext context, IEnumerable <dynamic> ids) { if (ids.IsInvalid()) { return(string.Empty); } var table = context.FindByName("groups_tb"); var list = table.Where(d => ids.Any(i => i == d.xlyid)); if (list.IsValid()) { return(string.Join(",", list.Select(d => DynamicConvert.ToSafeString(d.title)))); } return(string.Empty); }
private IEnumerable <BookMark> GetBookmarks(string default_userFile) { var bookmarks = new List <BookMark>(); if (string.IsNullOrEmpty(default_userFile)) { return(bookmarks); } var copyFiles = SqliteRecoveryHelper.DataRecovery(default_userFile, @"chalib\Andorid_QQBrowse_V5.1.0.780\default_user.charactor", "mtt_bookmarks"); var context = new SqliteContext(copyFiles); try { var objList = context.FindByName("mtt_bookmarks"); if (objList != null) { foreach (dynamic source in objList) { string url = DynamicConvert.ToSafeString(source.url); if (!url.IsNullOrEmpty()) { var mark = new BookMark(); mark.DataState = DynamicConvert.ToEnumByValue(source.XLY_DataType, EnumDataState.Normal); mark.Title = DynamicConvert.ToSafeString(source.title); mark.Url = url; mark.IsDeleted = (int)DynamicConvert.ToSafeInt(source.deleted) == 0 ? "正常" : "已删除"; mark.CreatedTime = DynamicConvert.ToSafeDateTime(source.created); bookmarks.Add(mark); } } } } catch { } return(bookmarks); }
private IEnumerable <BookMark> GetBookmarks(string browser2File) { //data/data/com.android.browser/databases/browser2.db var bookmarks = new List <BookMark>(); if (string.IsNullOrEmpty(browser2File)) { return(bookmarks); } string copyfiles = SqliteRecoveryHelper.DataRecovery(browser2File, @"chalib\Android_LocalBrowse\browser2.charactor", "bookmarks"); var context = new SqliteContext(copyfiles); try { var objList = context.FindByName("bookmarks"); if (objList != null) { foreach (dynamic source in objList) { string url = DynamicConvert.ToSafeString(source.url); if (!url.IsNullOrEmpty()) { var book = new BookMark(); book.DataState = DynamicConvert.ToEnumByValue(source.XLY_DataType, EnumDataState.Normal); book.Title = DynamicConvert.ToSafeString(source.title); book.Url = url; book.CreatedTime = DynamicConvert.ToSafeDateTime(source.created); book.IsDeleted = DynamicConvert.ToSafeInt(source.deleted) == 0 ? "正常" : "已删除"; bookmarks.Add(book); } } } } catch { } return(bookmarks); }
private List <Calendar> GetCalendars(string CalendarDbFile) { List <Calendar> list = new List <Calendar>(); if (!FileHelper.IsValid(CalendarDbFile)) { return(list); } string newfile = SqliteRecoveryHelper.DataRecovery(CalendarDbFile, "", "Events"); using (var dataContext = new SqliteContext(newfile)) { var tempEvents = dataContext.FindByName("Events"); tempEvents.ForEach(s => { try { var calendar = new Calendar(); calendar.DataState = DynamicConvert.ToEnumByValue(s.XLY_DataType, EnumDataState.Normal); calendar.Title = DynamicConvert.ToSafeString(s.title); calendar.EventLocation = DynamicConvert.ToSafeString(s.eventLocation); calendar.Description = DynamicConvert.ToSafeString(s.description); calendar.DtStart = DynamicConvert.ToSafeDateTime(s.dtstart); calendar.DtEnd = DynamicConvert.ToSafeDateTime(s.dtend); calendar.Duration = DynamicConvert.ToSafeString(s.duration); list.Add(calendar); } catch (Exception ex) { Framework.Log4NetService.LoggerManagerSingle.Instance.Error("提取日历信息出错!", ex); } }); } return(list); }
private IEnumerable <WebCache> GetWebCaches(string webviewCache_x5File) { var qqcWebCache = new List <WebCache>(); if (string.IsNullOrEmpty(webviewCache_x5File)) { return(qqcWebCache); } var copyFiles = SqliteRecoveryHelper.DataRecovery(webviewCache_x5File, @"chalib\Andorid_QQBrowse_V5.1.0.780\webviewCache_x5.db.charactor", "cache"); var context = new SqliteContext(copyFiles); try { var objList = context.FindByName("cache"); if (objList != null) { foreach (dynamic source in objList) { var cache = new WebCache(); cache.DataState = DynamicConvert.ToEnumByValue(source.XLY_DataType, EnumDataState.Normal); cache.Url = DynamicConvert.ToSafeString(source.url); cache.ExpresTime = DynamicConvert.ToSafeDateTime(source.expires); cache.MimeType = DynamicConvert.ToSafeString(source.mimetype); cache.Encoding = DynamicConvert.ToSafeString(source.encoding); cache.HttpSatus = DynamicConvert.ToSafeInt(source.httpstatus); cache.Contentlength = DynamicConvert.ToSafeString(source.contentlength); qqcWebCache.Add(cache); } } } catch { } return(qqcWebCache); }
private IEnumerable <WebCookie> GetWebCookies(string webview_x5File) { var localWebCookie = new List <WebCookie>(); if (string.IsNullOrEmpty(webview_x5File)) { return(localWebCookie); } var copyFiles = SqliteRecoveryHelper.DataRecovery(webview_x5File, @"chalib\Andorid_QQBrowse_V5.1.0.780\webview_x5.db.charactor", "cookies"); var context = new SqliteContext(copyFiles); try { var objList = context.FindByName("cookies"); if (objList != null) { foreach (dynamic source in objList) { var cookie = new WebCookie(); cookie.DataState = DynamicConvert.ToEnumByValue(source.XLY_DataType, EnumDataState.Normal); cookie.Name = DynamicConvert.ToSafeString(source.name); cookie.Value = DynamicConvert.ToSafeString(source.value); cookie.Domain = DynamicConvert.ToSafeString(source.domain); cookie.ExpresTime = DynamicConvert.ToSafeDateTime(source.expires); localWebCookie.Add(cookie); } } } catch { } return(localWebCookie); }
private List <Call> GetFromDefault() { SqliteContext context = null; try { var items = new List <Call>(); var file = ContactDbPath; if (!FileHelper.IsValid(file)) { return(new List <Call>()); } var newFile = SqliteRecoveryHelper.DataRecovery(file, @"chalib\com.android.providers.contacts\contacts2.db.charactor", "calls", true); // 处理新文件 context = new SqliteContext(newFile); var calls = context.FindByName("calls"); if (calls.IsInvalid()) { return(items); } TryParseCallDeafult(items, calls); return(items); } catch { return(new List <Call>()); } finally { if (null != context) { context.Dispose(); } } }
private IEnumerable <WebSitPassword> GetSitePwds(string webviewFile) { //data/data/com.android.browser/databases/webview.db var localSitePwd = new List <WebSitPassword>(); if (string.IsNullOrEmpty(webviewFile)) { return(localSitePwd); } string copyfiles = SqliteRecoveryHelper.DataRecovery(webviewFile, @"chalib\Android_LocalBrowse\webview.charactor", "password"); var context = new SqliteContext(copyfiles); try { var objList = context.FindByName("password"); if (objList != null) { foreach (dynamic source in objList) { var pwd = new WebSitPassword(); pwd.DataState = DynamicConvert.ToEnumByValue(source.XLY_DataType, EnumDataState.Normal); pwd.Host = DynamicConvert.ToSafeString(source.host); pwd.UserName = DynamicConvert.ToSafeString(source.username); pwd.Password = DynamicConvert.ToSafeString(source.password); localSitePwd.Add(pwd); } } } catch { } return(localSitePwd); }
private IEnumerable <WebCookie> GetWebCookies(string webviewCookiesChromiumFile) { //data/data/com.android.browser/databases/webviewCookiesChromium.db var localWebCookie = new List <WebCookie>(); if (string.IsNullOrEmpty(webviewCookiesChromiumFile)) { return(localWebCookie); } string copyfiles = SqliteRecoveryHelper.DataRecovery(webviewCookiesChromiumFile, @"chalib\Android_LocalBrowse\webviewCookiesChromium.charactor", "cookies"); var context = new SqliteContext(copyfiles); try { var objList = context.FindByName("cookies"); if (objList != null) { foreach (dynamic source in objList) { var cookie = new WebCookie(); cookie.DataState = DynamicConvert.ToEnumByValue(source.XLY_DataType, EnumDataState.Normal); cookie.Name = DynamicConvert.ToSafeString(source.name); cookie.Value = DynamicConvert.ToSafeString(source.value); cookie.Domain = DynamicConvert.ToSafeString(source.host_key); cookie.ExpresTime = DynamicConvert.ToSafeDateTime(source.expires_utc); localWebCookie.Add(cookie); } } } catch { } return(localWebCookie); }
private IEnumerable <History> GetHistroies(string browser2File) { //data/data/com.android.browser/databases/browser2.db var histroies = new List <History>(); if (string.IsNullOrEmpty(browser2File)) { return(histroies); } string copyfiles = SqliteRecoveryHelper.DataRecovery(browser2File, @"chalib\Android_LocalBrowse\browser2.charactor", "history"); var sqliteContext = new SqliteContext(copyfiles); try { var objList = sqliteContext.FindByName("history"); if (objList != null) { foreach (dynamic source in objList) { var history = new History(); history.DataState = DynamicConvert.ToEnumByValue(source.XLY_DataType, EnumDataState.Normal); history.Name = DynamicConvert.ToSafeString(source.title); history.Url = DynamicConvert.ToSafeString(source.url); history.VisitTime = DynamicConvert.ToSafeDateTime(source.date); history.Visits = DynamicConvert.ToSafeString(source.visits); histroies.Add(history); } } } catch { } return(histroies); }
/// <summary> /// 解析数据 /// </summary> /// <param name="dataSource"></param> public void BuildData(MMSDataSource dataSource) { if (!FileHelper.IsValid(MainDbPath)) { return; } SqliteContext mainContext = null; string attendDirPath = MediaDomainPath; try { var rMainDbFile = SqliteRecoveryHelper.DataRecovery(MainDbPath, @"chalib\IOS_Sms\sms.db.charactor", "message,handle,attachment,chat,chat_message_join,chat_handle_join,message_attachment_join", true); mainContext = new SqliteContext(rMainDbFile); var messageSource = mainContext.Find(new SQLiteString("SELECT * FROM MESSAGE WHERE CACHE_HAS_ATTACHMENTS = 1 and ROWID not null")); var allContact = mainContext.FindByName("HANDLE"); foreach (var message in messageSource) { var sb = new StringBuilder( "select distinct atta.[filename],atta.[mime_type],atta.[created_date] from MESSAGE_ATTACHMENT_JOIN mes "); sb.Append("left join attachment atta on mes.attachment_id = atta.[ROWID] "); sb.AppendFormat("where mes.[message_id] = {0} and atta.filename not null", DynamicConvert.ToSafeString(message.ROWID)); var contact = allContact.First(cct => DynamicConvert.ToSafeInt(cct.ROWID) == DynamicConvert.ToSafeInt(message.handle_id)); var mms = new MMS(); mms.SenderName = DynamicConvert.ToSafeString(contact.uncanonicalized_id); mms.SendState = DynamicConvert.ToSafeInt(message.is_from_me) == 1 ? EnumSendState.Send : EnumSendState.Receive; mms.Date = DynamicConvert.ToSafeDateTime(message.date); mms.ReadDate = DynamicConvert.ToSafeDateTime(message.date_read); mms.Content = DynamicConvert.ToSafeString(message.text).TrimStart('?') + Environment.NewLine; // 获取当前消息的所有附件; var attaSource = mainContext.Find(new SQLiteString(sb.ToString())); foreach (var atta in attaSource) { if (FragmentHelper.IsValidFragment(atta)) { continue; } string attPath = DynamicConvert.ToSafeString(atta.filename).TrimStart('~').TrimStart('/').Replace("/", @"\"); mms.Content += string.Format("{0}{1}", Path.Combine(attendDirPath, attPath), Environment.NewLine); } mms.Content = FragmentHelper.RemoveNullityDataNew(mms.Content.Trim()); // 验证内容是否为空 if (FragmentHelper.IsEmptyString(mms.Content)) { continue; } dataSource.Items.Add(mms); } } finally { mainContext?.Dispose(); mainContext = null; } }
private void BuildData(TreeDataSource datasource, string dbfilePath, string mmailFilePath) { var nfile = SqliteRecoveryHelper.DataRecovery(mmailFilePath, @"\chalib\Andriod_163mail\163mmail.charactor", "Account"); var context = new SqliteContext(nfile); //获取163账户。 var accountObject = context.FindByName("Account"); IEnumerable <EmailAccount> acccounts = this.GetEmailAccounts(accountObject); //获取163邮件账户对应的所有邮件。 foreach (var account in acccounts) { var sendTree = new TreeNode(); sendTree.Text = "发件箱"; sendTree.Type = typeof(EmailInfo); sendTree.Items = new DataItems <EmailInfo>(dbfilePath); var receiveTree = new TreeNode(); receiveTree.Text = "收件箱"; receiveTree.Type = typeof(EmailInfo); receiveTree.Items = new DataItems <EmailInfo>(dbfilePath); var draftsTree = new TreeNode(); draftsTree.Text = "草稿箱"; draftsTree.Type = typeof(EmailInfo); draftsTree.Items = new DataItems <EmailInfo>(dbfilePath); var deleteTree = new TreeNode(); deleteTree.Text = "删除邮件"; deleteTree.Type = typeof(EmailInfo); deleteTree.Items = new DataItems <EmailInfo>(dbfilePath); var accountTree = new TreeNode(); accountTree.Type = typeof(EmailAccount); accountTree.Items = new DataItems <EmailAccount>(dbfilePath); accountTree.Text = account.Nick + "<" + account.EmailAddress + ">"; accountTree.DataState = account.DataState; accountTree.TreeNodes.Add(sendTree); accountTree.TreeNodes.Add(receiveTree); accountTree.TreeNodes.Add(draftsTree); accountTree.TreeNodes.Add(deleteTree); accountTree.Items.Add(account); //读取账号对应邮件内容。 var tname = "Mail_" + account.Id; nfile = SqliteRecoveryHelper.DataRecovery(mmailFilePath, @"\chalib\Andriod_163mail\mmail.charactor", tname); context = new SqliteContext(nfile); var emailContentObj = context.FindByName(tname); foreach (var source in emailContentObj) { var email = new EmailInfo(); email.Receiver = JsonArrayFormatDisplay(DynamicConvert.ToSafeString(source.mailTo)); EmailUserInfo userInfo = JsonFormatDisplay(DynamicConvert.ToSafeString(source.mailFrom)); email.Sender = userInfo.Name + "<" + userInfo.MailAddress + ">"; email.Subject = DynamicConvert.ToSafeString(source.subject); email.TextContent = DynamicConvert.ToSafeString(source.textContent); email.StartDate = DynamicConvert.ToSafeDateTime(source.sendDate); email.RecvDataTime = DynamicConvert.ToSafeDateTime(source.recvDate); email.DataState = DynamicConvert.ToEnumByValue <EnumDataState>(source.XLY_DataType, EnumDataState.Normal); string tempStatus = DynamicConvert.ToSafeString(source.mailboxKey); if (tempStatus == "订阅" || tempStatus == "INBOX") { receiveTree.Items.Add(email); } else if (tempStatus == "已删除") { deleteTree.Items.Add(email); } else if (tempStatus == "已发送") { sendTree.Items.Add(email); } else { receiveTree.Items.Add(email); } } datasource.TreeNodes.Add(accountTree); } }
private void BuildData(TreeDataSource datasource, string dbfilePath, string databasesPath, string user_infoFilePath) { var doc = new XmlDocument(); string[] allUserInfoLines = File.ReadAllLines(user_infoFilePath, Encoding.UTF8); var userContent = allUserInfoLines.ToList(); var xmlContent = new StringBuilder(); foreach (var content in userContent) { xmlContent.Append(content); } doc.LoadXml(xmlContent.ToString()); XmlNodeList userInfoNodeList = doc.SelectNodes("map//int[@value='1']"); if (userInfoNodeList == null || userInfoNodeList.Count == 0) { return; } var accountsDbNames = new List <string>(); foreach (XmlElement n in userInfoNodeList) { string userNameResource = n.Attributes["name"].Value; if (userNameResource.Contains("newmailnotification")) { var qqNumber = userNameResource.Substring("newmailnotification".Length); accountsDbNames.Add(qqNumber); } } foreach (var currDbName in accountsDbNames) { var sendTree = new TreeNode(); sendTree.Text = "发件箱"; sendTree.Type = typeof(EmailInfo); sendTree.Items = new DataItems <EmailInfo>(dbfilePath); var receiveTree = new TreeNode(); receiveTree.Text = "收件箱"; receiveTree.Type = typeof(EmailInfo); receiveTree.Items = new DataItems <EmailInfo>(dbfilePath); var draftsTree = new TreeNode(); draftsTree.Text = "草稿箱"; draftsTree.Type = typeof(EmailInfo); draftsTree.Items = new DataItems <EmailInfo>(dbfilePath); var deleteTree = new TreeNode(); deleteTree.Text = "删除邮件"; deleteTree.Type = typeof(EmailInfo); deleteTree.Items = new DataItems <EmailInfo>(dbfilePath); var accountTree = new TreeNode(); accountTree.Type = typeof(EmailAccount); accountTree.Items = new DataItems <EmailAccount>(dbfilePath); accountTree.Text = currDbName + "@qq.com"; accountTree.TreeNodes.Add(sendTree); accountTree.TreeNodes.Add(receiveTree); accountTree.TreeNodes.Add(draftsTree); accountTree.TreeNodes.Add(deleteTree); string dbName = "QMDatabase" + currDbName; var account = new EmailAccount(); account.Nick = currDbName; account.EmailAddress = accountTree.Text; accountTree.Items.Add(account); var file = Path.Combine(databasesPath, dbName); var nfile = SqliteRecoveryHelper.DataRecovery(file, @"\\chalib\Andriod_Tencent.mail_V2.0.4\QMDatabase1684333193.charactor", "mail"); var context = new SqliteContext(nfile); var qqEmailObject = context.FindByName("mail"); foreach (var source in qqEmailObject) { var email = new EmailInfo(); email.Receiver = FormatQqEmailAccountDispaly(DynamicConvert.ToSafeString(source.receiverforsearch)); email.Sender = FormatQqEmailAccountDispaly(DynamicConvert.ToSafeString(source.senderforsearch)); email.Subject = DynamicConvert.ToSafeString(source.subject); email.TextContent = DynamicConvert.ToSafeString(source.abstractcontent); email.StartDate = DynamicConvert.ToSafeDateTime(source.date); email.RecvDataTime = DynamicConvert.ToSafeDateTime(source.date); email.DataState = DynamicConvert.ToEnumByValue <EnumDataState>(source.XLY_DataType, EnumDataState.Normal); switch (DynamicConvert.ToSafeString(source.folderid)) { case "3": sendTree.Items.Add(email); break; case "4": draftsTree.Items.Add(email); break; case "5": deleteTree.Items.Add(email); break; default: receiveTree.Items.Add(email); break; } } datasource.TreeNodes.Add(accountTree); } }
private void BuildData(MMSDataSource ds, string databasesFilePath) { var nfile = SqliteRecoveryHelper.DataRecovery(databasesFilePath, "", "canonical_addresses,pdu,part"); using (var sqliteContext = new SqliteContext(nfile)) { MMS item = null; // 获取所有彩信信息; List <dynamic> itemsMMS = sqliteContext.FindByName("pdu").ToList(); List <dynamic> itemsAddr = sqliteContext.FindByName("canonical_addresses").ToList(); List <dynamic> itemsPart = sqliteContext.Find(new SQLiteString("select * from part where ct not in ('application/smil')")).ToList(); foreach (var o in itemsMMS) { try { item = new MMS(); item.DataState = DynamicConvert.ToEnumByValue <EnumDataState>(o.XLY_DataType, EnumDataState.Normal); item.SendState = DynamicConvert.ToSafeInt(o.msg_box) == 1 ? EnumSendState.Receive : EnumSendState.Send; item.Date = DynamicConvert.ToSafeDateTime(o.date); // 获取彩信的扩展; var resultAddr = itemsAddr.Find(addr => DynamicConvert.ToSafeInt(addr.xly_id) == DynamicConvert.ToSafeInt(o.thread_id)); if (resultAddr == null) { continue; } item.SenderName = DataParseHelper.NumberToStu(DynamicConvert.ToSafeString(resultAddr.address)); // 内容扩展 var resultPart = itemsPart.FindAll(part => DynamicConvert.ToSafeInt(part.mid) == DynamicConvert.ToSafeInt(o.xly_id)); // 这段方法虽然看起来不爽,但是别删!有个别手机数据结构不同!这里主要兼容; wangxi 2014-7-14 17:14:05 if (string.IsNullOrEmpty(item.SenderName) && resultPart.Count != 0) { var num = itemsAddr.Find(addr => DynamicConvert.ToSafeInt(resultPart.First().xly_id) == DynamicConvert.ToSafeInt(addr.xly_id)); item.SenderName = DynamicConvert.ToSafeString(num.address); item.SenderName = DataParseHelper.NumberToStu(item.SenderName); } if (resultPart.Count == 0) { item.Content = DynamicConvert.ToSafeString(o.ct_l); item.Type = EnumColumnType.URL; } else { if (resultPart.Count == 1) { if (DynamicConvert.ToSafeString(resultPart.First().xly_data) != "") { item.Content = DynamicConvert.ToSafeString(resultPart.First().xly_data).TrimStart('/').Replace("/", @"\"); } else { item.Content = DynamicConvert.ToSafeString(resultPart.First().text); } } if (resultPart.Count > 1) { // 获取所有附加消息; var allMsg = resultPart.FindAll(part => DynamicConvert.ToSafeString(part.ct).Equals("text/plain")); var allPart = resultPart.FindAll(part => DynamicConvert.ToSafeString(part.text) == string.Empty); string message = string.Empty; foreach (var mess in allMsg) { message += string.Format("{0}{1}", mess.text, Environment.NewLine); } string parts = string.Empty; foreach (var part in allPart) { if (!string.IsNullOrEmpty(DynamicConvert.ToSafeString(part.xly_data))) { string npath = DynamicConvert.ToSafeString(part.xly_data); parts += string.Format("{0}{1}", npath, Environment.NewLine); } } item.Content = parts + message; } } item.Content = item.Content.Trim(); ds.Items.Add(item); } catch { } } } }
/// <summary> /// 解析数据 /// </summary> /// <param name="dataSource"></param> public void BuildData(SmsDataSource dataSource) { if (!FileHelper.IsValid(MainDbPath)) { return; } SqliteContext mainContext = null; string attendDirPath = MediaDomainPath; try { var rMainDbFile = SqliteRecoveryHelper.DataRecovery(MainDbPath, @"chalib\IOS_Sms\sms.db.charactor", "message,handle,attachment,chat,chat_message_join,chat_handle_join,message_attachment_join", true); mainContext = new SqliteContext(rMainDbFile); var handleDynamicList = mainContext.FindByName("handle"); var chathandlejoinDynamicList = mainContext.Find(new SQLiteString("SELECT chat_id,handle_id FROM chat_handle_join WHERE chat_id NOTNULL")).ToList(); var chatmessagejoinDynamicList = mainContext.Find(new SQLiteString("SELECT chat_id,message_id FROM chat_message_join WHERE chat_id NOTNULL")); var messageAttachmentJoinDynamicList = mainContext.Find(new SQLiteString("SELECT message_id,attachment_id FROM message_attachment_join WHERE message_id NOTNULL")).ToList(); var attachmentDynamicList = mainContext.FindByName("attachment"); var dateStr = ""; mainContext.UsingSafeConnection(new SQLiteString("select * from message order by date desc"), r => { dynamic smsObj; while (r.Read()) { smsObj = r.ToDynamic(); var sms = new SMS(); //短信内容 sms.Content = DynamicConvert.ToSafeString(smsObj.text); sms.Content = FragmentHelper.RemoveNullityDataNew(sms.Content); // 验证内容是否为空 if (FragmentHelper.IsEmptyString(sms.Content)) { continue; } sms.DataState = DynamicConvert.ToEnumByValue(smsObj.XLY_DataType, EnumDataState.Normal); //发送时间和读取时间。 dateStr = DynamicConvert.ToSafeString(smsObj.date); if (dateStr.Length > 9) { dateStr = dateStr.Substring(0, 9); } sms.StartDate = DynamicConvert.ToSafeDateTime(dateStr, 2001); //sms.ReadTime = DynamicConvert.ToSafeDateTime(smsObj.date_read, 2001); int smsId = DynamicConvert.ToSafeInt(smsObj.ROWID); sms.Remark = string.Empty; int hanldeId = DynamicConvert.ToSafeInt(smsObj.handle_id); if (hanldeId == 0) { //群发消息 var someChatMsgObj = chatmessagejoinDynamicList.FirstOrDefault(cmj => DynamicConvert.ToSafeInt(cmj.message_id) == smsId && DynamicConvert.ToSafeInt(cmj.chat_id) != 0); if (someChatMsgObj != null) { var handleIdList = chathandlejoinDynamicList.FindAll(chj => DynamicConvert.ToSafeInt(chj.chat_id) == someChatMsgObj.chat_id); var numbersBuilder = new StringBuilder(); foreach (var oneHandle in handleIdList) { numbersBuilder.Append(GetPhoteNumber(DynamicConvert.ToSafeInt(oneHandle.handle_id), handleDynamicList)); numbersBuilder.Append(";"); } sms.Remark = LanguageHelper.GetString(Languagekeys.PluginSMS_QunSend) + "; "; sms.Number = numbersBuilder.ToString().TrimEnd(";"); } } else { sms.Number = GetPhoteNumber(hanldeId, handleDynamicList); } if (sms.Number.IsValid() && sms.DataState == EnumDataState.Fragment) { if (!FragmentHelper.IsValidFragment(sms.Number)) { continue; } } //发送或者接收 sms.SmsState = DynamicConvert.ToSafeInt(smsObj.is_from_me) == 1 ? EnumSMSState.SendSMS : EnumSMSState.ReceiveSMS; int isDelivered = DynamicConvert.ToSafeInt(smsObj.is_delivered); int isSent = DynamicConvert.ToSafeInt(smsObj.is_sent); if (sms.SmsState == EnumSMSState.ReceiveSMS) { sms.Remark += DynamicConvert.ToSafeInt(smsObj.is_read) == 1 ? string.Format("{0};", LanguageHelper.GetString(Languagekeys.PluginSMS_IsRead)) : string.Format("{0};", LanguageHelper.GetString(Languagekeys.PluginSMS_NotRead)); } else { if (isDelivered == 0 && isSent == 0) { sms.Remark += LanguageHelper.GetString(Languagekeys.PluginSMS_SendFail) + "; "; } } #region 附件解析 int cache_has_attachments = DynamicConvert.ToSafeInt(smsObj.cache_has_attachments); if (cache_has_attachments == 1) { var attachmentIdList = messageAttachmentJoinDynamicList.FindAll(maj => DynamicConvert.ToSafeInt(maj.message_id) != 0 && DynamicConvert.ToSafeInt(maj.message_id) == smsId); sms.Remark += LanguageHelper.GetString(Languagekeys.PluginSMS_Attachment) + "; "; foreach (var oneAttachIdObj in attachmentIdList) { int attId = DynamicConvert.ToSafeInt(oneAttachIdObj.attachment_id); var attachObj = attachmentDynamicList.FirstOrDefault(att => DynamicConvert.ToSafeInt(att.ROWID) == attId); if (attachObj != null) { string attPath = DynamicConvert.ToSafeString(attachObj.filename); attPath = attPath.Replace('/', '\\').TrimStart('~'); sms.Remark += FileHelper.ConnectPath(attendDirPath, attPath) + ";"; } } } #endregion sms.Remark = sms.Remark.TrimEnd(";"); if (sms.Remark.Contains(LanguageHelper.GetString(Languagekeys.PluginSMS_NotRead))) { sms.ReadState = EnumReadState.Unread; } else { sms.ReadState = EnumReadState.Read; } if (sms.Number.IsInvalid() && sms.Content.IsInvalid()) { continue; } if (sms.Number.IsInvalid()) { var address = DataParseHelper.NumberToStu(DynamicConvert.ToSafeString(smsObj.address)); sms.Number = DynamicConvert.ToSafeString(address); } dataSource.Items.Add(sms); } }); } finally { mainContext?.Dispose(); mainContext = null; } }
private void BuildData(SimpleDataSource dataSource, DataParsePluginInfo info) { string serialnumber = string.Empty; string name = string.Empty; string manufacture = string.Empty; string model = string.Empty; string OSType = string.Empty; string OSVersion = string.Empty; string root = string.Empty; string IMEI = string.Empty; string IMSI = string.Empty; string WiFiAddress = string.Empty; string BMac = string.Empty; string TMac = string.Empty; List <string> listsimdata = new List <string>(); //从设备获取相关信息 var device = info.Phone; if (null != device) { serialnumber = device.SerialNumber; name = device.Name; manufacture = device.Manufacture; model = device.Model; OSType = device.OSType.GetDescription(); OSVersion = device.OSVersion; root = device.IsRootDesc; IMEI = device.IMEI; IMSI = device.IMSI; BMac = device.BMac; TMac = device.TMac; if (device.Properties.IsValid() && device.Properties.Keys.Contains("WiFiAddress")) { WiFiAddress = device.Properties["WiFiAddress"]; } } //获取设备名称 try { // /data/misc/wifi/p2p_supplicant.conf if (FileHelper.IsValid(info.SourcePath[9].Local)) { string fileContent = File.ReadAllText(info.SourcePath[9].Local, Encoding.ASCII); if (fileContent.IsValid()) { foreach (var line in fileContent.Split('\n', '\r')) { if (line.StartsWith("model_name", StringComparison.OrdinalIgnoreCase)) { name = line.Split('=')[1]; break; } } } } // /etc/config/model-config.xml if (FileHelper.IsValid(info.SourcePath[13].Local)) { XDocument doc = XDocument.Load(info.SourcePath[13].Local); var nameStr = doc.Elements("settings").First().Elements("setting").FirstOrDefault(e => e.Attribute("name") != null && e.Attribute("name").Value == "device_name").Attribute("value").Value; if (name.IsValid()) { name = nameStr; } } } catch { } //获取IMEI try { // /data/com.tencent.mm/MicroMsg/CompatibleInfo.cfg if (IMEI.IsInvalid() && FileHelper.IsValid(info.SourcePath[10].Local)) { var fileBytes = File.ReadAllBytes(info.SourcePath[10].Local); int index = GetIndexOf(fileBytes, 0, new byte[] { 0x73, 0x71, 0x00, 0x7E, 0x00, 0x02 }); if (index > 0) { index = GetIndexOf(fileBytes, index + 6, new byte[] { 0x00, 0x00, 0x01, 0x02, 0x74, 0x00 }); if (index > 0) { IMEI = Encoding.ASCII.GetString(fileBytes, index + 7, fileBytes[index + 6]); //标记后1位为长度,随后的字节为imei } } } // 从QQ数据中获取imei,com.tencent.mobileqq/shared_prefs/DENGTA_META.xml if (IMEI.IsInvalid() && FileHelper.IsValid(info.SourcePath[11].Local)) { var doc = new XmlDocument(); doc.Load(info.SourcePath[11].Local); XmlNodeList userInfoNodeList = doc.SelectNodes("map//string[@name='IMEI_DENGTA']"); if (userInfoNodeList != null && userInfoNodeList.Count > 0) { string key = userInfoNodeList[0].InnerText; if (key.IsValid()) { IMEI = key; } } } // 从QQ数据中获取imei,com.tencent.mobileqq/shared_prefs/MSF.C.Util.xml if (IMEI.IsInvalid() && FileHelper.IsValid(info.SourcePath[12].Local)) { var doc = new XmlDocument(); doc.Load(info.SourcePath[11].Local); XmlNodeList userInfoNodeList = doc.SelectNodes("map//string[@name='sp_imei']"); if (userInfoNodeList != null && userInfoNodeList.Count > 0) { string key = userInfoNodeList[0].InnerText; if (key.IsValid()) { IMEI = key; } } } } catch { } //获取蓝牙MAC属性 try { // /data/data/com.oppo.safe/shared_prefs/TMSProperties.xml if (FileHelper.IsValid(info.SourcePath[1].Local)) {//其它手机 XDocument doc = XDocument.Load(info.SourcePath[1].Local); var maps = doc.Elements("map").ToList().FirstOrDefault(); var mac = maps.Elements("string").ToList(); mac = mac.Where(p => p.Attribute("name").Value == "wup.mac").ToList(); BMac = mac.FirstOrDefault().ToSafeString().ToUpper(); } // /data/misc/bluetoothd else if (FileHelper.IsValidDictory(info.SourcePath[2].Local)) {//三星手机 string cfgFile = Directory.GetFiles(info.SourcePath[2].Local, "names", SearchOption.AllDirectories).FirstOrDefault(); if (cfgFile.IsValid()) { string macFolder = Path.GetDirectoryName(cfgFile).Split('\\')[Path.GetDirectoryName(cfgFile).Split('\\').Length - 1]; BMac = macFolder.Replace("_", ":").ToUpper(); } } // /data/misc/bluedroid/bt_config.xml else if (FileHelper.IsValid(info.SourcePath[3].Local)) {//华为手机 XDocument doc = XDocument.Load(info.SourcePath[3].Local); var list = doc.Descendants().ToList(); var mac = list.Where(p => (p.Attribute("Tag") != null) && (p.Attribute("Tag").Value == "Address")); if (mac.Count() != 0) { BMac = mac.ToList().FirstOrDefault().Value.ToUpper(); } } } catch { } //获取Wifi的MAC属性 try { string wifiConfigPath = ""; // /data/misc/dhcp/dhcpcd-wlan0.lease if (FileHelper.IsValid(info.SourcePath[4].Local)) { wifiConfigPath = info.SourcePath[4].Local; } // /data/misc/dhcp/dhcpcd-wlan0.lease_0 else if (FileHelper.IsValid(info.SourcePath[5].Local)) { wifiConfigPath = info.SourcePath[5].Local; } if (wifiConfigPath.IsValid()) { using (FileStream myStream = new FileStream(wifiConfigPath, FileMode.Open, FileAccess.Read)) { string wifiMac = ""; string wifiIP = ""; BinaryReader read = new BinaryReader(myStream); int count = (int)myStream.Length; byte[] buffer = new byte[count]; read.Read(buffer, 0, buffer.Length); for (int i = 28; i < 34; i++) { if (i == 28) { wifiMac = string.Format("{0:X}", buffer[i]).PadLeft(2, '0'); } else { wifiMac += ":" + string.Format("{0:X}", buffer[i]).PadLeft(2, '0'); } } for (int i = 16; i < 20; i++) { if (i == 16) { wifiIP = buffer[i].ToString(); } else { wifiIP += "." + buffer[i].ToString(); } } TMac = wifiMac.ToUpper(); } } } catch { } //获取手机号,imsi,iccid信息 try { // /data/data/com.android.providers.telephony/databases/telephony.db if (FileHelper.IsValid(info.SourcePath[6].Local)) { string simdata = ""; using (var context = new SqliteContext(info.SourcePath[6].Local)) { var siminfo = context.FindByName("siminfo").Distinct(); foreach (var sim in siminfo) { simdata = "ICCID:" + sim.icc_id + ","; if (!string.IsNullOrEmpty(sim.number)) { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_PhoneNumber) + sim.number + ","; } else { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_PhoneNumber) + ":NA"; } if (!string.IsNullOrEmpty(sim.display_name)) { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_CarrierOperator) + sim.display_name; } else { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_CarrierOperator) + ":NA"; } listsimdata.Add(simdata); } } } // /data/data/com.samsung.simcardmanagement/databases/simcardmanagement.db if (FileHelper.IsValid(info.SourcePath[7].Local)) { string simdata = ""; using (var context = new SqliteContext(info.SourcePath[7].Local)) { var siminfo = (from u in context.FindByName("registerinfo") select new { u.card_iccid, u.card_number, u.card_name, u.card_id }).Distinct(); foreach (var sim in siminfo) { simdata = "ICCID:" + sim.card_iccid + ","; if (!string.IsNullOrEmpty(sim.card_number)) { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_PhoneNumber) + sim.card_number + ","; } else { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_PhoneNumber) + ":NA"; } if (!string.IsNullOrEmpty(sim.card_name)) { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_CarrierOperator) + sim.card_name; } else { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_CarrierOperator) + ":NA"; } if (!string.IsNullOrEmpty(sim.card_id)) { simdata += "IMSI" + sim.card_id; } else { simdata += "IMSI:NA"; } listsimdata.Add(simdata); } } } } catch { } dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_Serialnumber), serialnumber)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_DeviceName), name)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_Manufacture), manufacture)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_Model), model)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_OSType), OSType)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_OSVersion), OSVersion)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_Root), root)); dataSource.Items.Add(new KeyValueItem("IMEI", IMEI)); dataSource.Items.Add(new KeyValueItem("IMSI", IMSI)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_WiFiAddress), WiFiAddress)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_BMac), BMac)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_TMac), TMac)); int id = 0; foreach (var sim in listsimdata) { dataSource.Items.Add(new KeyValueItem("SIM" + (id++).ToString(), sim)); } }
private void BuildData(SimpleDataSource dataSource, DataParsePluginInfo info) { string serialnumber = string.Empty; string name = string.Empty; string manufacture = string.Empty; string model = string.Empty; string OSType = string.Empty; string OSVersion = string.Empty; string root = string.Empty; string IMEI = string.Empty; string IMSI = string.Empty; string WiFiAddress = string.Empty; string BMac = string.Empty; string TMac = string.Empty; List <string> listsimdata = new List <string>(); //从设备获取相关信息 var device = info.Phone; if (null != device) { serialnumber = device.SerialNumber; name = device.Name; manufacture = device.Manufacture; model = device.Model; OSType = device.OSType.GetDescription(); OSVersion = device.OSVersion; root = device.IsRootDesc; IMEI = device.IMEI; IMSI = device.IMSI; BMac = device.BMac; TMac = device.TMac; if (device.Properties.IsValid() && device.Properties.Keys.Contains("WiFiAddress")) { WiFiAddress = device.Properties["WiFiAddress"]; } } //获取蓝牙MAC属性 try { // /data/data/com.oppo.safe/shared_prefs/TMSProperties.xml if (FileHelper.IsValid(info.SourcePath[0].Local)) {//其它手机 XDocument doc = XDocument.Load(info.SourcePath[0].Local); var maps = doc.Elements("map").ToList().FirstOrDefault(); var mac = maps.Elements("string").ToList(); mac = mac.Where(p => p.Attribute("name").Value == "wup.mac").ToList(); BMac = mac.FirstOrDefault().ToSafeString().ToUpper(); } // /data/misc/bluetoothd else if (FileHelper.IsValidDictory(info.SourcePath[1].Local)) {//三星手机 string cfgFile = Directory.GetFiles(info.SourcePath[1].Local, "names", SearchOption.AllDirectories).FirstOrDefault(); if (cfgFile.IsValid()) { string macFolder = Path.GetDirectoryName(cfgFile).Split('\\')[Path.GetDirectoryName(cfgFile).Split('\\').Length - 1]; BMac = macFolder.Replace("_", ":").ToUpper(); } } // /data/misc/bluedroid/bt_config.xml else if (FileHelper.IsValid(info.SourcePath[2].Local)) {//华为手机 XDocument doc = XDocument.Load(info.SourcePath[2].Local); var list = doc.Descendants().ToList(); var mac = list.Where(p => (p.Attribute("Tag") != null) && (p.Attribute("Tag").Value == "Address")); if (mac.Count() != 0) { BMac = mac.ToList().FirstOrDefault().Value.ToUpper(); } } } catch { } //获取Wifi的MAC属性 try { string wifiConfigPath = ""; // /data/misc/dhcp/dhcpcd-wlan0.lease if (FileHelper.IsValid(info.SourcePath[3].Local)) { wifiConfigPath = info.SourcePath[3].Local; } // /data/misc/dhcp/dhcpcd-wlan0.lease_0 else if (FileHelper.IsValid(info.SourcePath[4].Local)) { wifiConfigPath = info.SourcePath[4].Local; } if (wifiConfigPath.IsValid()) { using (FileStream myStream = new FileStream(wifiConfigPath, FileMode.Open, FileAccess.Read)) { string wifiMac = ""; string wifiIP = ""; BinaryReader read = new BinaryReader(myStream); int count = (int)myStream.Length; byte[] buffer = new byte[count]; read.Read(buffer, 0, buffer.Length); for (int i = 28; i < 34; i++) { if (i == 28) { wifiMac = string.Format("{0:X}", buffer[i]).PadLeft(2, '0'); } else { wifiMac += ":" + string.Format("{0:X}", buffer[i]).PadLeft(2, '0'); } } for (int i = 16; i < 20; i++) { if (i == 16) { wifiIP = buffer[i].ToString(); } else { wifiIP += "." + buffer[i].ToString(); } } TMac = wifiMac.ToUpper(); } } } catch { } //获取手机号,imsi,iccid信息 try { // /data/data/com.android.providers.telephony/databases/telephony.db if (FileHelper.IsValid(info.SourcePath[5].Local)) { string simdata = ""; using (var context = new SqliteContext(info.SourcePath[5].Local)) { var siminfo = context.FindByName("siminfo").Distinct(); foreach (var sim in siminfo) { simdata = "ICCID:" + sim.icc_id + ","; if (!string.IsNullOrEmpty(sim.number)) { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_PhoneNumber) + sim.number + ","; } else { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_PhoneNumber) + ":NA"; } if (!string.IsNullOrEmpty(sim.display_name)) { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_CarrierOperator) + sim.display_name; } else { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_CarrierOperator) + ":NA"; } listsimdata.Add(simdata); } } } // /data/data/com.samsung.simcardmanagement/databases/simcardmanagement.db if (FileHelper.IsValid(info.SourcePath[6].Local)) { string simdata = ""; using (var context = new SqliteContext(info.SourcePath[6].Local)) { var siminfo = (from u in context.FindByName("registerinfo") select new { u.card_iccid, u.card_number, u.card_name, u.card_id }).Distinct(); foreach (var sim in siminfo) { simdata = "ICCID:" + sim.card_iccid + ","; if (!string.IsNullOrEmpty(sim.card_number)) { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_PhoneNumber) + sim.card_number + ","; } else { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_PhoneNumber) + ":NA"; } if (!string.IsNullOrEmpty(sim.card_name)) { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_CarrierOperator) + sim.card_name; } else { simdata += LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_CarrierOperator) + ":NA"; } if (!string.IsNullOrEmpty(sim.card_id)) { simdata += "IMSI" + sim.card_id; } else { simdata += "IMSI:NA"; } listsimdata.Add(simdata); } } } } catch { } //获取设备名称 try { // /data/system/users/0/settings_global.xml if (FileHelper.IsValid(info.SourcePath[7].Local)) { XDocument doc = XDocument.Load(info.SourcePath[7].Local); var nameStr = doc.Elements("settings").First().Elements("setting").FirstOrDefault(e => e.Attribute("name") != null && e.Attribute("name").Value == "device_name").Attribute("value").Value; if (nameStr.IsValid()) { name = nameStr; } } } catch { } dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_Serialnumber), serialnumber)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_DeviceName), name)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_Manufacture), manufacture)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_Model), model)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_OSType), OSType)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_OSVersion), OSVersion)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_Root), root)); dataSource.Items.Add(new KeyValueItem("IMEI", IMEI)); dataSource.Items.Add(new KeyValueItem("IMSI", IMSI)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_WiFiAddress), WiFiAddress)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_BMac), BMac)); dataSource.Items.Add(new KeyValueItem(LanguageHelper.GetString(Languagekeys.PluginDeviceProperty_TMac), TMac)); int id = 0; foreach (var sim in listsimdata) { dataSource.Items.Add(new KeyValueItem("SIM" + (id++).ToString(), sim)); } }