private void addBreakpointsToAllMethodsInModule(string moduleToProcess, bool verbose)
 {            
     DI.log.debug("Adding {0} breakpoints", methodsInModule.Count);
     O2Thread.mtaThread(() =>
                            {
                                var numberOfBreakpointsAdded = 0;
                                var breakpointOffset = 0;
                                var timer = new O2Timer("Breakpoint added in").start();
                                MDbgModule module = DI.o2MDbg.sessionData.getModule(moduleToProcess);
                                if (module != null)
                                    foreach (Type typeInModule in module.Importer.DefinedTypes)
                                        // no point in adding interfaces or abstract types since they will not be bound (double check on abstract!!)
                                        //if (false == typeInModule.IsInterface && false == typeInModule.IsAbstract)   // these are not implemented in the original MDbg :(
                                            foreach (MethodInfo methodInType in typeInModule.GetMethods())
                                            {
                                                DI.o2MDbg.BreakPoints.add(moduleToProcess, typeInModule.FullName,
                                                                          methodInType.Name, breakpointOffset,
                                                                          verbose);
                                                if (numberOfBreakpointsAdded++%500 == 0)
                                                    DI.log.info(
                                                        "  update: {0} breakpoints added so far of a max of {1}",
                                                        numberOfBreakpointsAdded, methodsInModule.Count);
                                            }        
                                timer.stop();
                                DI.log.info("There where {0} breakpoints added of a max of {1}", numberOfBreakpointsAdded, methodsInModule.Count);
                            });
 }
Пример #2
0
 public static IEnumerable<string> getUniqueSortedListOfStrings(IEnumerable<string> stringsToFilter, ref int numberOfUniqueStrings)
 {
     var timer = new O2Timer("O2Linq calculated list of unique strings from " + stringsToFilter.Count() + " strings").start();
     var uniqueList = (from string signature in stringsToFilter orderby signature select signature).Distinct();
     numberOfUniqueStrings = uniqueList.Count();
     timer.stop();
     DI.log.info("There are {0} unique signatures", uniqueList.Count());
     return uniqueList;
 }
Пример #3
0
 public void createUniqueListOfSignatures_forFile(string ozamstFileToTest)
 {
     DI.log.debug("\n\ntesting file: {0}", ozamstFileToTest);
     var timer = new O2Timer("Unique Signatures calculated").start();                        
     var o2Findings = new O2AssessmentLoad_OunceV6().loadFile(ozamstFileToTest).o2Findings;            
     var uniqueSignatures = RulesAndFindingsUtils.getListOfUniqueSignatures(o2Findings);
     Assert.That(uniqueSignatures.Count > 0, "uniqueSignatures ==0");
     DI.log.info("Unique Signatures calculated = {0}", uniqueSignatures.Count);            
     timer.stop();
 }
        public bool importFile(string fileToLoad, IO2Assessment o2Assessment)
        {
            try
            {
                if (canLoadFile(fileToLoad))
                {
                    //o2Assessment.lastOzasmtImportWasItSucessfull = false;
                    //o2Assessment.lastOzasmtImportFile = fileToLoad;
                    //o2Assessment.lastOzasmtImportFileSize = Files.getFileSize(fileToLoad);

                    //DateTime startImportTime = DateTime.Now;
                    var timer = new O2Timer("Loaded assessment " + fileToLoad + " ").start();
                    AssessmentRun assessmentRunToImport = OzasmtUtils_OunceV6.LoadAssessmentRun(fileToLoad);
                    timer.stop();
                    /*     assessmentRun.AssessmentConfig = assessmentRunToImport.AssessmentConfig;
                 assessmentRun.AssessmentStats = assessmentRunToImport.AssessmentStats;
                 assessmentRun.Messages = assessmentRunToImport.Messages;
                 assessmentRun.name = assessmentRunToImport.name ?? OzasmtUtils_OunceV6.calculateAssessmentNameFromScans(assessmentRunToImport);*/

                    o2Assessment.name = assessmentRunToImport.name ??
                                        OzasmtUtils_OunceV6.calculateAssessmentNameFromScans(assessmentRunToImport);

                    // I don't think I need this since the O2Finding objects have the full strings
                    // map top level objects
                    /*
                 assessmentRun.FileIndeces = assessmentRunToImport.FileIndeces;                
                 assessmentRun.StringIndeces = assessmentRunToImport.StringIndeces;*/

                    // import findings
                    if (null != assessmentRunToImport.Assessment.Assessment)
                        foreach (Assessment assessment in assessmentRunToImport.Assessment.Assessment)
                            if (null != assessment.AssessmentFile)
                                foreach (AssessmentAssessmentFile assessmentFile in assessment.AssessmentFile)
                                    if (assessmentFile.Finding != null)
                                        foreach (AssessmentAssessmentFileFinding finding in assessmentFile.Finding)
                                            o2Assessment.o2Findings.Add(OzasmtUtils_OunceV6.getO2Finding(finding,
                                                                                                         assessmentFile,
                                                                                                         assessmentRunToImport));

                    // if we made it this far all went ok;
                    //o2Assessment.lastOzasmtImportTimeSpan = DateTime.Now - startImportTime;
                    //o2Assessment.lastOzasmtImportWasItSucessfull = true;
                    return true;
                }
            }
            catch
                (Exception ex)
            {
                "in importAssessmentRun: {0}".error(ex.Message);
            }
            return false;

        }
Пример #5
0
        public static Dictionary<String, XmlNode> getAllBeans_RecursiveSearch(String sWebRoot)
        {
            if (bLoadFromO2VarsIfAvailable && vars.get(sO2VarToHoldBeansDictionary) != null)
                if (((Dictionary<String, XmlNode>) vars.get(sO2VarToHoldBeansDictionary)).Count > 0)
                    return (Dictionary<String, XmlNode>) vars.get(sO2VarToHoldBeansDictionary);
            O2Timer tTimer = new O2Timer("Loading all beans from web root").start();
            var dBeans = new Dictionary<String, XmlNode>();
            var lsXmlFilesInWebRoot = new List<String>();
            Files.getListOfAllFilesFromDirectory(lsXmlFilesInWebRoot, sWebRoot, true, "*.xml", false);
            DI.log.info("{0} xml files found", lsXmlFilesInWebRoot.Count);
            int iFilesProcessed = 0;
            foreach (var sXmlFile in lsXmlFilesInWebRoot)
            {
                try
                {
                    if (Path.GetExtension(sXmlFile).ToLower() == ".xml")
                    {
                        DI.log.info("({0}/{1} Processing xml file: {2}", (iFilesProcessed++), lsXmlFilesInWebRoot.Count,
                                    sXmlFile);
                        var xdXmlDocument = new XmlDocument();
                        String sXmlFileContents = Files.getFileContents(sXmlFile);
                        sXmlFileContents = sXmlFileContents.Replace("<!DOCTYPE", "<!--");
                        sXmlFileContents = sXmlFileContents.Replace(".dtd\">", "-->");

                        xdXmlDocument.LoadXml(sXmlFileContents);
                        xdXmlDocument.XmlResolver = null;
                        XmlNodeList xnlBeans = xdXmlDocument.GetElementsByTagName("bean");

                        foreach (XmlNode xnNode in xnlBeans)
                            if (xnNode.Attributes["id"] != null)
                            {
                                // first add by id
                                if (!dBeans.ContainsKey(xnNode.Attributes["id"].Value))
                                    dBeans.Add(xnNode.Attributes["id"].Value, xnNode);
                            }
                            else if (xnNode.Attributes["name"] != null) // then add by name
                                if (!dBeans.ContainsKey(xnNode.Attributes["name"].Value))
                                    dBeans.Add(xnNode.Attributes["name"].Value, xnNode);
                    }
                }
                catch (Exception ex)
                {
                    DI.log.ex(ex, "in getAllBeans_RecursiveSearch (inside foreach (var sXmlFile in lsXmlFilesInWebRoot)");
                    throw;
                }
            }
            vars.set_(sO2VarToHoldBeansDictionary, dBeans);
            DI.log.info("{0} beans loaded", dBeans.Count);

            tTimer.stop();
            return dBeans;
        }
Пример #6
0
 public static void backupGac(string zipFileToSaveGacContents)
 {
     O2Thread.mtaThread(
         () =>
         {
             PublicDI.log.info("Started unzip process of Gac Folder");
             var timer = new O2Timer("Gac Backup").start();
             new zipUtils().zipFolder(DI.PathToGac, zipFileToSaveGacContents);
             var logMessage = String.Format("Contents of \n\n\t{0}\n\n saved to \n\n\t{1}\n\n ", DI.PathToGac, zipFileToSaveGacContents);
             timer.stop();
             PublicDI.log.info(logMessage);
             //PublicDI.log.showMessageBox(logMessage);
         });
 }
Пример #7
0
 public static IO2Assessment getO2Assessment(string ozasmtFile)
 {
     var loadEngine = getLoadEngineForFile(ozasmtFile);
     if (loadEngine != null)
     {
         O2Cmd.log.write("\n[engine {0}]: loading and converting file: {1}", loadEngine.engineName, ozasmtFile);
         var timer = new O2Timer("File Loaded").start();
         var o2Assessment = loadEngine.loadFile(ozasmtFile);
         timer.stop();
         O2Cmd.log.write("[engine {0}]: There are {1} Findings in the loaded file\n", loadEngine.engineName, o2Assessment.o2Findings.Count);
         return o2Assessment;
     }
     return null;
 }
Пример #8
0
        public static void mapInRulePack_FindingsSourcesAndSinks(O2RulePack o2RulePack, Dictionary<string, List<IO2Rule>> indexedO2Rules, List<IO2Finding> o2Findings, string languageDBId)
        {
            var timer = new O2Timer("mapInRulePack_FindingsSourcesAndSinks").start();
            foreach (O2Finding o2Finding in o2Findings)
                updateO2RulePackWithFindingsTraceTypes(o2RulePack, indexedO2Rules, o2Finding.o2Traces, languageDBId,
                                                       O2RuleType.Source);

            /*updateSourceOrSinkRule(o2RulePack,indexedO2Rules, o2Finding.Source, languageDBId, O2RuleType.Source);
            updateSourceOrSinkRule(o2RulePack,indexedO2Rules, o2Finding.KnownSink, languageDBId, O2RuleType.Sink);
            updateSourceOrSinkRule(o2RulePack, indexedO2Rules, o2Finding.LostSink, languageDBId, O2RuleType.LostSink);                */
            timer.stop();


        }
Пример #9
0
        public void calculateRulePack_forFile(string ozamstFileToTest, O2RulePack o2RulePackToUse)
        {
            DI.log.debug("\n\ntesting file: {0}", ozamstFileToTest);
            var timer = new O2Timer("Calculate Rule Pack ").start();
            // load assesment file and get unique signatures
            var o2Findings = new O2AssessmentLoad_OunceV6().loadFile(ozamstFileToTest).o2Findings;
            var uniqueSignatures = RulesAndFindingsUtils.getListOfUniqueSignatures(o2Findings);
            Assert.That(uniqueSignatures.Count > 0, "uniqueSignatures ==0");
            // calculate rulepack for this assessment

            var o2RulePackForOzasmt = RulesAndFindingsUtils.createRulePackWithSignatures(o2RulePackToUse, uniqueSignatures,
                                                               Path.GetFileName(ozamstFileToTest), true, testLanguageDBId);
            Assert.That(o2RulePackForOzasmt.o2Rules.Count > 0, "There were no rules in created o2RulePackForOzasmt");
            timer.stop();
        }
        public void executeSearchAndLoadResults(List<Regex> searchRegExes)
        {
            this.invokeOnThread(() => lbSearchResultsStats.Text = "Executing search");
            // execute search
            var timer = new O2Timer("Search execution").start();
            var tsrSearchResults = executeSearch(searchRegExes);
            timer.stop();
                        
            this.invokeOnThread(
                () => lbSearchResultsStats.Text =
                        String.Format("{0} and returned {1} matches", timer.TimeSpanString, tsrSearchResults.Count));

            // show Results
            showResults(tsrSearchResults);
        }
Пример #11
0
 public static object runQuery(string queryText, Hashtable sources)
 {
     try
     {
         O2Timer o2Timer = new O2Timer("Executed Link Query (" + queryText + ") in: ").start();
         object results = runQueryInternal(queryText, sources);
         o2Timer.stop();
         return results;
     }
     catch (Exception ex)
     {
         DI.log.ex(ex, "in O2NLinkQuery.runQuery");
         return null;
     }
 }
Пример #12
0
 public static string createO2AssessmentWithCallFlowTraces(ICirDataAnalysis cirDataAnalysis)
 {
     DI.log.info("Creating O2Assessment With Call Flow Traces");
     var timer = new O2Timer("Created list of finding").start();            
     var cirFunctionsToProcess = cirDataAnalysis.dCirFunction_bySignature.Values;
     var o2Findings  = createO2FindingsFromCirFunctions(cirFunctionsToProcess);
     timer.stop();
     timer = new O2Timer("Saved Assessment").start();
     var o2Assessment = new O2Assessment();
     o2Assessment.o2Findings = o2Findings;
     var savedFile = o2Assessment.save(new O2AssessmentSave_OunceV6());
     DI.log.info("Saved O2Asssessment file created: {0}", savedFile);
     timer.stop();
     return savedFile;
 }
Пример #13
0
        public static O2AssessmentData_OunceV6 loadAssessmentRunFileAndAddItToList(String sPathToFile)
        {
            var bDropDuplicateSmartTraces = true;
            var bIgnoreRootCallInvocation = true;
            var ffFindingFilter = Analysis.FindingFilter.AllFindings;
            O2AssessmentData_OunceV6 oadO2AssessmentDataOunceV6 = null;
            O2Timer tTimer = new O2Timer("Loaded SavedAssessmentFile").start();
            Analysis.loadAssessmentFile(sPathToFile, false, ref oadO2AssessmentDataOunceV6);
            // Calculate Xrefs into fadAssessmentData                               

            Analysis.populateDictionariesWithXrefsToLoadedAssessment(ffFindingFilter, bDropDuplicateSmartTraces,

                                                                     bIgnoreRootCallInvocation, oadO2AssessmentDataOunceV6);            
            tTimer.stop();
            return oadO2AssessmentDataOunceV6;
        }
 public bool loadOzastFilesUsingEngine(IO2AssessmentLoad o2LoadEngineToUse, string fileToLoad, bool expectLoadFail)
 {
     DI.log.info("Loading file {0} using engine {1}",Path.GetFileName(fileToLoad), o2LoadEngineToUse.engineName);
     var timer = new O2Timer("File loaded").start();
     var o2Assessment = o2LoadEngineToUse.loadFile(fileToLoad);
     if (expectLoadFail)
         Assert.That(o2Assessment == null ,"on this file for this engine the, o2Assessment was expected to be null");
     else
     {
         Assert.That(o2Assessment != null, "o2Assessment was null");
         Assert.That(o2Assessment.o2Findings.Count > 0, "o2Assessment.o2Findings.Count  == 0");
         DI.log.info("There were {0} findings in file loaded: {0}", o2Assessment.o2Findings.Count);
     }            
     timer.stop();            
     return true;
 }
Пример #15
0
 private static void fixFunctionsCalledXRefs(ICirData cirData)
 {
     if (cirData != null && cirData.dFunctions_bySignature != null)
     {
         var timer = new O2Timer("fixFunctionsCalledXRefs").start();
         foreach (CirFunction cirFunction in cirData.dFunctions_bySignature.Values)
         {
             if (cirFunction.FunctionName == null)
             {
                 var filteredSignature = new FilteredSignature(cirFunction.FunctionSignature);
                 cirFunction.FunctionName = filteredSignature.sFunctionName;
                 cirFunction.FunctionNameAndParameters = filteredSignature.sFunctionNameAndParams;
                 cirFunction.ClassNameFunctionNameAndParameters = filteredSignature.sFunctionClass + "." +
                                                                  filteredSignature.sFunctionNameAndParams;
             }
         }
         timer.stop();
     }
 }
Пример #16
0
	   public string ProcessRequest(string page)	
	   {
	   		O2Gui.open<System.Windows.Forms.Panel>("Util - LogViewer", 400,140).add_LogViewer();
	   		"Current Directory: {0}".info(Environment.CurrentDirectory);
	   		
	   		var o2Timer = new O2Timer("ProcessRequest for file: {0}".info(page)).start();			
	   		Page = page ?? Page;
			var stringWriter = new StringWriter();
		   	simpleWorkerRequest = new SimpleWorkerRequest(Page, string.Empty, stringWriter);
		   	
		   	//openScript();
		   	
		   	//"Good Morning".execute_InScriptEditor_InSeparateAppDomain();
		   	"processing request for: {0}".info(Page);
		   	HttpRuntime.ProcessRequest(simpleWorkerRequest);
		   	var Html = stringWriter.str();
		   	o2Timer.stop();
		   	return Html;	
	   }	   	   	   	
		public static void populateGuidanceItemsFileMappings()
		{			
			var o2Timer = new O2Timer("populateGuidanceExplorersFileMappings").start();
			foreach(var filePath in TM_Xml_Database.Path_XmlLibraries.files(true, "*.xml"))
			{
				var fileId = filePath.fileName().remove(".xml");
				if (fileId.isGuid())
				{
					//"[populateGuidanceItemsFileMappings] loading GuidanceItem ID {0}".info(fileId);
					var guid = fileId.guid();
					if (TM_Xml_Database.GuidanceItems_FileMappings.hasKey(guid))
					{
						"[populateGuidanceItemsFileMappings] duplicate GuidanceItem ID found {0}".error(guid);
					}
					else
						TM_Xml_Database.GuidanceItems_FileMappings.Add(guid, filePath);				
				}
			}
			o2Timer.stop();
			"There are {0} files mapped in GuidanceItems_FileMappings".info(TM_Xml_Database.GuidanceItems_FileMappings.size());			
		}
        public static List<TeamMentor_Article> xmlDB_Load_GuidanceItemsV3(this TM_Xml_Database tmDatabase, Guid libraryId, List<string> guidanceItemsFullPaths)
        {
            var o2Timer = new O2Timer("xmlDB_GuidanceItems").start();
            var itemsLoaded = 0;
            //var maxToLoad = 1000;
            var guidanceItems = new List<TeamMentor_Article>();
            foreach(var fullPath in guidanceItemsFullPaths)
            {
                var guidanceItemId = fullPath.fileName().remove(".xml");
                if (guidanceItemId.isGuid())
                {
                    var guidanceItem = tmDatabase.xmlDB_GuidanceItem(guidanceItemId.guid(),fullPath);
                    if (guidanceItem.notNull())
                    {
                        guidanceItems.add(guidanceItem);
                        guidanceItem.Metadata.Library_Id = libraryId;
                    }
                    //if (maxToload-- < 1)
                    //	break;
                    if (itemsLoaded++ % 200 == 0)
                        "loaded {0} items".info(itemsLoaded);
                }
                //if (itemsLoaded > maxToLoad)
                //	break;

            }
            o2Timer.stop();
            return guidanceItems;
        }
        public static TM_Xml_Database xmlDB_Load_GuidanceItems(this TM_Xml_Database tmDatabase)
        {
            var pathXmlLibraries = TM_Xml_Database.Current.Path_XmlLibraries;
            if (pathXmlLibraries.notNull() && pathXmlLibraries.notNull())
                lock (pathXmlLibraries)
                {
                    if (tmDatabase.getCacheLocation().fileExists().isFalse())
                    {
                        "[TM_Xml_Database] in xmlDB_Load_GuidanceItems, cache file didn't exist, so creating it".debug();
                        var o2Timer = new O2Timer("loaded GuidanceItems from disk").start();
                        //Load GuidanceItem from the disk
                        foreach (var guidanceExplorer in tmDatabase.xmlDB_GuidanceExplorers())
                        {
                            var libraryId = guidanceExplorer.library.name.guid();
                            var pathToLibraryGuidanceItems = pathXmlLibraries.pathCombine(guidanceExplorer.library.caption);
                            "libraryId: {0} : {1}".info(libraryId, pathToLibraryGuidanceItems);
                            var filesToLoad = pathToLibraryGuidanceItems.files(true, "*.xml");
                            tmDatabase.xmlDB_Load_GuidanceItemsV3(libraryId, filesToLoad);
                        }

                        //save it to the local cache file (reduces load time from 8s to 0.5s)
                        tmDatabase.save_GuidanceItemsToCache();
                        o2Timer.stop();

                        tmDatabase.ensureFoldersAndViewsIdsAreUnique();
                        tmDatabase.removeMissingGuidanceItemsIdsFromViews();
                    }
                }
            return tmDatabase;
        }
Пример #20
0
		public static IIS_Log_File logFile_Convert(this string file)
		{
			var o2Timer = new O2Timer("created IIS_Log_File object from file: {0}".format(file)).start();
			var logFile = new IIS_Log_File();
			logFile.File = file;
			logFile.convertData();
			o2Timer.stop();
			return logFile;
		}
Пример #21
0
		public void createHost()
		{	
			//if (WebServerHost.isNull())
			{
				var o2Timer = new O2Timer("Creating WebServer host").start();			
				WebServerHost = (WebServerHost)ApplicationHost.CreateApplicationHost(typeof(WebServerHost), "/", WebRootDir);			
				//WebServerHost = ApplicationHost.CreateApplicationHost(typeof(WebServerHost), "/", WebRootDir);							
				o2Timer.stop();
			}
		}
Пример #22
0
    	public FVDL loadFvdl_Raw(string fvdlFile)
    	{
    		"Loading fvdl file: {0}".info(fvdlFile);
			try
			{
				var chachedFvdl = (FVDL)O2LiveObjects.get(fvdlFile);
				if (chachedFvdl.notNull())
					return chachedFvdl;
			}
			catch { }
			 
			var o2Timer = new O2Timer("loading {0} file".format(fvdlFile.fileName())).start();		
	 		var _fvdl = FVDL.Load(fvdlFile);	
	 		O2LiveObjects.set(fvdlFile,_fvdl);
	 		o2Timer.stop();
		 	return _fvdl;  
		}
 public static string saveGuidanceItemsToCache(this string pathXmlLibraries)
 {
     var cacheFile = pathXmlLibraries.getCacheLocation();
     var o2Timer = new O2Timer("saveGuidanceItemsToCache").start();
     lock(TM_Xml_Database.Cached_GuidanceItems)
     {
         TM_Xml_Database.Cached_GuidanceItems.Values.toList().saveAs(cacheFile);
     }
     o2Timer.stop();
     return pathXmlLibraries;
 }
Пример #24
0
 private void processFiles_(List<String> lsFilesToProcess, TreeView tvTargetTreeView)
 {
     O2Timer tO2Timer = new O2Timer("Processing files").start();
     fcdCirData.init();
     CirLoad.loadCirDumpXmlFiles_andPopulateDictionariesWithXrefs(lsFilesToProcess, fcdCirData,
                                                                  false /*bVerbose*/);
     showO2CirDataInTreeViewAndListBox(fcdCirData, tvTargetTreeView, lbO2CirData_Functions);
     tO2Timer.stop();
 }
Пример #25
0
        public void processFile(String sPathToFileToProcess, TreeView tvTargetTreeView)
        {
            O2Timer tO2TimerLoadingCallTracesInTreeView = new O2Timer("Loaded Cir Dump data ").start();

            CommonIRDump cidCommonIrDump =
                CirLoad.loadCirDumpXmlFile_justReturnCommonIRDump(sPathToFileToProcess,
                                                                  true);
            tvTargetTreeView.Tag = cidCommonIrDump;

            if (rb_ClearO2CirDataObjectOnLoad.Checked)
                fcdCirData.init();
            // calculate Xref objects                             
            fcdCirData.bVerbose = true;
            CirDataUtils.populateDictionariesWithXrefs(cidCommonIrDump, fcdCirData);
            showO2CirDataInTreeViewAndListBox(fcdCirData, tvTargetTreeView, lbO2CirData_Functions);

            tO2TimerLoadingCallTracesInTreeView.stop();
        }
        private void step3()
        {
            btCreateTraces.Enabled = false;
            DI.log.debug("Creating Traces");
            O2Timer tTimer = new O2Timer("Creating Traces").start();


            string textFilter = "";
            //TreeView _tvRawData = tvRawData;
            ICirData _cdCirData = cdCirData;
            Dictionary<String, O2TraceBlock_OunceV6> _dO2TraceBlock = dO2TraceBlock;
            Dictionary<string, O2TraceBlock_OunceV6> dRawData = JoinTracesUtils.calculateDictionaryWithRawData(tvRawData);
            const bool bOnlyProcessTracesWithNoCallers = false;

            string targetFolder = DI.config.O2TempDir;
            string fileNamePrefix = Path.GetFileNameWithoutExtension(lbCirFileLoaded.Text);
            const bool bCreateFileWithAllTraces = true;
            const bool bCreateFileWithUniqueTraces = false;
            const bool bDropDuplicateSmartTraces = false;
            const bool bIgnoreRootCallInvocation = false;            

            JoinTracesUtils.createAssessessmentFileWithJoinnedTraces(
                textFilter, dRawData, _cdCirData, _dO2TraceBlock,
                bOnlyProcessTracesWithNoCallers, targetFolder, fileNamePrefix, bCreateFileWithAllTraces,
                bCreateFileWithUniqueTraces, bDropDuplicateSmartTraces, bIgnoreRootCallInvocation, null,
                sAssessmentFile =>
                {

                    this.invokeOnThread(
                        () =>
                        {
                            lbCreatedAssessmentFile.Text = sAssessmentFile;
                            lbCreatedAssessmentFile.Visible = true;

                            btCreateTraces.Enabled = true;
                        });
                    tTimer.stop();
                    if (sAssessmentFile != "")
                        findingsViewerfor_JoinnedTraces.loadO2Assessment(sAssessmentFile);
                    return sAssessmentFile;
                });
        }
Пример #27
0
            public static void addSuportForDynamicMethodsOnSinks(TreeView tvRawData, ICirData cdCirData,
                                                                 bool bAddGluedTracesAsRealTraces)
            {
                O2Timer tTimer = new O2Timer("Adding Support for Dynamic Methods on Sinks").start();
                // first get a unique list of Sink Traces
                Dictionary<AssessmentAssessmentFileFinding, O2AssessmentData_OunceV6> dAllSinkFindings =
                    analyzer.getUniqueListOfSinks(tvRawData);
                //List<String> lsMatches = new List<string>();
                foreach (AssessmentAssessmentFileFinding fFinding in dAllSinkFindings.Keys)
                {
                    CallInvocation ciSink =
                        AnalysisSearch.findTraceTypeInSmartTrace_Recursive_returnCallInvocation(fFinding.Trace,
                                                                                                TraceType.
                                                                                                    Known_Sink);
                    if (ciSink != null)
                    {
                        String sContext = OzasmtUtils_OunceV6.getStringIndexValue(ciSink.cxt_id, dAllSinkFindings[fFinding]);
//                        var fsFilteredSignature = new FilteredSignature(sContext);
                        if (sContext.IndexOf("java.lang.Object.getClass()") > -1 && sContext.IndexOf("new") > -1 &&
                            sContext.IndexOf("$") > -1)
                        {
                            // we have a match lets get the class out
                            String sClass = sContext.Substring(sContext.IndexOf("new") + 4);
                            sClass = sClass.Substring(0, sClass.IndexOf(' '));

                            // Find traces that match the found class and add them as GluedSinks
                            foreach (TreeNode tnMatchNode in tvRawData.Nodes)
                                if (tnMatchNode.Text.IndexOf(sClass) > -1)
                                {
                                    addFindingAsGlueTrace((O2TraceBlock_OunceV6) tnMatchNode.Tag, fFinding,
                                                          dAllSinkFindings[fFinding], tvRawData,
                                                          bAddGluedTracesAsRealTraces);
                                }
                        }
                    }
                }

                tTimer.stop();
            }
Пример #28
0
            public static void mapInterfaces(TreeView tvRawData, ICirData cdCirData, String sHardCodedInterfaceKeywork,
                                             bool bAddGluedTracesAsRealTraces)
            {
                DI.log.debug("Mapping Interfaces");
                O2Timer tTimer = new O2Timer("Interfaces mapping completed").start();
                // Int32 iItemsProcessed = 0;

                Dictionary<AssessmentAssessmentFileFinding, O2AssessmentData_OunceV6> dAllSinkFindings =
                    analyzer.getUniqueListOfSinks(tvRawData);

                foreach (AssessmentAssessmentFileFinding fFinding in dAllSinkFindings.Keys)
                {
                    String sSink = AnalysisUtils.getSink(fFinding, dAllSinkFindings[fFinding]);
                    if (sSink != "" && sSink.IndexOf(sHardCodedInterfaceKeywork) > -1)
                    {
                        if (false == cdCirData.dFunctions_bySignature.ContainsKey(sSink))
                            DI.log.error("in mapInterfaces, could not find signature in loaded CirData file: {0}",
                                         sSink);
                        else
                        {
                            ICirFunction cfCirFunction = cdCirData.dFunctions_bySignature[sSink];
                            ICirClass ccCirClass = cfCirFunction.ParentClass;
                            foreach (ICirClass ccIsSuperClassedBy in ccCirClass.dIsSuperClassedBy.Values)
                            {
                                String sMappedMethodName = cfCirFunction.FunctionSignature.Replace(ccCirClass.Signature,
                                                                                                   ccIsSuperClassedBy.
                                                                                                       Signature);
                                List<O2TraceBlock_OunceV6> lotdMatches =
                                    analyzer.getO2TraceBlocksThatMatchSignature(sMappedMethodName, tvRawData);
                                foreach (O2TraceBlock_OunceV6 otbO2TraceBlockWithTracesToGlue in lotdMatches)
                                {
                                    addFindingAsGlueTrace(otbO2TraceBlockWithTracesToGlue, fFinding,
                                                          dAllSinkFindings[fFinding], tvRawData,
                                                          bAddGluedTracesAsRealTraces);
                                }
                            }
                        }
                    }
                }

                tTimer.stop();
            }
Пример #29
0
            public static void findSpringAttributes(TreeView tvRawData)
            {
                String sFunctionSignature = "ModelMap.addAttribute";
                O2Timer tTimer = new O2Timer("Resolving attribute based function: {0} ").start();

                Dictionary<AssessmentAssessmentFileFinding, O2AssessmentData_OunceV6> dMatches =
                    analyzer.getSinksFindingsThatMatchRegEx(tvRawData, sFunctionSignature);
                foreach (AssessmentAssessmentFileFinding fFinding in dMatches.Keys)
                {
                    // resolve addAddtibute name
                    String sSinkContext = AnalysisUtils.getSinkContext(fFinding, dMatches[fFinding]);
                    var fsFilteredSignature = new FilteredSignature(sSinkContext);
                    String sParameters = fsFilteredSignature.sParameters.Replace("\"", "");
                    String sSpringParameter = sParameters.Substring(0, sParameters.IndexOf(',')).Trim();

                    // create a unique name for it:
                    String sSink = AnalysisUtils.getSink(fFinding, dMatches[fFinding]);
                    String sSinkWithAttributeName = sSink.Replace("(", "_" + sSpringParameter + "(");
                    // make sure we have not added this already
                    if (sSink.IndexOf(sSpringParameter) == -1)
                    {
                        //     String sSinkWithAttributeName = sSink.Replace("(", "_" + sSpringParameter + "(");
                        //      String sSinkWithAttributeName = sSpringParameter;
                        String sUniqueSignature = analyzer.getUniqueSignature(fFinding, TraceType.Known_Sink,
                                                                              dMatches[fFinding], true);
                        var otbO2TraceBlockOfThisFinding = (O2TraceBlock_OunceV6) tvRawData.Nodes[sUniqueSignature].Tag;

                        CallInvocation ciCallInvocation =
                            AnalysisSearch.findTraceTypeInSmartTrace_Recursive_returnCallInvocation(
                                fFinding.Trace, TraceType.Known_Sink);
                        UInt32 uNewId = OzasmtUtils_OunceV6.addTextToStringIndexes(sSinkWithAttributeName,
                                                                                   dMatches[fFinding].arAssessmentRun);
                        ;
                        ciCallInvocation.sig_id = uNewId;
                        DI.log.debug(" Found spring attribute '{0}' on sinks and modified to {1}", sSpringParameter,
                                     sSinkWithAttributeName);
                        //o2.analysis.Analysis.getSink(fFinding, dMatches[fFinding]));
                        otbO2TraceBlockOfThisFinding.sSignature = sSinkWithAttributeName;
                        otbO2TraceBlockOfThisFinding.sUniqueName = analyzer.getUniqueSignature(fFinding,
                                                                                               TraceType.
                                                                                                   Known_Sink,
                                                                                               dMatches[fFinding], true);

                        List<O2TraceBlock_OunceV6> lotbO2TraceBlockWithVelocityMappings =
                            analyzer.getO2TraceBlocksThatMatchSignature(sSinkWithAttributeName, tvRawData);


/*                        String sVelocityMapping = String.Format("{0}            0", sSinkWithAttributeName);
                        TreeNode tnVelocityNode = tvRawData.Nodes[sVelocityMapping];
                        if (tnVelocityNode != null)
 */
                        foreach (
                            O2TraceBlock_OunceV6 otbO2TraceBlockWithVelocityMappings in lotbO2TraceBlockWithVelocityMappings)
                        {
                            if (otbO2TraceBlockWithVelocityMappings.sFile.IndexOf(".vm") > -1)

                                //O2TraceBlock_OunceV6 otbO2TraceBlockWithVelocityMappings = (O2TraceBlock_OunceV6)tnVelocityNode.Tag;
                                foreach (
                                    AssessmentAssessmentFileFinding fVelocityFinding in
                                        otbO2TraceBlockWithVelocityMappings.dSinks.Keys)
                                {
                                    if (false == otbO2TraceBlockOfThisFinding.dGluedSinks.ContainsKey(fVelocityFinding))
                                        otbO2TraceBlockOfThisFinding.dGluedSinks.Add(fVelocityFinding,
                                                                                     otbO2TraceBlockWithVelocityMappings
                                                                                         .dSinks[fVelocityFinding]);
                                    if (false == otbO2TraceBlockOfThisFinding.dSinks.ContainsKey(fVelocityFinding))
                                        otbO2TraceBlockOfThisFinding.dSinks.Add(fVelocityFinding,
                                                                                otbO2TraceBlockWithVelocityMappings.
                                                                                    dSinks[fVelocityFinding]);
                                }
                        }
                    }
                }
                tTimer.stop();
            }
Пример #30
0
		public static Fortify_Scan mapFvdlData(this Fortify_Scan fortifyScan)
		{
			var o2Timer = new O2Timer("Mapped Fvdl Data").start();
			fortifyScan.mapScanDetails()
					   .mapContextPool()
					   .mapDescriptions()
					   .mapCalledWithNoDefs()
					   .mapSinks()
					   .mapSources()
					   .mapSnippets()
					   .mapVulnerabilities();
			o2Timer.stop();		   
			return fortifyScan;
		}