노현종

merge

...@@ -219,12 +219,26 @@ namespace VulnUserCodeAnalyzer ...@@ -219,12 +219,26 @@ namespace VulnUserCodeAnalyzer
219 var repoBytes = Encoding.Unicode.GetBytes(repository); 219 var repoBytes = Encoding.Unicode.GetBytes(repository);
220 var repoBase64 = Convert.ToBase64String(repoBytes); 220 var repoBase64 = Convert.ToBase64String(repoBytes);
221 221
222 - foreach (var (userName, repository) in reposits) 222 + var repoDir = new DirectoryInfo($@"C:\Repo\{repoBase64}");
223 + if (repoDir.Exists)
223 { 224 {
224 - Console.WriteLine($"{userName}, {repository}"); 225 + continue;
225 } 226 }
227 + repoDir.Create();
228 + Console.WriteLine($"Clone... Path : {repoDir.FullName}, Url : {repository}");
229 + Clone(repoDir.FullName, repository);
226 230
227 - Console.ReadLine(); 231 + repoPath = repoDir.FullName;
232 + userId = userName;
233 + }
234 + if (!string.IsNullOrWhiteSpace(repoPath) && !string.IsNullOrWhiteSpace(userId))
235 + {
236 + break;
237 + }
238 + repoWatch.Restart();
239 + }
240 + //Console.WriteLine("엔터를 누르세요");
241 + //Console.ReadLine();
228 242
229 /* hashDict = 사용된 사용자 함수 정보 */ 243 /* hashDict = 사용된 사용자 함수 정보 */
230 var hashDict = new Dictionary<int, HashSet<VulnAbstractCrawler.UserBlock>>(); 244 var hashDict = new Dictionary<int, HashSet<VulnAbstractCrawler.UserBlock>>();
...@@ -283,7 +297,7 @@ namespace VulnUserCodeAnalyzer ...@@ -283,7 +297,7 @@ namespace VulnUserCodeAnalyzer
283 * CVE를 가지고 있다고 인정하는 프로그램 정책 때문 297 * CVE를 가지고 있다고 인정하는 프로그램 정책 때문
284 */ 298 */
285 var searchedCveHashList = VulnRDS.SelectVulnbyCve(cve); 299 var searchedCveHashList = VulnRDS.SelectVulnbyCve(cve);
286 - Console.WriteLine($"cve:{cve}, {searchedCveHashList.Count()}개 가져옴"); 300 + Console.WriteLine($"CVE:{cve}, Received Count : {searchedCveHashList.Count()}");
287 foreach (var s in searchedCveHashList) 301 foreach (var s in searchedCveHashList)
288 { 302 {
289 vulnHashSet.Add(s); 303 vulnHashSet.Add(s);
...@@ -297,7 +311,7 @@ namespace VulnUserCodeAnalyzer ...@@ -297,7 +311,7 @@ namespace VulnUserCodeAnalyzer
297 /* 본격적인 취약점 매칭 부분 */ 311 /* 본격적인 취약점 매칭 부분 */
298 foreach (var vulnSet in vulnDict) 312 foreach (var vulnSet in vulnDict)
299 { 313 {
300 - //Console.WriteLine($"-----cve:{vulnSet.Key}"); 314 + Console.WriteLine($"-----cve:{vulnSet.Key}");
301 bool match = false; 315 bool match = false;
302 foreach (var vuln in vulnSet.Value) 316 foreach (var vuln in vulnSet.Value)
303 { 317 {
...@@ -309,6 +323,7 @@ namespace VulnUserCodeAnalyzer ...@@ -309,6 +323,7 @@ namespace VulnUserCodeAnalyzer
309 { 323 {
310 if (hashDict.ContainsKey(vuln.LenFunc)) 324 if (hashDict.ContainsKey(vuln.LenFunc))
311 { 325 {
326 + //Console.WriteLine("찾음");
312 /* Bloom Filter는 아쉽게도 포함 여부만 알 수 있기에 327 /* Bloom Filter는 아쉽게도 포함 여부만 알 수 있기에
313 * 포함되었음을 알았다면 검색해서 정보를 구한다. */ 328 * 포함되었음을 알았다면 검색해서 정보를 구한다. */
314 var userBlock = hashDict[vuln.LenFunc].FirstOrDefault(b => b.Hash == vuln.BlockHash); 329 var userBlock = hashDict[vuln.LenFunc].FirstOrDefault(b => b.Hash == vuln.BlockHash);
...@@ -337,13 +352,13 @@ namespace VulnUserCodeAnalyzer ...@@ -337,13 +352,13 @@ namespace VulnUserCodeAnalyzer
337 /* 취약점 레코드가 전부 있어야 CVE 찾음 인정 */ 352 /* 취약점 레코드가 전부 있어야 CVE 찾음 인정 */
338 if (match) 353 if (match)
339 { 354 {
340 - Console.WriteLine($"CVE 찾음 {vulnSet.Key}"); 355 + Console.WriteLine($"Matched CVE : {vulnSet.Key}");
341 /* 찾았으면 cve값을 기록함 밑에서 찾은 cve 정보 전송하기 위해 */ 356 /* 찾았으면 cve값을 기록함 밑에서 찾은 cve 정보 전송하기 위해 */
342 findCveList.Add(vulnSet.Key); 357 findCveList.Add(vulnSet.Key);
343 } 358 }
344 else 359 else
345 { 360 {
346 - Console.WriteLine("없음"); 361 + Console.WriteLine("Not");
347 } 362 }
348 } 363 }
349 stopwatch.Stop(); 364 stopwatch.Stop();
...@@ -351,8 +366,10 @@ namespace VulnUserCodeAnalyzer ...@@ -351,8 +366,10 @@ namespace VulnUserCodeAnalyzer
351 var hours = stopwatch.Elapsed.Hours; 366 var hours = stopwatch.Elapsed.Hours;
352 var minutes = stopwatch.Elapsed.Minutes; 367 var minutes = stopwatch.Elapsed.Minutes;
353 var seconds = stopwatch.Elapsed.Seconds; 368 var seconds = stopwatch.Elapsed.Seconds;
354 - Console.WriteLine($"경과 시간 {hours.ToString("00")}:{minutes.ToString("00")}:{seconds.ToString("00")}"); 369 + Console.WriteLine($"Elapsed Time : {hours.ToString("00")}:{minutes.ToString("00")}:{seconds.ToString("00")}");
355 - Console.WriteLine($"찾은 CVE 개수 : {findCveList.Count}"); 370 + Console.WriteLine($"Matched CVE Count : {findCveList.Count}");
371 + //Console.ReadLine();
372 +
356 var yearMatch = new Regex(@"CVE-(\d{4})-(\d+)"); 373 var yearMatch = new Regex(@"CVE-(\d{4})-(\d+)");
357 foreach (var cve in findCveList) 374 foreach (var cve in findCveList)
358 { 375 {
...@@ -406,9 +423,9 @@ namespace VulnUserCodeAnalyzer ...@@ -406,9 +423,9 @@ namespace VulnUserCodeAnalyzer
406 423
407 var urlBytes = Convert.FromBase64String(findCveDict[cve].FirstOrDefault().Url); 424 var urlBytes = Convert.FromBase64String(findCveDict[cve].FirstOrDefault().Url);
408 string url = Encoding.Unicode.GetString(urlBytes); 425 string url = Encoding.Unicode.GetString(urlBytes);
426 + //Console.WriteLine(findCveDict[cve].FirstOrDefault().Path.Replace(repoPath, ""));
409 427
410 - /* DB 전송 */ 428 + var vulnDetail = new VulnRDS.Vuln_detail
411 - VulnRDS.InsertVulnDetail(new VulnRDS.Vuln_detail
412 { 429 {
413 CveName = data.Code, 430 CveName = data.Code,
414 Type = type, 431 Type = type,
...@@ -417,13 +434,18 @@ namespace VulnUserCodeAnalyzer ...@@ -417,13 +434,18 @@ namespace VulnUserCodeAnalyzer
417 CveDetail = data.Detail, 434 CveDetail = data.Detail,
418 Publish_date = data.Publish_Date.ToString("yyyy-MM-dd"), 435 Publish_date = data.Publish_Date.ToString("yyyy-MM-dd"),
419 Update_date = data.Update_Date.ToString("yyyy-MM-dd"), 436 Update_date = data.Update_Date.ToString("yyyy-MM-dd"),
420 - UserName = "samsung", 437 + UserName = userId,
421 Url = url, 438 Url = url,
422 - FileName = findCveDict[cve].FirstOrDefault().Path.Replace(@"C:\code", ""), 439 + FileName = findCveDict[cve].FirstOrDefault().Path.Replace(repoPath, ""),
423 FuncName = findCveDict[cve].FirstOrDefault().FuncName, 440 FuncName = findCveDict[cve].FirstOrDefault().FuncName,
424 Product = data.Type, 441 Product = data.Type,
425 - }); 442 + };
426 - Console.WriteLine("추가 완료"); 443 +
444 + /* DB 전송 */
445 + VulnRDS.InsertVulnDetail(vulnDetail);
446 +
447 + Console.WriteLine($"Added CVE: {vulnDetail.CveName}, Type: {vulnDetail.Type}, CVSS: {vulnDetail.Level}");
448 + }
427 } 449 }
428 } 450 }
429 } 451 }
......