Showing
1 changed file
with
37 additions
and
15 deletions
| ... | @@ -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 | } | ... | ... |
-
Please register or login to post a comment