Пример #1
0
        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);
        }
Пример #3
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #12
0
        /// <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;
            }
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
        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);
            }
        }
Пример #15
0
        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
                    {
                    }
                }
            }
        }
Пример #16
0
        /// <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;
            }
        }
Пример #17
0
        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));
            }
        }
Пример #18
0
        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));
            }
        }