Showing
4 changed files
with
56 additions
and
34 deletions
... | @@ -69,13 +69,13 @@ namespace VulnCrawler | ... | @@ -69,13 +69,13 @@ namespace VulnCrawler |
69 | 69 | ||
70 | // var fields = VulnWorker.GetCriticalVariant(@"return _is_safe_url(url, host) and _is_safe_url(url.replace('\\', '/'), host)"); | 70 | // var fields = VulnWorker.GetCriticalVariant(@"return _is_safe_url(url, host) and _is_safe_url(url.replace('\\', '/'), host)"); |
71 | var c = new VulnC(); | 71 | var c = new VulnC(); |
72 | - var fields = c.ExtractCriticalVariant(@"!DoReadFile (infile, &ds64_chunk, sizeof (DS64Chunk), &bcount) ||/* aaaa */"); | 72 | + var fields = c.ExtractCriticalVariant(@"if (s->session->peer != s->session->sess_cert->peer_key->x509)"); |
73 | foreach (var item in fields) | 73 | foreach (var item in fields) |
74 | { | 74 | { |
75 | Console.WriteLine(item); | 75 | Console.WriteLine(item); |
76 | } | 76 | } |
77 | // return; | 77 | // return; |
78 | - var directorys = Directory.GetDirectories(@"c:\VulnPy"); | 78 | + var directorys = Directory.GetDirectories(@"c:\VulnC"); |
79 | if (directorys.Length == 0) { | 79 | if (directorys.Length == 0) { |
80 | Console.WriteLine("Repository 목록 찾기 실패"); | 80 | Console.WriteLine("Repository 목록 찾기 실패"); |
81 | return; | 81 | return; |
... | @@ -83,7 +83,7 @@ namespace VulnCrawler | ... | @@ -83,7 +83,7 @@ namespace VulnCrawler |
83 | // Repository 목록 만큼 반복함. | 83 | // Repository 목록 만큼 반복함. |
84 | foreach (var directory in directorys) { | 84 | foreach (var directory in directorys) { |
85 | // 템플릿 패턴화 T : VulnAbstractCrawler | 85 | // 템플릿 패턴화 T : VulnAbstractCrawler |
86 | - VulnWorker.Run<VulnPython>(directory); | 86 | + VulnWorker.Run<VulnC>(directory); |
87 | } | 87 | } |
88 | } | 88 | } |
89 | 89 | ... | ... |
... | @@ -73,7 +73,9 @@ namespace VulnCrawler | ... | @@ -73,7 +73,9 @@ namespace VulnCrawler |
73 | #endregion | 73 | #endregion |
74 | 74 | ||
75 | public void Init(string path) { | 75 | public void Init(string path) { |
76 | + Console.WriteLine("로딩중"); | ||
76 | Repository = new Repository(path); | 77 | Repository = new Repository(path); |
78 | + Console.WriteLine("로딩 완료"); | ||
77 | Commits = SearchCommits(); | 79 | Commits = SearchCommits(); |
78 | } | 80 | } |
79 | /// <summary> | 81 | /// <summary> |
... | @@ -88,7 +90,7 @@ namespace VulnCrawler | ... | @@ -88,7 +90,7 @@ namespace VulnCrawler |
88 | /// <summary> | 90 | /// <summary> |
89 | /// 커밋에서 검색할 정규식 문자열 | 91 | /// 커밋에서 검색할 정규식 문자열 |
90 | /// </summary> | 92 | /// </summary> |
91 | - public string SearchCommitPattern => @"CVE-20\d\d-\d{4}"; | 93 | + public string SearchCommitPattern => @"CVE[ -]\d{4}[ -]\d{4}"; |
92 | /// <summary> | 94 | /// <summary> |
93 | /// 패치 코드에서 함수 찾을 정규식 패턴 문자열 | 95 | /// 패치 코드에서 함수 찾을 정규식 패턴 문자열 |
94 | /// </summary> | 96 | /// </summary> |
... | @@ -142,6 +144,8 @@ namespace VulnCrawler | ... | @@ -142,6 +144,8 @@ namespace VulnCrawler |
142 | /// <returns>커밋 목록</returns> | 144 | /// <returns>커밋 목록</returns> |
143 | public virtual IEnumerable<Commit> SearchCommits() { | 145 | public virtual IEnumerable<Commit> SearchCommits() { |
144 | // where => 조건에 맞는 것을 찾음(CVE-20\d\d-\d{4}로 시작하는 커밋만 골라냄) | 146 | // where => 조건에 맞는 것을 찾음(CVE-20\d\d-\d{4}로 시작하는 커밋만 골라냄) |
147 | + Console.WriteLine("출력중"); | ||
148 | + Console.WriteLine(Repository.Commits.Count()); | ||
145 | var commits = Repository.Commits | 149 | var commits = Repository.Commits |
146 | .Where(c => Regex.Match(c.Message, SearchCommitPattern, RegexOptions.IgnoreCase).Success) | 150 | .Where(c => Regex.Match(c.Message, SearchCommitPattern, RegexOptions.IgnoreCase).Success) |
147 | .ToList(); | 151 | .ToList(); |
... | @@ -183,7 +187,7 @@ namespace VulnCrawler | ... | @@ -183,7 +187,7 @@ namespace VulnCrawler |
183 | // 메서드 정규식 패턴 | 187 | // 메서드 정규식 패턴 |
184 | string methodPattern = @"([a-zA-Z0-9_\.]+)\s*\("; | 188 | string methodPattern = @"([a-zA-Z0-9_\.]+)\s*\("; |
185 | // 변수 정규식 패턴 | 189 | // 변수 정규식 패턴 |
186 | - string fieldPattern = @"^*?[a-zA-Z0-9_\.\[\]]+"; | 190 | + string fieldPattern = @"^*?[a-zA-Z0-9_\.\[\]\-\>]+"; |
187 | 191 | ||
188 | string invalidPattern = @"^[\d\.]+"; | 192 | string invalidPattern = @"^[\d\.]+"; |
189 | 193 | ... | ... |
... | @@ -10,7 +10,7 @@ namespace VulnCrawler | ... | @@ -10,7 +10,7 @@ namespace VulnCrawler |
10 | { | 10 | { |
11 | public class VulnC : VulnAbstractCrawler | 11 | public class VulnC : VulnAbstractCrawler |
12 | { | 12 | { |
13 | - protected override string RegexFuncPattern => $@"@@ \-(?<{OldStart}>\d+),(?<{OldLines}>\d+) \+(?<{NewStart}>\d+),(?<{NewLines}>\d+) @@ (?<{MethodName}>(static)? [\w]+ [\w]+)\([\w \*\,\t\n]*\)"; | 13 | + protected override string RegexFuncPattern => $@"@@ \-(?<{OldStart}>\d+),(?<{OldLines}>\d+) \+(?<{NewStart}>\d+),(?<{NewLines}>\d+) @@ (?<{MethodName}>(static)?( const )? [\w]+ [\w]+\([\w \*\,\t\n]*[\)\,])"; |
14 | protected override string Extension => ".c"; | 14 | protected override string Extension => ".c"; |
15 | protected override string ReservedFileName => "CReserved.txt"; | 15 | protected override string ReservedFileName => "CReserved.txt"; |
16 | public override MatchCollection GetMatches(string patchCode) { | 16 | public override MatchCollection GetMatches(string patchCode) { | ... | ... |
... | @@ -17,6 +17,7 @@ namespace VulnCrawler | ... | @@ -17,6 +17,7 @@ namespace VulnCrawler |
17 | var crawler = new T(); | 17 | var crawler = new T(); |
18 | crawler.Init(dirPath); | 18 | crawler.Init(dirPath); |
19 | var commits = crawler.Commits; | 19 | var commits = crawler.Commits; |
20 | + Console.WriteLine(commits.Count()); | ||
20 | foreach (var commit in commits) { | 21 | foreach (var commit in commits) { |
21 | // 커밋 메시지 | 22 | // 커밋 메시지 |
22 | string message = commit.Message; | 23 | string message = commit.Message; |
... | @@ -42,6 +43,9 @@ namespace VulnCrawler | ... | @@ -42,6 +43,9 @@ namespace VulnCrawler |
42 | foreach (var entry in entrys) { | 43 | foreach (var entry in entrys) { |
43 | // 기존 소스코드 | 44 | // 기존 소스코드 |
44 | var oldOid = entry.OldOid; | 45 | var oldOid = entry.OldOid; |
46 | + | ||
47 | + try | ||
48 | + { | ||
45 | Blob oldBlob = self.Repository.Lookup<Blob>(oldOid); | 49 | Blob oldBlob = self.Repository.Lookup<Blob>(oldOid); |
46 | string oldContent = oldBlob.GetContentText(); | 50 | string oldContent = oldBlob.GetContentText(); |
47 | 51 | ||
... | @@ -49,15 +53,14 @@ namespace VulnCrawler | ... | @@ -49,15 +53,14 @@ namespace VulnCrawler |
49 | var newOid = entry.Oid; | 53 | var newOid = entry.Oid; |
50 | Blob newBlob = self.Repository.Lookup<Blob>(newOid); | 54 | Blob newBlob = self.Repository.Lookup<Blob>(newOid); |
51 | string newContent = newBlob.GetContentText(); | 55 | string newContent = newBlob.GetContentText(); |
52 | - | ||
53 | var regs = self.GetMatches(entry.Patch); | 56 | var regs = self.GetMatches(entry.Patch); |
54 | - | ||
55 | #region 패치 전 후 코드 출력 | 57 | #region 패치 전 후 코드 출력 |
56 | // 패치 전 코드 (oldContent) | 58 | // 패치 전 코드 (oldContent) |
57 | // 패치 후 코드 (newContent) | 59 | // 패치 후 코드 (newContent) |
58 | // 패치 코드 (entry.Patch) | 60 | // 패치 코드 (entry.Patch) |
59 | // 출력 | 61 | // 출력 |
60 | - //if (regs.Count > 0) { | 62 | + if (regs.Count > 0) |
63 | + { | ||
61 | // Console.BackgroundColor = ConsoleColor.DarkBlue; | 64 | // Console.BackgroundColor = ConsoleColor.DarkBlue; |
62 | // Console.WriteLine($"Old Content: \n{oldContent}"); | 65 | // Console.WriteLine($"Old Content: \n{oldContent}"); |
63 | // Console.ResetColor(); | 66 | // Console.ResetColor(); |
... | @@ -65,30 +68,7 @@ namespace VulnCrawler | ... | @@ -65,30 +68,7 @@ namespace VulnCrawler |
65 | // Console.BackgroundColor = ConsoleColor.DarkMagenta; | 68 | // Console.BackgroundColor = ConsoleColor.DarkMagenta; |
66 | // Console.WriteLine($"New Content: \n{newContent}"); | 69 | // Console.WriteLine($"New Content: \n{newContent}"); |
67 | // Console.ResetColor(); | 70 | // Console.ResetColor(); |
68 | - // Console.BackgroundColor = ConsoleColor.DarkRed; | ||
69 | - // Console.WriteLine($"Patched: \n{entry.Patch}"); | ||
70 | - | ||
71 | - // Console.ResetColor(); | ||
72 | - // Console.WriteLine("-----------"); | ||
73 | - // Console.WriteLine(regs.Count); | ||
74 | - | ||
75 | - //} | ||
76 | - | ||
77 | - // 패치 코드에서 매칭된 파이썬 함수들로부터 | ||
78 | - // 패치 전 코드 파일(oldBlob)을 탐색하여 원본 파이썬 함수 가져오고(originalFunc) | ||
79 | - // | ||
80 | -#endregion | ||
81 | - | ||
82 | - foreach (var reg in regs) { | ||
83 | - var match = reg as Match; | ||
84 | - string methodName = match.Groups[VulnAbstractCrawler.MethodName].Value; | ||
85 | 71 | ||
86 | - string originalFunc, md5; | ||
87 | - | ||
88 | - (originalFunc, md5) = self.Process(oldBlob.GetContentStream(), | ||
89 | - match.Groups[VulnAbstractCrawler.MethodName].Value); | ||
90 | - | ||
91 | - #region 현재 패치 엔트리 정보 출력(추가된 줄 수, 삭제된 줄 수, 패치 이전 경로, 패치 후 경로) | ||
92 | Console.ForegroundColor = ConsoleColor.Blue; | 72 | Console.ForegroundColor = ConsoleColor.Blue; |
93 | Console.WriteLine($"status: {entry.Status.ToString()}"); | 73 | Console.WriteLine($"status: {entry.Status.ToString()}"); |
94 | Console.WriteLine($"added: {entry.LinesAdded.ToString()}, deleted: {entry.LinesDeleted.ToString()}"); | 74 | Console.WriteLine($"added: {entry.LinesAdded.ToString()}, deleted: {entry.LinesDeleted.ToString()}"); |
... | @@ -105,12 +85,44 @@ namespace VulnCrawler | ... | @@ -105,12 +85,44 @@ namespace VulnCrawler |
105 | Console.WriteLine($"Commit Message: {commitMsg}"); | 85 | Console.WriteLine($"Commit Message: {commitMsg}"); |
106 | Console.ResetColor(); | 86 | Console.ResetColor(); |
107 | 87 | ||
88 | + | ||
89 | + | ||
90 | + Console.BackgroundColor = ConsoleColor.DarkRed; | ||
91 | + Console.WriteLine($"Patched: \n{entry.Patch}"); | ||
92 | + | ||
93 | + Console.ResetColor(); | ||
94 | + // Console.WriteLine("-----------"); | ||
95 | + | ||
96 | + | ||
97 | + | ||
98 | + } | ||
99 | + | ||
100 | + | ||
101 | + | ||
102 | + // 패치 코드에서 매칭된 파이썬 함수들로부터 | ||
103 | + // 패치 전 코드 파일(oldBlob)을 탐색하여 원본 파이썬 함수 가져오고(originalFunc) | ||
104 | + // | ||
105 | + #endregion | ||
106 | + | ||
107 | + foreach (var reg in regs) | ||
108 | + { | ||
109 | + var match = reg as Match; | ||
110 | + string methodName = match.Groups[VulnAbstractCrawler.MethodName].Value.Trim(); | ||
111 | + Console.WriteLine("methodName = " + methodName); | ||
112 | + string originalFunc, md5; | ||
113 | + (originalFunc, md5) = self.Process(oldBlob.GetContentStream(), | ||
114 | + match.Groups[VulnAbstractCrawler.MethodName].Value); | ||
115 | + | ||
116 | + #region 현재 패치 엔트리 정보 출력(추가된 줄 수, 삭제된 줄 수, 패치 이전 경로, 패치 후 경로) | ||
117 | + | ||
118 | + | ||
119 | + | ||
108 | // 패치 전 원본 함수 | 120 | // 패치 전 원본 함수 |
109 | Console.WriteLine($"Original Func: {originalFunc}"); | 121 | Console.WriteLine($"Original Func: {originalFunc}"); |
110 | // 해쉬 후 | 122 | // 해쉬 후 |
111 | Console.WriteLine($"Original Func MD5: {md5}"); | 123 | Console.WriteLine($"Original Func MD5: {md5}"); |
112 | - Console.BackgroundColor = ConsoleColor.DarkRed; | 124 | + //Console.BackgroundColor = ConsoleColor.DarkRed; |
113 | - Console.WriteLine($"Patched: \n{entry.Patch}"); | 125 | + //Console.WriteLine($"Patched: \n{entry.Patch}"); |
114 | 126 | ||
115 | Console.ResetColor(); | 127 | Console.ResetColor(); |
116 | Console.WriteLine("=============================="); | 128 | Console.WriteLine("=============================="); |
... | @@ -119,6 +131,12 @@ namespace VulnCrawler | ... | @@ -119,6 +131,12 @@ namespace VulnCrawler |
119 | 131 | ||
120 | } | 132 | } |
121 | } | 133 | } |
134 | + catch (Exception) | ||
135 | + { | ||
136 | + continue; | ||
137 | + } | ||
138 | + | ||
139 | + } | ||
122 | } | 140 | } |
123 | 141 | ||
124 | } | 142 | } | ... | ... |
-
Please register or login to post a comment