/// <summary> /// 加载即时通讯信息; /// </summary> /// <param name="advCFile"></param> /// <param name="infoKind"></param> public static void LoadInstanceChat(AndroidDeviceCaseEvidence advCFile, string pinKind) { //保存内容到案件; var fiUnit = ServiceProvider.Current.GetInstance <ICommonForensicService>().GetForensicInfoUnit(advCFile); if (fiUnit == null) { return; } var afcUnit = fiUnit.Children. FirstOrDefault(p => p is PinTreeUnit fcUnit && fcUnit.ContentId == PinKindsDefinitions.ForensicClassInstantTalk) as PinTreeUnit; if (afcUnit == null) { return; } PinTreeUnit chatUnit = null; if (afcUnit.Children.FirstOrDefault(p => p is PinTreeUnit oTreeUnit && oTreeUnit.ContentId == pinKind) is PinTreeUnit preChatUnit) { chatUnit = preChatUnit; }
/// <summary> /// 加载现有基本信息(Contact+sms); /// </summary> /// <param name="advCFile"></param> /// <param name="binPath"></param> /// <param name="pinKind"></param> public static void LoadBasicInfo(AndroidDeviceCaseEvidence advCFile, string pinKind) { var fiUnit = ServiceProvider.Current.GetInstance <ICommonForensicService>().GetForensicInfoUnit(advCFile); if (fiUnit == null) { return; } var csService = ServiceProvider.Current.GetInstance <ICaseService>(); if (csService == null) { Logger.WriteCallerLine($"{nameof(ICaseService)} is not registered."); return; } if (fiUnit.Children.FirstOrDefault(p => p is IHavePinKind havePin && havePin.ContentId == pinKind) is ITreeUnit preUnit) { fiUnit.Children.Remove(preUnit); //var fsTabService = ServiceProvider.Current.GetInstance<FSTabService>(); } TreeUnit newUnit = null; try { using (var fs = File.OpenRead($"{csService.CurrentCase.Path}/{advCFile.BasePath}/{advCFile[pinKind]}")) { var bf = new BinaryFormatter(); var dbModels = (List <ForensicInfoDbModel>)bf.Deserialize(fs); //显示; if (pinKind == PinKindsDefinitions.AndBasicCalllog) { newUnit = new MultiDbModelsUnit <CalllogDbModel>(dbModels?.Select(p => p as CalllogDbModel).ToList(), pinKind, fiUnit); } else if (pinKind == PinKindsDefinitions.AndBasicSmses) { newUnit = new MultiDbModelsUnit <SmsDbModel>( dbModels?.Select(p => p as SmsDbModel).ToList(), PinKindsDefinitions.AndBasicSmses, fiUnit, sms => (sms.relationship_account, sms.relationship_name)); } else if (pinKind == PinKindsDefinitions.AndBasicContact) { newUnit = new MultiDbModelsUnit <ContactDbModel>(dbModels?.Select(p => p as ContactDbModel).ToList(), pinKind, fiUnit); } if (newUnit != null) { newUnit.Label = $"{FindResourceString(pinKind)}({dbModels?.Count ?? 0})"; fiUnit.Children.Add(newUnit); } } } catch (Exception ex) { EventLogger.Logger.WriteCallerLine(ex.Message); } }
/// <summary> /// //调用py;获得结果参数文件路径; /// </summary> /// <param name="outPutXDocPath">输出参数文件路径</param> /// <param name="pyName"></param> /// <returns>输出相对路径以及参数文件的路径</returns> public static (string outPutPath, string outDocName) GetProcessOutPut(AndroidDeviceCaseEvidence CaseFile, string pyName) { var csService = ServiceProvider.Current?.GetInstance <ICaseService>(); if (csService == null) { throw new InvalidOperationException($"{nameof(ICaseService)} is not registered."); } var guid = Guid.NewGuid().ToString("N"); var outPutPath = $"{csService.CurrentCase.Path}/{CaseFile.BasePath}/{guid}"; var outPutDocName = "output.xml"; if (!System.IO.Directory.Exists(outPutPath)) { System.IO.Directory.CreateDirectory(outPutPath); } //生成参数文件; var xDoc = new XDocument(); //文件范围相关; var rootElem = new XElement("Params"); var rangesXDoc = CaseFile.BuildFilesDoc(saveAllFiles: false); var FileRangesXDoc = $"{outPutPath}/new.xml"; var outPutXDocPath = $"{outPutPath}/{outPutDocName}"; rangesXDoc.Save(FileRangesXDoc); //其它参数; rootElem.Add(new XElement("GUID", guid)); rootElem.Add(new XElement("type", "SingleImg")); rootElem.Add(new XElement("ImgPath", CaseFile.InterLabel)); rootElem.Add(new XElement(nameof(FileRangesXDoc), FileRangesXDoc)); rootElem.Add(new XElement("OutPutXDocPath", outPutXDocPath)); rootElem.Add(new XElement("OutPutPath", outPutPath)); xDoc.Add(rootElem); //流输入控制; StreamWriter iw = null; try { var argPath = $"{outPutPath}/read.xml"; xDoc.Save(argPath); var parser = PythonHelper.GetProcess(pyName, argPath); parser.OutputDataReceived += (sender, e) => { //确定是否是请求文件; if (e.Data?.StartsWith(request_file) == true) { #if DEBUG Console.WriteLine("Request:" + e.Data); #endif //获得文件相对于设备本身的路径; var requestFile = e.Data.Substring(request_file.Length + 1); var requestPath = requestFile.Substring(0, requestFile.LastIndexOf("/")); var file = CaseFile.Data.GetFileByUrl(requestFile); if (file is RegularFile regFile) { using (var stream = regFile.GetStream()) { Stream targetStream = null; try { if (!System.IO.Directory.Exists($"{outPutPath}/{requestPath}")) { System.IO.Directory.CreateDirectory($"{outPutPath}/{requestPath}"); } targetStream = File.Create($"{outPutPath}/{requestFile}"); stream.CopyTo(targetStream); targetStream.Close(); iw.WriteLine("True"); } catch { iw.WriteLine("False"); } } } else { Logger.WriteCallerLine($"Error:Invalid file type:{e.Data}"); } } else { Console.WriteLine("Unknown output:" + e.Data); } }; parser.ErrorDataReceived += (sender, e) => { Logger.WriteLine($"{nameof(AdvPythonHelper)}->{nameof(GetProcessOutPut)}:{e.Data}"); #if DEBUG Console.WriteLine(e.Data); #endif }; parser.Start(); //重定向相关; parser.BeginOutputReadLine(); parser.BeginErrorReadLine(); iw = parser.StandardInput; parser.WaitForExit(); parser.Dispose(); return(outPutPath, outPutDocName); } catch (Exception ex) { Logger.WriteLine($"{nameof(AdvPythonHelper)}->{nameof(GetProcessOutPut)}:{ex.Message}"); throw; } }