Showing
4 changed files
with
24 additions
and
15 deletions
... | @@ -69,12 +69,12 @@ namespace VulnCrawler | ... | @@ -69,12 +69,12 @@ 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.GetCriticalVariant(@"cs64_chunk.chunkSize64 = 12345678;"); | 72 | + var fields = c.ExtractCriticalVariant(@"!DoReadFile (infile, &ds64_chunk, sizeof (DS64Chunk), &bcount) ||/* aaaa */"); |
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:\VulnPy"); |
79 | if (directorys.Length == 0) { | 79 | if (directorys.Length == 0) { |
80 | Console.WriteLine("Repository 목록 찾기 실패"); | 80 | Console.WriteLine("Repository 목록 찾기 실패"); | ... | ... |
... | @@ -168,24 +168,33 @@ namespace VulnCrawler | ... | @@ -168,24 +168,33 @@ namespace VulnCrawler |
168 | /// </summary> | 168 | /// </summary> |
169 | /// <param name="line">현재 코드줄</param> | 169 | /// <param name="line">현재 코드줄</param> |
170 | /// <returns></returns> | 170 | /// <returns></returns> |
171 | - public IEnumerable<string> GetCriticalVariant(string line) | 171 | + public IEnumerable<string> ExtractCriticalVariant(string line) |
172 | { | 172 | { |
173 | line = line.Trim(); | 173 | line = line.Trim(); |
174 | + if (string.IsNullOrWhiteSpace(line)) | ||
175 | + { | ||
176 | + yield break; | ||
177 | + } | ||
174 | if (line.StartsWith("//")) | 178 | if (line.StartsWith("//")) |
175 | { | 179 | { |
176 | yield break; | 180 | yield break; |
177 | } | 181 | } |
178 | string declarePattern = @"(?<Declare>[a-zA-Z0-9_\.]+) [a-zA-Z0-9_\.]+ ="; | 182 | string declarePattern = @"(?<Declare>[a-zA-Z0-9_\.]+) [a-zA-Z0-9_\.]+ ="; |
179 | // 메서드 정규식 패턴 | 183 | // 메서드 정규식 패턴 |
180 | - string methodPattern = @"(\w+)\s*\("; | 184 | + string methodPattern = @"([a-zA-Z0-9_\.]+)\s*\("; |
181 | // 변수 정규식 패턴 | 185 | // 변수 정규식 패턴 |
182 | - string fieldPattern = @"^*?[a-zA-Z0-9_\.]+"; | 186 | + string fieldPattern = @"^*?[a-zA-Z0-9_\.\[\]]+"; |
183 | 187 | ||
184 | string invalidPattern = @"^[\d\.]+"; | 188 | string invalidPattern = @"^[\d\.]+"; |
185 | 189 | ||
186 | - string commentPattern = @"("".*"")"; | 190 | + string commentPattern = @"[""].*[""]"; |
191 | + | ||
192 | + string commentPattern2 = @"\/\/.*"; | ||
193 | + string commentPattern3 = @"\/\*.+\*\/"; | ||
187 | 194 | ||
188 | line = Regex.Replace(line, commentPattern, ""); | 195 | line = Regex.Replace(line, commentPattern, ""); |
196 | + line = Regex.Replace(line, commentPattern2, ""); | ||
197 | + line = Regex.Replace(line, commentPattern3, ""); | ||
189 | // 메서드 목록 | 198 | // 메서드 목록 |
190 | var methodSets = new HashSet<string>(); | 199 | var methodSets = new HashSet<string>(); |
191 | 200 | ||
... | @@ -208,7 +217,7 @@ namespace VulnCrawler | ... | @@ -208,7 +217,7 @@ namespace VulnCrawler |
208 | if (method.Success) | 217 | if (method.Success) |
209 | { | 218 | { |
210 | Console.WriteLine(method.Groups[1].Value); | 219 | Console.WriteLine(method.Groups[1].Value); |
211 | - methodSets.Add(method.Groups[1].Value); | 220 | + methodSets.Add(method.Groups[1].Value); // aaaa |
212 | } | 221 | } |
213 | } | 222 | } |
214 | Console.WriteLine("----"); | 223 | Console.WriteLine("----"); | ... | ... |
... | @@ -21,7 +21,7 @@ namespace VulnCrawler | ... | @@ -21,7 +21,7 @@ namespace VulnCrawler |
21 | protected override string RegexFuncPattern => $@"@@ \-(?<{OldStart}>\d+),(?<{OldLines}>\d+) \+(?<{NewStart}>\d+),(?<{NewLines}>\d+) @@ def (?<{MethodName}>\w+)"; | 21 | protected override string RegexFuncPattern => $@"@@ \-(?<{OldStart}>\d+),(?<{OldLines}>\d+) \+(?<{NewStart}>\d+),(?<{NewLines}>\d+) @@ def (?<{MethodName}>\w+)"; |
22 | 22 | ||
23 | 23 | ||
24 | - protected override string ReservedFileName => throw new NotImplementedException(); | 24 | + protected override string ReservedFileName => "PyReserved.txt"; |
25 | 25 | ||
26 | // protected override Regex MethodExtractor => new Regex(RegexFuncPattern); | 26 | // protected override Regex MethodExtractor => new Regex(RegexFuncPattern); |
27 | 27 | ... | ... |
... | @@ -14,24 +14,24 @@ namespace VulnCrawler | ... | @@ -14,24 +14,24 @@ namespace VulnCrawler |
14 | { | 14 | { |
15 | // 템플릿 메서드 패턴 | 15 | // 템플릿 메서드 패턴 |
16 | public static void Run<T>(string dirPath) where T : VulnAbstractCrawler, new() { | 16 | public static void Run<T>(string dirPath) where T : VulnAbstractCrawler, new() { |
17 | - var self = new T(); | 17 | + var crawler = new T(); |
18 | - self.Init(dirPath); | 18 | + crawler.Init(dirPath); |
19 | - var commits = self.Commits; | 19 | + var commits = crawler.Commits; |
20 | foreach (var commit in commits) { | 20 | foreach (var commit in commits) { |
21 | // 커밋 메시지 | 21 | // 커밋 메시지 |
22 | string message = commit.Message; | 22 | string message = commit.Message; |
23 | - string cve = self.GetCVE(message); | 23 | + string cve = crawler.GetCVE(message); |
24 | if (string.IsNullOrEmpty(cve)) { | 24 | if (string.IsNullOrEmpty(cve)) { |
25 | continue; | 25 | continue; |
26 | } | 26 | } |
27 | foreach (var parent in commit.Parents) { | 27 | foreach (var parent in commit.Parents) { |
28 | // 부모 커밋과 현재 커밋을 Compare 하여 패치 내역을 가져옴 | 28 | // 부모 커밋과 현재 커밋을 Compare 하여 패치 내역을 가져옴 |
29 | - var patch = self.Repository.Diff.Compare<Patch>(parent.Tree, commit.Tree); | 29 | + var patch = crawler.Repository.Diff.Compare<Patch>(parent.Tree, commit.Tree); |
30 | // 패치 엔트리 파일 배열 중에 파일 확장자가 .py인 것만 가져옴 | 30 | // 패치 엔트리 파일 배열 중에 파일 확장자가 .py인 것만 가져옴 |
31 | // (실질적인 코드 변경 커밋만 보기 위해서) | 31 | // (실질적인 코드 변경 커밋만 보기 위해서) |
32 | - var entrys = self.GetPatchEntryChanges(patch); | 32 | + var entrys = crawler.GetPatchEntryChanges(patch); |
33 | // 현재 커밋에 대한 패치 엔트리 배열을 출력함 | 33 | // 현재 커밋에 대한 패치 엔트리 배열을 출력함 |
34 | - PrintPatchEntrys(entrys, self, message, cve); | 34 | + PrintPatchEntrys(entrys, crawler, message, cve); |
35 | } | 35 | } |
36 | } | 36 | } |
37 | } | 37 | } | ... | ... |
-
Please register or login to post a comment