Showing
3 changed files
with
70 additions
and
104 deletions
... | @@ -27,6 +27,8 @@ namespace VulnCrawler | ... | @@ -27,6 +27,8 @@ namespace VulnCrawler |
27 | //AWS.account.Endpoint = "vulndb.cby38wfppa7l.us-east-2.rds.amazonaws.com"; | 27 | //AWS.account.Endpoint = "vulndb.cby38wfppa7l.us-east-2.rds.amazonaws.com"; |
28 | //AWS.SaveAccount(); | 28 | //AWS.SaveAccount(); |
29 | //AES aes = new AES(); | 29 | //AES aes = new AES(); |
30 | + | ||
31 | + /* AWS 계정 정보 파일 읽음 */ | ||
30 | string txt = File.ReadAllText(@"Account.xml"); | 32 | string txt = File.ReadAllText(@"Account.xml"); |
31 | // string xml = aes.AESDecrypt128(txt, key); | 33 | // string xml = aes.AESDecrypt128(txt, key); |
32 | string xml = txt; | 34 | string xml = txt; |
... | @@ -34,15 +36,19 @@ namespace VulnCrawler | ... | @@ -34,15 +36,19 @@ namespace VulnCrawler |
34 | AWS.LoadAccount(xml); | 36 | AWS.LoadAccount(xml); |
35 | AWS.Account account = AWS.account; | 37 | AWS.Account account = AWS.account; |
36 | 38 | ||
39 | + /* AWS 정보 출력 */ | ||
37 | Console.WriteLine($"Endpoint: {account.Endpoint}, ID: {account.Id}, PW: {account.Pw}"); | 40 | Console.WriteLine($"Endpoint: {account.Endpoint}, ID: {account.Id}, PW: {account.Pw}"); |
38 | try | 41 | try |
39 | { | 42 | { |
43 | + /* DB 접속 시도 */ | ||
40 | VulnRDS.Connect(account, "vuln"); | 44 | VulnRDS.Connect(account, "vuln"); |
41 | } | 45 | } |
42 | catch(Exception e) | 46 | catch(Exception e) |
43 | { | 47 | { |
44 | Console.WriteLine($"접속 에러 :: {e.ToString()}"); | 48 | Console.WriteLine($"접속 에러 :: {e.ToString()}"); |
45 | } | 49 | } |
50 | + | ||
51 | + /* AWS 연결 여부 확인 */ | ||
46 | if (VulnRDS.Conn.State == System.Data.ConnectionState.Open) | 52 | if (VulnRDS.Conn.State == System.Data.ConnectionState.Open) |
47 | { | 53 | { |
48 | Console.WriteLine("접속 성공"); | 54 | Console.WriteLine("접속 성공"); |
... | @@ -53,44 +59,18 @@ namespace VulnCrawler | ... | @@ -53,44 +59,18 @@ namespace VulnCrawler |
53 | Console.WriteLine("연결 실패"); | 59 | Console.WriteLine("연결 실패"); |
54 | return; | 60 | return; |
55 | } | 61 | } |
56 | - //MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder { | ||
57 | - // Server = "", | ||
58 | - // UserID = id, | ||
59 | - // Password = pw, | ||
60 | - // Database = "vuln", | ||
61 | - // Port = 3306 | ||
62 | - //}; | ||
63 | - | ||
64 | - //string strConn = builder.ToString(); | ||
65 | - //builder = null; | ||
66 | - //MySqlConnection conn = new MySqlConnection(strConn); | ||
67 | - | ||
68 | - //try { | ||
69 | - | ||
70 | - // String sql = "INSERT INTO members (id, pwd, name) " + | ||
71 | - // "VALUES ('gon', '111', '김삿갓')"; | ||
72 | - | ||
73 | - // MySqlCommand cmd = new MySqlCommand(sql, conn); | ||
74 | - | ||
75 | - // conn.Open(); | ||
76 | - | ||
77 | - // cmd.ExecuteNonQuery(); | ||
78 | - // conn.Close(); | ||
79 | - //} catch (Exception e) { | ||
80 | - // Console.WriteLine(e.ToString()); | ||
81 | - //} | ||
82 | #endregion | 62 | #endregion |
83 | 63 | ||
84 | Run(); | 64 | Run(); |
85 | 65 | ||
86 | } | 66 | } |
67 | + | ||
68 | + /* 메인 동작 함수 */ | ||
87 | public static void Run() { | 69 | public static void Run() { |
88 | // Repository 폴더들이 있는 주소를 지정하면 하위 폴더 목록을 가져옴(Repository 목록) | 70 | // Repository 폴더들이 있는 주소를 지정하면 하위 폴더 목록을 가져옴(Repository 목록) |
89 | Regex.CacheSize = 50; | 71 | Regex.CacheSize = 50; |
90 | 72 | ||
91 | - // var fields = VulnWorker.GetCriticalVariant(@"return _is_safe_url(url, host) and _is_safe_url(url.replace('\\', '/'), host)"); | 73 | + /* C:\VulnC에 있는 Git Repository들로 돌아감 */ |
92 | - | ||
93 | - // return; | ||
94 | var directorys = Directory.GetDirectories(@"c:\VulnC"); | 74 | var directorys = Directory.GetDirectories(@"c:\VulnC"); |
95 | if (directorys.Length == 0) { | 75 | if (directorys.Length == 0) { |
96 | Console.WriteLine("Repository 목록 찾기 실패"); | 76 | Console.WriteLine("Repository 목록 찾기 실패"); |
... | @@ -98,16 +78,15 @@ namespace VulnCrawler | ... | @@ -98,16 +78,15 @@ namespace VulnCrawler |
98 | } | 78 | } |
99 | // Repository 목록 만큼 반복함. | 79 | // Repository 목록 만큼 반복함. |
100 | foreach (var directory in directorys) { | 80 | foreach (var directory in directorys) { |
101 | - // 템플릿 패턴화 T : VulnAbstractCrawler | 81 | + /* 폴더 중에 linux가 있으면 잠깐 넘어감 (너무 커서 테스트 힘듦) */ |
102 | - if (directory.Contains("open")) | 82 | + if (directory.Contains("linux")) |
103 | { | 83 | { |
104 | continue; | 84 | continue; |
105 | } | 85 | } |
106 | - Console.WriteLine(directory); | 86 | + // 템플릿 패턴화 T : VulnAbstractCrawler |
107 | VulnWorker.Run<VulnC>(directory); | 87 | VulnWorker.Run<VulnC>(directory); |
108 | } | 88 | } |
109 | } | 89 | } |
110 | - | ||
111 | #region Secure string input | 90 | #region Secure string input |
112 | static String SecureStringToString(SecureString value) { | 91 | static String SecureStringToString(SecureString value) { |
113 | IntPtr valuePtr = IntPtr.Zero; | 92 | IntPtr valuePtr = IntPtr.Zero; | ... | ... |
... | @@ -10,14 +10,27 @@ namespace VulnCrawler | ... | @@ -10,14 +10,27 @@ 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)?( const )? [\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 | + /* 함수 패턴 정규식 */ | ||
14 | protected override string RegexFuncPattern => $@"(?<{MethodName}>(unsigned|static)?( const )? [\w]+ [\w]+\(([\w \*\,\t\n])*[\)\,])"; | 15 | protected override string RegexFuncPattern => $@"(?<{MethodName}>(unsigned|static)?( const )? [\w]+ [\w]+\(([\w \*\,\t\n])*[\)\,])"; |
16 | + /* 검색 파일 타입 */ | ||
15 | protected override string Extension => ".c"; | 17 | protected override string Extension => ".c"; |
18 | + /* 예약어 파일명 */ | ||
16 | protected override string ReservedFileName => "CReserved.txt"; | 19 | protected override string ReservedFileName => "CReserved.txt"; |
20 | + /// <summary> | ||
21 | + /// 패치 코드에서 함수 목록 뽑는 정규식 | ||
22 | + /// </summary> | ||
23 | + /// <param name="patchCode">패치 코드</param> | ||
24 | + /// <returns></returns> | ||
17 | public override MatchCollection GetMatches(string patchCode) { | 25 | public override MatchCollection GetMatches(string patchCode) { |
18 | var regs = Regex.Matches(patchCode, RegexFuncPattern); | 26 | var regs = Regex.Matches(patchCode, RegexFuncPattern); |
19 | return regs; | 27 | return regs; |
20 | } | 28 | } |
29 | + /// <summary> | ||
30 | + /// 주석 제거 함수 (안쓰임) | ||
31 | + /// </summary> | ||
32 | + /// <param name="original"></param> | ||
33 | + /// <returns></returns> | ||
21 | public override string RemoveComment(string original) { | 34 | public override string RemoveComment(string original) { |
22 | string txt = Regex.Replace(original, Environment.NewLine, ""); | 35 | string txt = Regex.Replace(original, Environment.NewLine, ""); |
23 | 36 | ||
... | @@ -32,6 +45,11 @@ namespace VulnCrawler | ... | @@ -32,6 +45,11 @@ namespace VulnCrawler |
32 | return replace; | 45 | return replace; |
33 | } | 46 | } |
34 | 47 | ||
48 | + /// <summary> | ||
49 | + /// 패치 정보에서 크리티컬 메서드 테이블 구함 | ||
50 | + /// </summary> | ||
51 | + /// <param name="srcCode">원본 소스 코드</param> | ||
52 | + /// <returns>키 = 크리티컬 메서드명, 값 = 크리티컬 변수 목록</returns> | ||
35 | public override IDictionary<string, IEnumerable<string>> ExtractGitCriticalMethodTable(string srcCode) | 53 | public override IDictionary<string, IEnumerable<string>> ExtractGitCriticalMethodTable(string srcCode) |
36 | { | 54 | { |
37 | var table = new Dictionary<string, IEnumerable<string>>(); | 55 | var table = new Dictionary<string, IEnumerable<string>>(); |
... | @@ -105,6 +123,12 @@ namespace VulnCrawler | ... | @@ -105,6 +123,12 @@ namespace VulnCrawler |
105 | } | 123 | } |
106 | return table; | 124 | return table; |
107 | } | 125 | } |
126 | + /// <summary> | ||
127 | + /// 원본 함수 코드 구해주는 함수 | ||
128 | + /// </summary> | ||
129 | + /// <param name="oldStream">원본 코드 파일</param> | ||
130 | + /// <param name="methodName">찾을 메서드 이름</param> | ||
131 | + /// <returns></returns> | ||
108 | protected override string GetOriginalFunc(Stream oldStream, string methodName) { | 132 | protected override string GetOriginalFunc(Stream oldStream, string methodName) { |
109 | StringBuilder oldBuilder = new StringBuilder(); | 133 | StringBuilder oldBuilder = new StringBuilder(); |
110 | string method = Regex.Escape(methodName); | 134 | string method = Regex.Escape(methodName); |
... | @@ -244,6 +268,12 @@ namespace VulnCrawler | ... | @@ -244,6 +268,12 @@ namespace VulnCrawler |
244 | return oldBuilder.ToString(); | 268 | return oldBuilder.ToString(); |
245 | } | 269 | } |
246 | 270 | ||
271 | + /// <summary> | ||
272 | + /// 크리티컬 블록 리스트 구하는 함수 | ||
273 | + /// </summary> | ||
274 | + /// <param name="srcCode">원본 함수 코드</param> | ||
275 | + /// <param name="criticalList">크리티컬 변수 목록</param> | ||
276 | + /// <returns></returns> | ||
247 | protected override IList<Block> GetCriticalBlocks(string srcCode, IEnumerable<string> criticalList) | 277 | protected override IList<Block> GetCriticalBlocks(string srcCode, IEnumerable<string> criticalList) |
248 | { | 278 | { |
249 | 279 | ||
... | @@ -471,6 +501,13 @@ namespace VulnCrawler | ... | @@ -471,6 +501,13 @@ namespace VulnCrawler |
471 | return blockList; | 501 | return blockList; |
472 | } | 502 | } |
473 | 503 | ||
504 | + /// <summary> | ||
505 | + /// 추상화 정규화 함수 | ||
506 | + /// </summary> | ||
507 | + /// <param name="blockCode">블록 소스 코드</param> | ||
508 | + /// <param name="dict">추상화 변환 변수 테이블</param> | ||
509 | + /// <param name="methodDict">추상화 변환 메서드 테이블</param> | ||
510 | + /// <returns></returns> | ||
474 | public override string Abstract(string blockCode, IDictionary<string, string> dict, IDictionary<string, string> methodDict) | 511 | public override string Abstract(string blockCode, IDictionary<string, string> dict, IDictionary<string, string> methodDict) |
475 | { | 512 | { |
476 | var split = blockCode.Split('\n'); | 513 | var split = blockCode.Split('\n'); | ... | ... |
... | @@ -16,7 +16,9 @@ namespace VulnCrawler | ... | @@ -16,7 +16,9 @@ namespace VulnCrawler |
16 | // 템플릿 메서드 패턴 | 16 | // 템플릿 메서드 패턴 |
17 | public static void Run<T>(string dirPath) where T : VulnAbstractCrawler, new() { | 17 | public static void Run<T>(string dirPath) where T : VulnAbstractCrawler, new() { |
18 | var crawler = new T(); | 18 | var crawler = new T(); |
19 | + /* Git 경로로 초기화 */ | ||
19 | crawler.Init(dirPath); | 20 | crawler.Init(dirPath); |
21 | + /* 초기화된 커밋 목록 가져옴 */ | ||
20 | var commits = crawler.Commits; | 22 | var commits = crawler.Commits; |
21 | foreach (var commit in commits) { | 23 | foreach (var commit in commits) { |
22 | // 커밋 메시지 | 24 | // 커밋 메시지 |
... | @@ -31,17 +33,15 @@ namespace VulnCrawler | ... | @@ -31,17 +33,15 @@ namespace VulnCrawler |
31 | // 패치 엔트리 파일 배열 중에 파일 확장자가 .py인 것만 가져옴 | 33 | // 패치 엔트리 파일 배열 중에 파일 확장자가 .py인 것만 가져옴 |
32 | // (실질적인 코드 변경 커밋만 보기 위해서) | 34 | // (실질적인 코드 변경 커밋만 보기 위해서) |
33 | var entrys = crawler.GetPatchEntryChanges(patch); | 35 | var entrys = crawler.GetPatchEntryChanges(patch); |
34 | - | 36 | + /* C:\VulnC\linux 라면 linux만 뽑아서 repoName에 저장 */ |
35 | var dsp = dirPath.Split(Path.DirectorySeparatorChar); | 37 | var dsp = dirPath.Split(Path.DirectorySeparatorChar); |
36 | string repoName = dsp[dsp.Length - 1]; | 38 | string repoName = dsp[dsp.Length - 1]; |
37 | // 현재 커밋에 대한 패치 엔트리 배열을 출력함 | 39 | // 현재 커밋에 대한 패치 엔트리 배열을 출력함 |
38 | PrintPatchEntrys(entrys, crawler, message, cve, repoName); | 40 | PrintPatchEntrys(entrys, crawler, message, cve, repoName); |
41 | + Console.ReadLine(); | ||
39 | } | 42 | } |
40 | - // Console.ReadLine(); | ||
41 | - | ||
42 | } | 43 | } |
43 | } | 44 | } |
44 | - | ||
45 | 45 | ||
46 | private static void PrintPatchEntrys(IEnumerable<PatchEntryChanges> entrys, VulnAbstractCrawler self, string commitMsg, string cve, string repoName) { | 46 | private static void PrintPatchEntrys(IEnumerable<PatchEntryChanges> entrys, VulnAbstractCrawler self, string commitMsg, string cve, string repoName) { |
47 | foreach (var entry in entrys) { | 47 | foreach (var entry in entrys) { |
... | @@ -72,10 +72,6 @@ namespace VulnCrawler | ... | @@ -72,10 +72,6 @@ namespace VulnCrawler |
72 | Console.WriteLine($"Old Content: \n{oldContent}"); | 72 | Console.WriteLine($"Old Content: \n{oldContent}"); |
73 | Console.ResetColor(); | 73 | Console.ResetColor(); |
74 | 74 | ||
75 | - //Console.BackgroundColor = ConsoleColor.DarkMagenta; | ||
76 | - //Console.WriteLine($"New Content: \n{newContent}"); | ||
77 | - //Console.ResetColor(); | ||
78 | - | ||
79 | Console.ForegroundColor = ConsoleColor.Blue; | 75 | Console.ForegroundColor = ConsoleColor.Blue; |
80 | Console.WriteLine($"status: {entry.Status.ToString()}"); | 76 | Console.WriteLine($"status: {entry.Status.ToString()}"); |
81 | Console.WriteLine($"added: {entry.LinesAdded.ToString()}, deleted: {entry.LinesDeleted.ToString()}"); | 77 | Console.WriteLine($"added: {entry.LinesAdded.ToString()}, deleted: {entry.LinesDeleted.ToString()}"); |
... | @@ -94,15 +90,26 @@ namespace VulnCrawler | ... | @@ -94,15 +90,26 @@ namespace VulnCrawler |
94 | Console.BackgroundColor = ConsoleColor.DarkRed; | 90 | Console.BackgroundColor = ConsoleColor.DarkRed; |
95 | Console.WriteLine($"Patched: \n{entry.Patch}"); | 91 | Console.WriteLine($"Patched: \n{entry.Patch}"); |
96 | Console.ResetColor(); | 92 | Console.ResetColor(); |
93 | + /* 패치된 코드들에서 Method로 나누고 크리티컬 변수로 뽑아옴 Dictionary 구조 (키 = 함수명) */ | ||
97 | var table = self.ExtractGitCriticalMethodTable(entry.Patch); | 94 | var table = self.ExtractGitCriticalMethodTable(entry.Patch); |
95 | + /* 크리티컬 메서드 테이블과 패치 전 파일에서 Process 하고 tuple로 가져옴 */ | ||
98 | foreach (var tuple in self.Process(oldBlob, table)) | 96 | foreach (var tuple in self.Process(oldBlob, table)) |
99 | { | 97 | { |
98 | + /* 메서드 이름, 원본 함수 코드, 블록 리스트(크리티컬 포함) */ | ||
100 | (var methodName, var oriFunc, var blocks) = tuple; | 99 | (var methodName, var oriFunc, var blocks) = tuple; |
101 | Console.BackgroundColor = ConsoleColor.DarkRed; | 100 | Console.BackgroundColor = ConsoleColor.DarkRed; |
102 | Console.WriteLine($"메서드 이름 : {methodName}"); | 101 | Console.WriteLine($"메서드 이름 : {methodName}"); |
103 | Console.ResetColor(); | 102 | Console.ResetColor(); |
104 | foreach (var block in blocks) | 103 | foreach (var block in blocks) |
105 | { | 104 | { |
105 | + /* 크리티컬 블록이 아니면 볼 필요 없으니 넘어감 */ | ||
106 | + if (!block.HasCritical) | ||
107 | + { | ||
108 | + // Console.WriteLine("크리티컬 아님"); | ||
109 | + continue; | ||
110 | + } | ||
111 | + | ||
112 | + | ||
106 | if (block.HasCritical) | 113 | if (block.HasCritical) |
107 | { | 114 | { |
108 | Console.BackgroundColor = ConsoleColor.DarkMagenta; | 115 | Console.BackgroundColor = ConsoleColor.DarkMagenta; |
... | @@ -111,22 +118,19 @@ namespace VulnCrawler | ... | @@ -111,22 +118,19 @@ namespace VulnCrawler |
111 | { | 118 | { |
112 | Console.BackgroundColor = ConsoleColor.DarkGreen; | 119 | Console.BackgroundColor = ConsoleColor.DarkGreen; |
113 | } | 120 | } |
121 | + /* 블록 정보 출력(블록 번호, 블록 소스코드, 블록 추상화 코드, 블록 해쉬값) */ | ||
114 | Console.WriteLine($"=====block({block.Num}, {block.HasCritical.ToString()})"); | 122 | Console.WriteLine($"=====block({block.Num}, {block.HasCritical.ToString()})"); |
115 | Console.WriteLine(block.Code); | 123 | Console.WriteLine(block.Code); |
116 | Console.ResetColor(); | 124 | Console.ResetColor(); |
117 | Console.WriteLine($"AbsCode = \n{block.AbsCode}"); | 125 | Console.WriteLine($"AbsCode = \n{block.AbsCode}"); |
118 | Console.WriteLine($"MD5 = {block.Hash}"); | 126 | Console.WriteLine($"MD5 = {block.Hash}"); |
119 | 127 | ||
120 | - if (!block.HasCritical) | 128 | + /* base64 인코딩(MySQL에 들어갈 수 없는 문자열이 있을 수 있으므로 인코딩) */ |
121 | - { | ||
122 | - // Console.WriteLine("크리티컬 아님"); | ||
123 | - continue; | ||
124 | - } | ||
125 | - | ||
126 | byte[] funcNameBytes = Encoding.Unicode.GetBytes(methodName); | 129 | byte[] funcNameBytes = Encoding.Unicode.GetBytes(methodName); |
127 | byte[] codeOriBeforeBytes = Encoding.Unicode.GetBytes(oriFunc); | 130 | byte[] codeOriBeforeBytes = Encoding.Unicode.GetBytes(oriFunc); |
128 | byte[] codeAbsBeforeBytes = Encoding.Unicode.GetBytes(block.AbsCode); | 131 | byte[] codeAbsBeforeBytes = Encoding.Unicode.GetBytes(block.AbsCode); |
129 | 132 | ||
133 | + /* VulnDB에 하나의 레코드로 들어가는 하나의 취약점 객체 */ | ||
130 | VulnRDS.Vuln vuln = new VulnRDS.Vuln() | 134 | VulnRDS.Vuln vuln = new VulnRDS.Vuln() |
131 | { | 135 | { |
132 | Cve = cve, | 136 | Cve = cve, |
... | @@ -140,76 +144,22 @@ namespace VulnCrawler | ... | @@ -140,76 +144,22 @@ namespace VulnCrawler |
140 | BlockNum = block.Num, | 144 | BlockNum = block.Num, |
141 | 145 | ||
142 | }; | 146 | }; |
143 | - // Console.WriteLine("추가중..."); | 147 | + Console.WriteLine($"Vuln FuncName:{vuln.FuncName}"); |
148 | + /* VulnDB에 추가 */ | ||
144 | VulnRDS.InsertVulnData(vuln); | 149 | VulnRDS.InsertVulnData(vuln); |
145 | - | ||
146 | - // Console.WriteLine($"추가: {vuln.Cve}, {vuln.FuncName}, {vuln.RepositName}"); | ||
147 | - // Console.ReadLine(); | ||
148 | - | ||
149 | - | ||
150 | } | 150 | } |
151 | - | ||
152 | } | 151 | } |
153 | - | ||
154 | - | ||
155 | - //foreach (var item in table) | ||
156 | - //{ | ||
157 | - // Console.WriteLine($"Method : {item.Key}"); | ||
158 | - // //foreach (var b in item.Value) | ||
159 | - // //{ | ||
160 | - // // Console.WriteLine($"--{b}"); | ||
161 | - // //} | ||
162 | - | ||
163 | - //} | ||
164 | - // Console.ReadLine(); | ||
165 | } | 152 | } |
166 | else | 153 | else |
167 | { | 154 | { |
168 | continue; | 155 | continue; |
169 | } | 156 | } |
170 | 157 | ||
171 | - | ||
172 | - | ||
173 | - // 패치 코드에서 매칭된 파이썬 함수들로부터 | ||
174 | - // 패치 전 코드 파일(oldBlob)을 탐색하여 원본 파이썬 함수 가져오고(originalFunc) | ||
175 | - // | ||
176 | #endregion | 158 | #endregion |
177 | 159 | ||
178 | - //foreach (var reg in regs) | ||
179 | - //{ | ||
180 | - | ||
181 | - // var match = reg as Match; | ||
182 | - // string methodName = match.Groups[VulnAbstractCrawler.MethodName].Value.Trim(); | ||
183 | - // string originalFunc, md5; | ||
184 | - // (originalFunc, md5) = self.Process(oldBlob.GetContentStream(), | ||
185 | - // methodName); | ||
186 | - | ||
187 | - | ||
188 | - | ||
189 | - // #region 현재 패치 엔트리 정보 출력(추가된 줄 수, 삭제된 줄 수, 패치 이전 경로, 패치 후 경로) | ||
190 | - | ||
191 | - | ||
192 | - // // 패치 전 원본 함수 | ||
193 | - // Console.WriteLine($"Original Func: {originalFunc}"); | ||
194 | - // // 해쉬 후 | ||
195 | - // Console.WriteLine($"Original Func MD5: {md5}"); | ||
196 | - // //Console.BackgroundColor = ConsoleColor.DarkRed; | ||
197 | - // //Console.WriteLine($"Patched: \n{entry.Patch}"); | ||
198 | - | ||
199 | - // Console.ResetColor(); | ||
200 | - // Console.ForegroundColor = ConsoleColor.Red; | ||
201 | - // Console.WriteLine("=============================="); | ||
202 | - // Console.ResetColor(); | ||
203 | - // #endregion | ||
204 | - | ||
205 | - //} | ||
206 | - //Console.ReadLine(); | ||
207 | } | 160 | } |
208 | catch (Exception e) | 161 | catch (Exception e) |
209 | { | 162 | { |
210 | - // Console.WriteLine(entry.Patch); | ||
211 | - // Console.WriteLine(e.ToString()); | ||
212 | - // Console.ReadLine(); | ||
213 | continue; | 163 | continue; |
214 | } | 164 | } |
215 | 165 | ... | ... |
-
Please register or login to post a comment