Showing
10 changed files
with
429 additions
and
57 deletions
... | @@ -81,7 +81,7 @@ namespace VulnCrawler | ... | @@ -81,7 +81,7 @@ namespace VulnCrawler |
81 | /* 폴더 중에 linux가 있으면 잠깐 넘어감 (너무 커서 테스트 힘듦) */ | 81 | /* 폴더 중에 linux가 있으면 잠깐 넘어감 (너무 커서 테스트 힘듦) */ |
82 | if (directory.Contains("linux")) | 82 | if (directory.Contains("linux")) |
83 | { | 83 | { |
84 | - // continue; | 84 | + continue; |
85 | } | 85 | } |
86 | // 템플릿 패턴화 T : VulnAbstractCrawler | 86 | // 템플릿 패턴화 T : VulnAbstractCrawler |
87 | VulnWorker.Run<VulnC>(directory); | 87 | VulnWorker.Run<VulnC>(directory); | ... | ... |
... | @@ -45,6 +45,7 @@ namespace VulnCrawler | ... | @@ -45,6 +45,7 @@ namespace VulnCrawler |
45 | ~VulnAbstractCrawler() { | 45 | ~VulnAbstractCrawler() { |
46 | Repository?.Dispose(); | 46 | Repository?.Dispose(); |
47 | } | 47 | } |
48 | + | ||
48 | private void LoadReservedList() | 49 | private void LoadReservedList() |
49 | { | 50 | { |
50 | try | 51 | try |
... | @@ -120,6 +121,8 @@ namespace VulnCrawler | ... | @@ -120,6 +121,8 @@ namespace VulnCrawler |
120 | /// <returns>함수 문자열</returns> | 121 | /// <returns>함수 문자열</returns> |
121 | protected abstract string GetOriginalFunc(Stream oldStream, string methodName); | 122 | protected abstract string GetOriginalFunc(Stream oldStream, string methodName); |
122 | 123 | ||
124 | + public abstract IDictionary<int, List<string>> CrawlUserCode(StreamReader reader); | ||
125 | + | ||
123 | protected abstract IList<Block> GetCriticalBlocks(string srcCode, IEnumerable<string> criticalList); | 126 | protected abstract IList<Block> GetCriticalBlocks(string srcCode, IEnumerable<string> criticalList); |
124 | /// <summary> | 127 | /// <summary> |
125 | /// 성능 개선을 위한 | 128 | /// 성능 개선을 위한 |
... | @@ -401,11 +404,11 @@ namespace VulnCrawler | ... | @@ -401,11 +404,11 @@ namespace VulnCrawler |
401 | return false; | 404 | return false; |
402 | } | 405 | } |
403 | 406 | ||
404 | - /* 대문자로 구성된 변수면 넘어감 */ | 407 | + ///* 대문자로 구성된 변수면 넘어감 */ |
405 | - if (skipDefine && m.Value.All(c => char.IsUpper(c) || !char.IsLetter(c))) | 408 | + //if (skipDefine && m.Value.All(c => char.IsUpper(c) || !char.IsLetter(c))) |
406 | - { | 409 | + //{ |
407 | - return false; | 410 | + // return false; |
408 | - } | 411 | + //} |
409 | 412 | ||
410 | return true; | 413 | return true; |
411 | }) | 414 | }) |
... | @@ -447,11 +450,11 @@ namespace VulnCrawler | ... | @@ -447,11 +450,11 @@ namespace VulnCrawler |
447 | return false; | 450 | return false; |
448 | } | 451 | } |
449 | 452 | ||
450 | - /* 대문자로 구성된 변수면 넘어감 */ | 453 | + ///* 대문자로 구성된 변수면 넘어감 */ |
451 | - if (skipDefine && m.Value.All(c => char.IsUpper(c) || !char.IsLetter(c))) | 454 | + //if (skipDefine && m.Value.All(c => char.IsUpper(c) || !char.IsLetter(c))) |
452 | - { | 455 | + //{ |
453 | - return false; | 456 | + // return false; |
454 | - } | 457 | + //} |
455 | 458 | ||
456 | return true; | 459 | return true; |
457 | }) | 460 | }) | ... | ... |
... | @@ -12,11 +12,14 @@ namespace VulnCrawler | ... | @@ -12,11 +12,14 @@ namespace VulnCrawler |
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 | /* 함수 패턴 정규식 */ |
15 | - protected override string RegexFuncPattern => $@"(?<{MethodName}>(unsigned|static)?( const )? [\w]+ [\w]+\(([\w \*\,\t\n])*[\)\,])"; | 15 | + protected override string RegexFuncPattern => $@"^[\w \*]*(?<{MethodName}>[\w\*]+ [\w\*]+\(([\w \*\,\t\n])*[\)\,])"; |
16 | /* 검색 파일 타입 */ | 16 | /* 검색 파일 타입 */ |
17 | protected override string Extension => ".c"; | 17 | protected override string Extension => ".c"; |
18 | /* 예약어 파일명 */ | 18 | /* 예약어 파일명 */ |
19 | protected override string ReservedFileName => "CReserved.txt"; | 19 | protected override string ReservedFileName => "CReserved.txt"; |
20 | + | ||
21 | + | ||
22 | + | ||
20 | /// <summary> | 23 | /// <summary> |
21 | /// 패치 코드에서 함수 목록 뽑는 정규식 | 24 | /// 패치 코드에서 함수 목록 뽑는 정규식 |
22 | /// </summary> | 25 | /// </summary> |
... | @@ -549,7 +552,7 @@ namespace VulnCrawler | ... | @@ -549,7 +552,7 @@ namespace VulnCrawler |
549 | { | 552 | { |
550 | return string.Empty; | 553 | return string.Empty; |
551 | } | 554 | } |
552 | - foreach (var var in varList.Vars) | 555 | + foreach (var var in varList.Vars.Where(s => s.All(c => char.IsLower(c) || c == '>' || c == '-' || c == '*' || c == '_'))) |
553 | { | 556 | { |
554 | if (!dict.ContainsKey(var)) | 557 | if (!dict.ContainsKey(var)) |
555 | { | 558 | { |
... | @@ -638,5 +641,202 @@ namespace VulnCrawler | ... | @@ -638,5 +641,202 @@ namespace VulnCrawler |
638 | 641 | ||
639 | return temp; | 642 | return temp; |
640 | } | 643 | } |
644 | + | ||
645 | + public override IDictionary<int, List<string>> CrawlUserCode(StreamReader reader) | ||
646 | + { | ||
647 | + var dict = new Dictionary<int, List<string>>(); | ||
648 | + StringBuilder oldBuilder = new StringBuilder(); | ||
649 | + | ||
650 | + bool found = false; | ||
651 | + bool found2 = false; | ||
652 | + bool commentLine = false; | ||
653 | + int bracketCount = -1; | ||
654 | + string stringPattern = @"[""].*[""]"; | ||
655 | + string commentPattern = @"\/\*.+\*\/"; | ||
656 | + string commentPattern2 = @"\/\*"; | ||
657 | + string commentPattern3 = @"\*\/"; | ||
658 | + var regex1 = new Regex(commentPattern3, RegexOptions.Compiled); | ||
659 | + var regex2 = new Regex(stringPattern, RegexOptions.Compiled); | ||
660 | + var regex3 = new Regex(commentPattern2, RegexOptions.Compiled); | ||
661 | + var regex4 = new Regex(commentPattern, RegexOptions.Compiled); | ||
662 | + | ||
663 | + bool found3 = false; | ||
664 | + | ||
665 | + | ||
666 | + while (!reader.EndOfStream) | ||
667 | + { | ||
668 | + string line = reader.ReadLine(); | ||
669 | + Console.WriteLine(line); | ||
670 | + // 메서드를 찾은 경우 | ||
671 | + if (found3) | ||
672 | + { | ||
673 | + string obStr = oldBuilder.ToString(); | ||
674 | + obStr = Abstract(obStr, new Dictionary<string, string>(), new Dictionary<string, string>()); | ||
675 | + | ||
676 | + if (!dict.ContainsKey(obStr.Length)) | ||
677 | + { | ||
678 | + dict[obStr.Length] = new List<string>(); | ||
679 | + } | ||
680 | + dict[obStr.Length].Add(MD5HashFunc(obStr)); | ||
681 | + oldBuilder.Clear(); | ||
682 | + found = false; | ||
683 | + found2 = false; | ||
684 | + found3 = false; | ||
685 | + bracketCount = -1; | ||
686 | + commentLine = false; | ||
687 | + | ||
688 | + } | ||
689 | + if (found) | ||
690 | + { | ||
691 | + string trim = line.Trim(); | ||
692 | + // 범위 주석 진행되고 있으면 넘어감 | ||
693 | + if (trim.StartsWith("#")) | ||
694 | + { | ||
695 | + continue; | ||
696 | + } | ||
697 | + if (commentLine) | ||
698 | + { | ||
699 | + // 혹시 범위 주석이 끝났는지 체크 | ||
700 | + if (regex1.IsMatch(trim)) | ||
701 | + { | ||
702 | + commentLine = false; | ||
703 | + trim = regex1.Split(trim)[1]; | ||
704 | + } | ||
705 | + else | ||
706 | + { | ||
707 | + continue; | ||
708 | + } | ||
709 | + } | ||
710 | + // "" 문자열 제거 | ||
711 | + string removeString = regex2.Replace(trim, ""); | ||
712 | + // /* ~ 패턴 | ||
713 | + if (regex3.IsMatch(trim)) | ||
714 | + { | ||
715 | + // /* ~ */ 패턴이 아닌 경우 | ||
716 | + if (!regex4.IsMatch(trim)) | ||
717 | + { | ||
718 | + commentLine = true; | ||
719 | + } | ||
720 | + trim = Regex.Split(trim, "/*")[0]; | ||
721 | + | ||
722 | + } | ||
723 | + // 비어있는 경우 넘어감 | ||
724 | + if (string.IsNullOrWhiteSpace(trim)) | ||
725 | + { | ||
726 | + continue; | ||
727 | + } | ||
728 | + int openBracketCount = removeString.Count(c => c == '{'); | ||
729 | + int closeBracketCount = removeString.Count(c => c == '}'); | ||
730 | + int subtract = openBracketCount - closeBracketCount; | ||
731 | + bracketCount += subtract; | ||
732 | + // 메서드 시작 괄호 찾은 경우 | ||
733 | + if (found2) | ||
734 | + { | ||
735 | + | ||
736 | + oldBuilder.AppendLine(line); | ||
737 | + // 괄호가 모두 닫혔으니 종료 | ||
738 | + if (bracketCount < 0) | ||
739 | + { | ||
740 | + if (reader.EndOfStream) | ||
741 | + { | ||
742 | + Console.WriteLine("파일끝"); | ||
743 | + } | ||
744 | + found3 = true; | ||
745 | + continue; | ||
746 | + } | ||
747 | + } | ||
748 | + else // 메서드는 찾았으나 아직 시작 괄호를 못찾은 경우 | ||
749 | + { | ||
750 | + oldBuilder.AppendLine(line); | ||
751 | + if (openBracketCount > 0) | ||
752 | + { | ||
753 | + | ||
754 | + found2 = true; | ||
755 | + } | ||
756 | + else | ||
757 | + { | ||
758 | + //아직 { 괄호를 못찾았는데 );를 만났다면 메서드 선언 부분이니 넘어감 | ||
759 | + if (trim.EndsWith(");")) | ||
760 | + { | ||
761 | + Console.WriteLine("-------"); | ||
762 | + Console.WriteLine(trim); | ||
763 | + Console.WriteLine("-----"); | ||
764 | + found = false; | ||
765 | + oldBuilder.Clear(); | ||
766 | + continue; | ||
767 | + } | ||
768 | + } | ||
769 | + } | ||
770 | + } | ||
771 | + // 아직 메서드를 못찾은 경우 | ||
772 | + else | ||
773 | + { | ||
774 | + //아직 { 괄호를 못찾았는데 );를 만났다면 메서드 선언 부분이니 넘어감 | ||
775 | + if (line.Trim().EndsWith(");")) | ||
776 | + { | ||
777 | + found = false; | ||
778 | + oldBuilder.Clear(); | ||
779 | + continue; | ||
780 | + } | ||
781 | + | ||
782 | + // 메서드 찾았는지 확인 | ||
783 | + if (Regex.IsMatch(line, RegexFuncPattern)) | ||
784 | + { | ||
785 | + string trim = line.Trim(); | ||
786 | + // 주석으로 시작했다면 넘어감 | ||
787 | + if (trim.StartsWith("//")) | ||
788 | + { | ||
789 | + continue; | ||
790 | + } | ||
791 | + | ||
792 | + if (trim.StartsWith("/*")) | ||
793 | + { | ||
794 | + continue; | ||
795 | + } | ||
796 | + | ||
797 | + // 만약 찾은 메서드 라인에서 중괄호 {가 시작된 경우 | ||
798 | + if (trim.Contains("{")) | ||
799 | + { | ||
800 | + // 동시에 } 닫히기까지 한 경우 드물겠지만.. | ||
801 | + if (trim.EndsWith("}")) | ||
802 | + { | ||
803 | + oldBuilder.AppendLine(line); | ||
804 | + found3 = true; | ||
805 | + continue; | ||
806 | + } | ||
807 | + found2 = true; | ||
808 | + } | ||
809 | + // 메서드 찾음 | ||
810 | + found = true; | ||
811 | + oldBuilder.AppendLine(line); | ||
812 | + } | ||
813 | + } | ||
814 | + | ||
815 | + } | ||
816 | + | ||
817 | + if (found3) | ||
818 | + { | ||
819 | + string obStr = oldBuilder.ToString(); | ||
820 | + obStr = Abstract(obStr, new Dictionary<string, string>(), new Dictionary<string, string>()); | ||
821 | + | ||
822 | + if (!dict.ContainsKey(obStr.Length)) | ||
823 | + { | ||
824 | + dict[obStr.Length] = new List<string>(); | ||
825 | + } | ||
826 | + dict[obStr.Length].Add(MD5HashFunc(obStr)); | ||
827 | + oldBuilder.Clear(); | ||
828 | + found = false; | ||
829 | + found2 = false; | ||
830 | + found3 = false; | ||
831 | + bracketCount = -1; | ||
832 | + commentLine = false; | ||
833 | + | ||
834 | + } | ||
835 | + | ||
836 | + | ||
837 | + return dict; | ||
838 | + | ||
839 | + | ||
840 | + } | ||
641 | } | 841 | } |
642 | } | 842 | } | ... | ... |
... | @@ -80,5 +80,10 @@ namespace VulnCrawler | ... | @@ -80,5 +80,10 @@ namespace VulnCrawler |
80 | { | 80 | { |
81 | throw new NotImplementedException(); | 81 | throw new NotImplementedException(); |
82 | } | 82 | } |
83 | + | ||
84 | + public override IDictionary<int, List<string>> CrawlUserCode(StreamReader reader) | ||
85 | + { | ||
86 | + throw new NotImplementedException(); | ||
87 | + } | ||
83 | } | 88 | } |
84 | } | 89 | } | ... | ... |
... | @@ -100,51 +100,67 @@ namespace VulnCrawler | ... | @@ -100,51 +100,67 @@ namespace VulnCrawler |
100 | Console.BackgroundColor = ConsoleColor.DarkRed; | 100 | Console.BackgroundColor = ConsoleColor.DarkRed; |
101 | Console.WriteLine($"메서드 이름 : {methodName}"); | 101 | Console.WriteLine($"메서드 이름 : {methodName}"); |
102 | Console.ResetColor(); | 102 | Console.ResetColor(); |
103 | - foreach (var block in blocks) | 103 | + //foreach (var block in blocks) |
104 | + //{ | ||
105 | + // /* 크리티컬 블록이 아니면 볼 필요 없으니 넘어감 */ | ||
106 | + // if (!block.HasCritical) | ||
107 | + // { | ||
108 | + // // Console.WriteLine("크리티컬 아님"); | ||
109 | + // continue; | ||
110 | + // } | ||
111 | + | ||
112 | + | ||
113 | + // if (block.HasCritical) | ||
114 | + // { | ||
115 | + // Console.BackgroundColor = ConsoleColor.DarkMagenta; | ||
116 | + // } | ||
117 | + // else | ||
118 | + // { | ||
119 | + // Console.BackgroundColor = ConsoleColor.DarkGreen; | ||
120 | + // } | ||
121 | + // /* 블록 정보 출력(블록 번호, 블록 소스코드, 블록 추상화 코드, 블록 해쉬값) */ | ||
122 | + // Console.WriteLine($"=====block({block.Num}, {block.HasCritical.ToString()})"); | ||
123 | + // Console.WriteLine(block.Code); | ||
124 | + // Console.ResetColor(); | ||
125 | + // Console.WriteLine($"AbsCode = \n{block.AbsCode}"); | ||
126 | + // Console.WriteLine($"MD5 = {block.Hash}"); | ||
127 | + | ||
128 | + // /* base64 인코딩(MySQL에 들어갈 수 없는 문자열이 있을 수 있으므로 인코딩) */ | ||
129 | + // byte[] funcNameBytes = Encoding.Unicode.GetBytes(methodName); | ||
130 | + // byte[] codeOriBeforeBytes = Encoding.Unicode.GetBytes(oriFunc); | ||
131 | + // byte[] codeAbsBeforeBytes = Encoding.Unicode.GetBytes(block.AbsCode); | ||
132 | + | ||
133 | + // /* VulnDB에 하나의 레코드로 들어가는 하나의 취약점 객체 */ | ||
134 | + // VulnRDS.Vuln vuln = new VulnRDS.Vuln() | ||
135 | + // { | ||
136 | + // Cve = cve, | ||
137 | + // BlockHash = block.Hash, | ||
138 | + // LenBlock = block.Code.Length, | ||
139 | + // FuncName = Convert.ToBase64String(funcNameBytes), | ||
140 | + // //CodeOriBefore = Convert.ToBase64String(codeOriBeforeBytes), | ||
141 | + // //CodeAbsBefore = Convert.ToBase64String(codeAbsBeforeBytes), | ||
142 | + // //NumBlock = block.Num, | ||
143 | + // }; | ||
144 | + // Console.WriteLine($"Vuln FuncName:{vuln.FuncName}"); | ||
145 | + /* VulnDB에 추가 */ | ||
146 | + //VulnRDS.InsertVulnData(vuln); | ||
147 | + //} | ||
148 | + string abstractCode = self.Abstract(oriFunc, new Dictionary<string, string>(), new Dictionary<string, string>()); | ||
149 | + | ||
150 | + byte[] funcNameBytes = Encoding.Unicode.GetBytes(methodName); | ||
151 | + byte[] absCodeBytes = Encoding.Unicode.GetBytes(abstractCode); | ||
152 | + VulnRDS.Vuln vuln = new VulnRDS.Vuln() | ||
104 | { | 153 | { |
105 | - /* 크리티컬 블록이 아니면 볼 필요 없으니 넘어감 */ | 154 | + BlockHash = Convert.ToBase64String(absCodeBytes), |
106 | - if (!block.HasCritical) | 155 | + Cve = cve, |
107 | - { | 156 | + LenBlock = oriFunc.Length, |
108 | - // Console.WriteLine("크리티컬 아님"); | 157 | + FuncName = Convert.ToBase64String(funcNameBytes), |
109 | - continue; | 158 | + }; |
110 | - } | 159 | + Console.WriteLine(vuln.BlockHash); |
111 | - | 160 | + Console.ReadLine(); |
112 | - | 161 | + /* VulnDB에 추가 */ |
113 | - if (block.HasCritical) | 162 | + //VulnRDS.InsertVulnData(vuln); |
114 | - { | 163 | + |
115 | - Console.BackgroundColor = ConsoleColor.DarkMagenta; | ||
116 | - } | ||
117 | - else | ||
118 | - { | ||
119 | - Console.BackgroundColor = ConsoleColor.DarkGreen; | ||
120 | - } | ||
121 | - /* 블록 정보 출력(블록 번호, 블록 소스코드, 블록 추상화 코드, 블록 해쉬값) */ | ||
122 | - Console.WriteLine($"=====block({block.Num}, {block.HasCritical.ToString()})"); | ||
123 | - Console.WriteLine(block.Code); | ||
124 | - Console.ResetColor(); | ||
125 | - Console.WriteLine($"AbsCode = \n{block.AbsCode}"); | ||
126 | - Console.WriteLine($"MD5 = {block.Hash}"); | ||
127 | - | ||
128 | - /* base64 인코딩(MySQL에 들어갈 수 없는 문자열이 있을 수 있으므로 인코딩) */ | ||
129 | - byte[] funcNameBytes = Encoding.Unicode.GetBytes(methodName); | ||
130 | - byte[] codeOriBeforeBytes = Encoding.Unicode.GetBytes(oriFunc); | ||
131 | - byte[] codeAbsBeforeBytes = Encoding.Unicode.GetBytes(block.AbsCode); | ||
132 | - | ||
133 | - /* VulnDB에 하나의 레코드로 들어가는 하나의 취약점 객체 */ | ||
134 | - VulnRDS.Vuln vuln = new VulnRDS.Vuln() | ||
135 | - { | ||
136 | - Cve = cve, | ||
137 | - BlockHash = block.Hash, | ||
138 | - LenBlock = block.Code.Length, | ||
139 | - FuncName = Convert.ToBase64String(funcNameBytes), | ||
140 | - CodeOriBefore = Convert.ToBase64String(codeOriBeforeBytes), | ||
141 | - CodeAbsBefore = Convert.ToBase64String(codeAbsBeforeBytes), | ||
142 | - NumBlock = block.Num, | ||
143 | - }; | ||
144 | - Console.WriteLine($"Vuln FuncName:{vuln.FuncName}"); | ||
145 | - /* VulnDB에 추가 */ | ||
146 | - VulnRDS.InsertVulnData(vuln); | ||
147 | - } | ||
148 | } | 164 | } |
149 | } | 165 | } |
150 | else | 166 | else | ... | ... |
1 | +using System; | ||
2 | +using System.Collections.Generic; | ||
3 | +using System.IO; | ||
4 | +using System.Linq; | ||
5 | +using System.Text; | ||
6 | +using System.Text.RegularExpressions; | ||
7 | +using System.Threading.Tasks; | ||
8 | +using VulnCrawler; | ||
9 | + | ||
10 | +namespace VulnUserCodeAnalyzer | ||
11 | +{ | ||
12 | + class Program | ||
13 | + { | ||
14 | + static void Main(string[] args) | ||
15 | + { | ||
16 | + DirectoryInfo dirInfo = new DirectoryInfo(@"c:\code"); | ||
17 | + var codeFiles = dirInfo.EnumerateFiles("*.c", SearchOption.AllDirectories); | ||
18 | + | ||
19 | + var crawler = new VulnC(); | ||
20 | + foreach (var codeFile in codeFiles) | ||
21 | + { | ||
22 | + Console.WriteLine(codeFile.FullName); | ||
23 | + using (var reader = codeFile.OpenText()) | ||
24 | + { | ||
25 | + | ||
26 | + var dict = crawler.CrawlUserCode(reader); | ||
27 | + | ||
28 | + foreach (var item in dict) | ||
29 | + { | ||
30 | + Console.WriteLine($"----{item.Key}->"); | ||
31 | + foreach (var hash in item.Value) | ||
32 | + { | ||
33 | + Console.WriteLine(hash); | ||
34 | + } | ||
35 | + } | ||
36 | + } | ||
37 | + } | ||
38 | + | ||
39 | + | ||
40 | + } | ||
41 | + } | ||
42 | +} |
1 | +using System.Reflection; | ||
2 | +using System.Runtime.CompilerServices; | ||
3 | +using System.Runtime.InteropServices; | ||
4 | + | ||
5 | +// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 | ||
6 | +// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 | ||
7 | +// 이러한 특성 값을 변경하세요. | ||
8 | +[assembly: AssemblyTitle("VulnUserCodeAnalyzer")] | ||
9 | +[assembly: AssemblyDescription("")] | ||
10 | +[assembly: AssemblyConfiguration("")] | ||
11 | +[assembly: AssemblyCompany("")] | ||
12 | +[assembly: AssemblyProduct("VulnUserCodeAnalyzer")] | ||
13 | +[assembly: AssemblyCopyright("Copyright © 2018")] | ||
14 | +[assembly: AssemblyTrademark("")] | ||
15 | +[assembly: AssemblyCulture("")] | ||
16 | + | ||
17 | +// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 | ||
18 | +// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 | ||
19 | +// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. | ||
20 | +[assembly: ComVisible(false)] | ||
21 | + | ||
22 | +// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. | ||
23 | +[assembly: Guid("84c36798-2a15-481e-96d5-e6c547114161")] | ||
24 | + | ||
25 | +// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. | ||
26 | +// | ||
27 | +// 주 버전 | ||
28 | +// 부 버전 | ||
29 | +// 빌드 번호 | ||
30 | +// 수정 버전 | ||
31 | +// | ||
32 | +// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로 | ||
33 | +// 지정되도록 할 수 있습니다. | ||
34 | +// [assembly: AssemblyVersion("1.0.*")] | ||
35 | +[assembly: AssemblyVersion("1.0.0.0")] | ||
36 | +[assembly: AssemblyFileVersion("1.0.0.0")] |
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
3 | + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | ||
4 | + <PropertyGroup> | ||
5 | + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
6 | + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
7 | + <ProjectGuid>{84C36798-2A15-481E-96D5-E6C547114161}</ProjectGuid> | ||
8 | + <OutputType>Exe</OutputType> | ||
9 | + <RootNamespace>VulnUserCodeAnalyzer</RootNamespace> | ||
10 | + <AssemblyName>VulnUserCodeAnalyzer</AssemblyName> | ||
11 | + <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> | ||
12 | + <FileAlignment>512</FileAlignment> | ||
13 | + <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | ||
14 | + </PropertyGroup> | ||
15 | + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
16 | + <PlatformTarget>AnyCPU</PlatformTarget> | ||
17 | + <DebugSymbols>true</DebugSymbols> | ||
18 | + <DebugType>full</DebugType> | ||
19 | + <Optimize>false</Optimize> | ||
20 | + <OutputPath>bin\Debug\</OutputPath> | ||
21 | + <DefineConstants>DEBUG;TRACE</DefineConstants> | ||
22 | + <ErrorReport>prompt</ErrorReport> | ||
23 | + <WarningLevel>4</WarningLevel> | ||
24 | + </PropertyGroup> | ||
25 | + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
26 | + <PlatformTarget>AnyCPU</PlatformTarget> | ||
27 | + <DebugType>pdbonly</DebugType> | ||
28 | + <Optimize>true</Optimize> | ||
29 | + <OutputPath>bin\Release\</OutputPath> | ||
30 | + <DefineConstants>TRACE</DefineConstants> | ||
31 | + <ErrorReport>prompt</ErrorReport> | ||
32 | + <WarningLevel>4</WarningLevel> | ||
33 | + </PropertyGroup> | ||
34 | + <ItemGroup> | ||
35 | + <Reference Include="System" /> | ||
36 | + <Reference Include="System.Core" /> | ||
37 | + <Reference Include="System.Xml.Linq" /> | ||
38 | + <Reference Include="System.Data.DataSetExtensions" /> | ||
39 | + <Reference Include="Microsoft.CSharp" /> | ||
40 | + <Reference Include="System.Data" /> | ||
41 | + <Reference Include="System.Net.Http" /> | ||
42 | + <Reference Include="System.Xml" /> | ||
43 | + </ItemGroup> | ||
44 | + <ItemGroup> | ||
45 | + <Compile Include="Program.cs" /> | ||
46 | + <Compile Include="Properties\AssemblyInfo.cs" /> | ||
47 | + </ItemGroup> | ||
48 | + <ItemGroup> | ||
49 | + <None Include="App.config" /> | ||
50 | + </ItemGroup> | ||
51 | + <ItemGroup> | ||
52 | + <ProjectReference Include="..\VulnCrawler\VulnCrawler.csproj"> | ||
53 | + <Project>{42c06434-1aca-409c-8783-c6341abff8ba}</Project> | ||
54 | + <Name>VulnCrawler</Name> | ||
55 | + </ProjectReference> | ||
56 | + </ItemGroup> | ||
57 | + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||
58 | +</Project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VulnCrawler", "VulnCrawler\ | ... | @@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VulnCrawler", "VulnCrawler\ |
7 | EndProject | 7 | EndProject |
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DownloaderGithubClone", "DownloaderGithubClone\DownloaderGithubClone.csproj", "{17D012E2-AD26-437B-83DC-EC8E09AF0F8D}" | 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DownloaderGithubClone", "DownloaderGithubClone\DownloaderGithubClone.csproj", "{17D012E2-AD26-437B-83DC-EC8E09AF0F8D}" |
9 | EndProject | 9 | EndProject |
10 | +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VulnUserCodeAnalyzer", "VulnUserCodeAnalyzer\VulnUserCodeAnalyzer.csproj", "{84C36798-2A15-481E-96D5-E6C547114161}" | ||
11 | +EndProject | ||
10 | Global | 12 | Global |
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution | 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution |
12 | Debug|Any CPU = Debug|Any CPU | 14 | Debug|Any CPU = Debug|Any CPU |
... | @@ -21,6 +23,10 @@ Global | ... | @@ -21,6 +23,10 @@ Global |
21 | {17D012E2-AD26-437B-83DC-EC8E09AF0F8D}.Debug|Any CPU.Build.0 = Debug|Any CPU | 23 | {17D012E2-AD26-437B-83DC-EC8E09AF0F8D}.Debug|Any CPU.Build.0 = Debug|Any CPU |
22 | {17D012E2-AD26-437B-83DC-EC8E09AF0F8D}.Release|Any CPU.ActiveCfg = Release|Any CPU | 24 | {17D012E2-AD26-437B-83DC-EC8E09AF0F8D}.Release|Any CPU.ActiveCfg = Release|Any CPU |
23 | {17D012E2-AD26-437B-83DC-EC8E09AF0F8D}.Release|Any CPU.Build.0 = Release|Any CPU | 25 | {17D012E2-AD26-437B-83DC-EC8E09AF0F8D}.Release|Any CPU.Build.0 = Release|Any CPU |
26 | + {84C36798-2A15-481E-96D5-E6C547114161}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
27 | + {84C36798-2A15-481E-96D5-E6C547114161}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
28 | + {84C36798-2A15-481E-96D5-E6C547114161}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
29 | + {84C36798-2A15-481E-96D5-E6C547114161}.Release|Any CPU.Build.0 = Release|Any CPU | ||
24 | EndGlobalSection | 30 | EndGlobalSection |
25 | GlobalSection(SolutionProperties) = preSolution | 31 | GlobalSection(SolutionProperties) = preSolution |
26 | HideSolutionNode = FALSE | 32 | HideSolutionNode = FALSE | ... | ... |
-
Please register or login to post a comment