노현종

Merge branch 'master' into khumaster

...@@ -66,6 +66,16 @@ namespace VulnCrawler ...@@ -66,6 +66,16 @@ namespace VulnCrawler
66 } 66 }
67 public static void Run() { 67 public static void Run() {
68 // Repository 폴더들이 있는 주소를 지정하면 하위 폴더 목록을 가져옴(Repository 목록) 68 // Repository 폴더들이 있는 주소를 지정하면 하위 폴더 목록을 가져옴(Repository 목록)
69 +
70 + // var fields = VulnWorker.GetCriticalVariant(@"return _is_safe_url(url, host) and _is_safe_url(url.replace('\\', '/'), host)");
71 + var fields = VulnWorker.GetCriticalVariant(@"if(i + inl < bl) {");
72 +
73 + foreach (var item in fields)
74 + {
75 + Console.WriteLine(item);
76 + }
77 +
78 + return;
69 var directorys = Directory.GetDirectories(@"c:\VulnPy"); 79 var directorys = Directory.GetDirectories(@"c:\VulnPy");
70 if (directorys.Length == 0) { 80 if (directorys.Length == 0) {
71 Console.WriteLine("Repository 목록 찾기 실패"); 81 Console.WriteLine("Repository 목록 찾기 실패");
......
...@@ -13,6 +13,8 @@ namespace VulnCrawler ...@@ -13,6 +13,8 @@ namespace VulnCrawler
13 // 추상 클래스 13 // 추상 클래스
14 public abstract class VulnAbstractCrawler 14 public abstract class VulnAbstractCrawler
15 { 15 {
16 +
17 + private static readonly string[] ReservedList = { "if", "return", "break", "while", "typedef" };
16 /// <summary> 18 /// <summary>
17 /// 생성자 19 /// 생성자
18 /// 경로를 입력받아서(path) 20 /// 경로를 입력받아서(path)
...@@ -132,6 +134,44 @@ namespace VulnCrawler ...@@ -132,6 +134,44 @@ namespace VulnCrawler
132 } 134 }
133 return string.Empty; 135 return string.Empty;
134 } 136 }
137 +
138 + public static IEnumerable<string> GetCriticalVariant(string line)
139 + {
140 +
141 + // 메서드 정규식 패턴
142 + string methodPattern = @"(\w+)\(";
143 + // 변수 정규식 패턴
144 + string fieldPattern = @"\w+";
145 + // 메서드 목록
146 + var methodSets = new HashSet<string>();
147 + var methods = Regex.Matches(line, methodPattern);
148 + // 현재 코드 라인에서 메서드 목록 추가
149 + foreach (var met in methods)
150 + {
151 + var method = met as Match;
152 + if (method.Success)
153 + {
154 + Console.WriteLine(method.Groups[1].Value);
155 + methodSets.Add(method.Groups[1].Value);
156 + }
157 + }
158 + Console.WriteLine("----");
159 + var vars = Regex.Matches(line, fieldPattern);
160 + // 변수 목록에서 메서드 목록에 있는 것 제외하고 반환
161 + foreach (var x in vars)
162 + {
163 + var field = x as Match;
164 + if (field.Success)
165 + {
166 + if (methodSets.Contains(field.Value))
167 + {
168 + continue;
169 + }
170 + yield return field.Value;
171 + }
172 + }
173 + }
174 +
135 /// <summary> 175 /// <summary>
136 /// MD5 함수 176 /// MD5 함수
137 /// </summary> 177 /// </summary>
......
...@@ -109,6 +109,10 @@ namespace VulnCrawler ...@@ -109,6 +109,10 @@ namespace VulnCrawler
109 Console.WriteLine($"Original Func: {originalFunc}"); 109 Console.WriteLine($"Original Func: {originalFunc}");
110 // 해쉬 후 110 // 해쉬 후
111 Console.WriteLine($"Original Func MD5: {md5}"); 111 Console.WriteLine($"Original Func MD5: {md5}");
112 + Console.BackgroundColor = ConsoleColor.DarkRed;
113 + Console.WriteLine($"Patched: \n{entry.Patch}");
114 +
115 + Console.ResetColor();
112 Console.WriteLine("=============================="); 116 Console.WriteLine("==============================");
113 117
114 #endregion 118 #endregion
......