C# 9

[리버싱 자체제작] wpf(C#) 이용

c#언어로 wpf 애플리케이션을 만들어보았습니다 [문제 설명] 플래그 버튼을 눌러 "Success!" 를 띄워보자 [문제의 의도] 코드/어셈블리 패치를 통한 admin 계정 탈취 문제 풀이 실행시 다음과 같은 화면이 나타납니다. 여기서 어드민을 체크해볼까요? 어드민이 아니라면서 체크도 해제되고 아예 체크박스가 막혀버렸네요. 그럼 이 상태에서 Get Flag 버튼을 한번 눌러봅시다 어드민이 아니라면서 막네요. 그럼 다시 실행시키고 이번에는 아무것도 안 누른 상태로 플래그 버튼을 눌러보겠습니다. 동일하게 경고문이 뜨는군요 :) 그러면 이제 분석을 해봅시다. 분석에 앞서, C# 같은 경우에는 분석을 할때 대중적으로 많이 쓰는 xdbg나 ida 를 써도 잘 안보입니다! C#의 특성 때문이지요... 따라서 C# ..

WARGAME/made by me! 2023.10.30

GitHub에 Nuget Package 배포하기 - 2

본격적으로 패키지를 배포해봅시다 ​ .csproj 수정 ​ 게시할 패키지의 *.csproj 파일에 아래와 같이 프로퍼티를 추가합니다. (패키지 더블 클릭하면 생김) netstandard2.0 [PACKAGE_NANE] 1.0.0 [AUTHOR] [COMPANY] https://github.com/[OWNER]/[REPOSITORY] 그리고 팁을 주자면 이거는 직접 수정하는 것 보다 패키지를 우클릭하면 속성창에서 손쉽게 설정이 가능하다!! ​ 이거는 내가 새로 만들고 있는 누겟 패키지인데, 이걸로 한번 설정을 해보자!! 지금 보면 아무 설정도 안건드린건데, 여기서 한번 속성을 건드려보자!! (Nullable은 왜인지 모르게 .NET 6 부터 자꾸 nullable 경고가 뜨길래 그냥 disable로 수정하면..

study/github 2023.05.31

GitHub에 Nuget Package 배포하기 - 1

간간히 회사에서 일하다가 배포할 일이 생기는데 계속 찾아보는게 귀찮아서 내꺼 보면서 할라구 함 정리해볼라구여 1. 사전작업​ 먼저.. 당연히 깃허브 레포지토리가 있어야겠죠..? 저는 nugetpackage.test라는 레포지토리에 올려보도록 하겠습니다 ​ 이미 패키지가 하나 있지만 다른거를 올려보겠심다 ​ 자 그러고 깃헙 PAT(Personal Access Tocken)을 발급 받습니다. 그거는 또 어디있냐..면 ​ 여기 상단에 Settings 들어가고 Developer settings 들어가고 여기서 토큰을 하나 발급해봅시당 2. 토큰 발급하기 저는 테스트용 토큰이 좀 많은데요 여기서 새로운 토큰을 발급하려면 Generate new token 버튼을 클릭합니다 여기서 repo, write, delete..

study/github 2023.05.30

[c# 개념] 코루틴(Coroutine)

만약 이런 코드가 있다고 하자 그러면 여기서 제어권의 이동은 다음과 같다. Start() 시작 Start() -> LoopA() LoopA() -> Start() Start() -> LoopB() LoopB() -> Start() Start() 끝 ​ 이때 LoopA()와 LoopB()를 동시에 실행시킬 수 있는 기능이 코루틴이다! (일종의 병렬 처리라고 생각하면 된다, 실제로 병렬은 아니고 속임수임) ​ 위에서 작성한 코드를 코루틴으로 바꿔보자! 이때 코드를 실행하게 되면 1초에 한번씩 i와 x의 값이 동시에 번갈아가면서 커지는게 출력이 된다! ​ ​ 만약 코루틴을 중단하고 싶다면? ​ 방법1) public class Test : MonoBehaviour { Coroutine myCoroutine1; ..

study/코딩 2023.05.30

[c# 개념] Action과 Func

우선 아래와 같이 생긴 델리게이트를 선언했다고 하자 delegate void MyDelegate(T1 a, T2 b); MyDelegate myDelegate; 델리게이트를 선언하기 위해서는 이렇게 두줄로 선언을 해줘야 한다. 만약 무명메소드로 잠깐 사용하거나 델리게이트 형태가 많은 경우 모두 선언해줘야 하는데, 이럴대는 불편할 수 밖에 없다. 이러한 불편함을 없애기 위해서 Action과 Func delegate를 사용할 수 있다! 💡Action와 Func를 사용하는 경우 System namespace를 사용해야함. Action과 Func의 차이는 반환하는 값이 있느냐 없느냐로 나눌 수 있다. -> 반환값이 없을 경우(void)에는 Action을 사용하고, 반환값이 있는 경우에는 Func를 사용한다. ​..

study/코딩 2023.05.30

[c# 개념] 람다식(Lambda Expression)

1. 람다식이란? => 연산자는 람다식을 표현 무명 메서드와 비슷하게 무명 함수(anonymous function)을 표현하는데 사용됨 람다식은 아래와 같이 입력 파라미터(0개~N개)를 => 연산자 왼쪽에, 실행 문장들을 => 연산자 오른쪽에 둠 람다식 문법 : (입력 파라미터) => { 실행문장 블럭; } ex. 하나의 문자열을 받아 들여 메세지 박스를 띄우기 str => { MessageBox.Show(str); } ​ 2. 사용 예시 this.button1.Click += (sender, e) => ((Button)sender).BackColor = Color.Red; 위에 있는 코드는 무명 메서드를 람다식으로 변형한 예시! 한번 쓰이는 간단한 이벤트 핸들러를 람다식으로 표현한 것이다.

study/코딩 2023.05.30

[c# 개념] enum(열거형)

1. enum 이란? 마이크로소프트 C# 가이드에 enum을 쳐보면 이런 정의가 나온다. enum(열거형)은 기본 정수 숫자 형식의 명명된 상수 집합에 의해 정의되는 값 형식이다. Microsoft .NET C# 가이드 응? 전혀 이해가 안된다. ​ 더 쉽게,,, 얘기하자면 열거형은 열거형 상수(constant)를 표현하기 위한 것으로 이를 이용하면 상수 숫자들을 보다 의미있는 단어들로 표현할 수 있어서 프로그램을 읽기 쉽게 해준다! ​ enum의 각 요소는 별도의 지정없이는 첫번째 요소가 0, 두번째 요소가 1 ... 등과 같이 1씩 증가된 값들을 할당받는다. (임의 지정도 가능함) ​ ​ 2. enum 사용 예시 그냥 Meat랑 Menu의 enum 을 만들어봤다. 사용자가 Meat에서는 0/1/2를 ..

study/코딩 2023.05.30

[c# 개념] Dictionary<> 중복 안되게 값 추가

[폼 구성 계획] datagridview로 dictionary에 값이 저장/변경될때마다 바로 보이게 함. datagridview에 중복이 일어나면 표시되게(log형식) 함. 버튼을 누르면 난수값을 생성하여 dictionary의 key값으로 저장하고 value는 "new"를 가짐. [코드] ​ 폼이 로드 될때 기본적으로 몇개의 값은 dictionary에 저장 public Form1() { InitializeComponent(); key.Add(0, "zero"); key.Add(1, "one"); key.Add(2, "two"); key.Add(3, "three"); foreach (var item in key) { dataGridView1.Rows.Add(item.Key, item.Value); } } ..

study/코딩 2023.05.30