이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가?라고 묻고있다. 안티디버깅 테크닉이 쓰였단 말이며, 본인은 간단한 안티치트툴을 제작해 본 적이 있기 때문에어떤 함수가 쓰일지 대충 알고 있지만 차근차근 찾아보도록 하자 프로그램 실행모습"정상"이라는 텍스트를 출력해주다 디버깅을 감지하면 "디버깅 당함"을 출력해주고 있다. IDA로 열어보자그냥 바로 보인다. 역시 예상대로 IsDebuggerPresent를 사용하고있다.이녀석이 무엇이냐 하면... peb의 beingdebugged 의 값을 리턴하는데 디버깅중이라면 1 아니라면 0을 리턴한다.peb의 주소는 teb에서 얻을 수 있다. 이 부분은 나중에 따로 글을 쓰도록 하자. 브레이크포인트를 걸고 실행시켜보면..
Basic RCE l02 문제는 현재환경에서 열리지 않아서 건너뛰었다. L03 문제의 설명에는 비주얼베이직에서 스트링 비교함수 이름은? 이라고 묻고있다. 설명해주지 않았어도 프로그램 실행시에 msvbvm50.dll 이 없다면서 앙탈부리는걸 보면누가봐도 vb로 만들어졌다는 걸 알 수 있다. 실행시켜 보자 영어같은영어아닌 너뭐라는지 모르겠다. 확인눌러보자 대충 코드가 맞아야 성공메시지가 뜨겠구나를 알 수 있다. vb의 경우 메시지 박스도 rtcMsgBox를 사용하고 좀 다른 함수명을 가지고 있다. 사실 옛날 vb6.0을 정말 재밌게 가지고 놀았던 기억이 있기에 무슨 함수를 사용하는지 알고있다.vbaStrCmp 를 사용하리라 짐작한다.치트엔진에서 바로 함수부분으로 갔지만 차근차근 찾아보자 치트엔진, ID..
CodeEngn [코드엔진] 사이트에서 초급단계로 분류되어 있는 문제다.HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는지를 묻고있다. 우선 프로그램을 실행시켜보자. 프로그램 실행 모습 메세지박스 두개로 이루어져 있는 모습을 볼 수 있다.CD-ROM이 아니라고 호소한다. 메모리를 보기 위해 다양한 디버거들이 존재 하지만, CheatEngine [치트엔진]을 사용해 크랙을 해보자 DarkByte 형님 생일이시군요 ? 치트엔진을 켰더니 제작자인 DarkByte 의 생일이라고 한다. (사진 캡쳐당시 7월 1일) happy birthday darkbyte ! 뜯어볼까 GetDriveTypeA 함수를 볼 수 있으며, 밑의 cmp eax, esi 를 통해 비교..
https://www.acmicpc.net/problem/9506 9506번: 약수들의 합 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라. www.acmicpc.net #include #include #include #include #include #include #include #include #include #include using namespace std; void fastIO(); int main() { int n; vector vec; while (true) { cin >> n; if (n == -1) break; for (auto i = 1;..
https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net #include #include #include #include #include #include #include #include #include #include using namespace std; void fastIO(); int main() { int M, N = 0; int cnt = 0; vector vec; cin >> M; cin >> N; for (auto i = M; i
https://www.acmicpc.net/problem/2587 2587번: 대표값2 어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + www.acmicpc.net #include #include #include #include #include #include #include using namespace std; void fastIO(); int main() { vector vec; int N, sum =0, mid; for (auto i = 0; i > N; vec.push_back(N);..
https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 합들을 저장해주고 내림차순으로 정렬후 첫번째 값을 출력해줬다. #include #include #include #include #include #include #include using namespace std; void fastIO(); int main() { int N, M; vector vec; vector inVec; int num; int sum; cin ..
https://www.acmicpc.net/problem/2869 2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B > A >> B >> V; while (1) { ++day; tmp += A; if (tmp >= V) break; tmp -= B;..
https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 0. 예를들어 aabbbccb가 주어졌다고 가정한다. 1. aabbbccb 를 unique 함수를사용 - > abcb abbc 가 된다. ( 연속되는 중복되는값을 맨 뒤로 보낸다. ) 2. 뒤에 중복된 값인 abbc를 erase를 통해 삭제. -> 그럼 abcb만 남게된다. 3. abcb를 sort한다. -> abbc (꼭! 먼저 중복되는값을 삭제해준후 정렬해주자)..
https://www.acmicpc.net/problem/25304 25304번: 영수증 준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것 www.acmicpc.net for문으로 구현했다. 정상작동하는데 틀렸다고나온다.?_? while로 구현해볼까하다 잘못된걸 발견했다. 브론즈5 문제이지만 아무생각없이 풀다가는 이렇게 될 수 있다는걸 간과하지말자. 교훈을 얻었다. 금액과 일치한다면 yes 아니라면 no를 출력해야한다. 내가 코딩한건 일치하지않는다면 no 그 외의 모든건 yes 인것이다. else if 가아닌 else니 말이다. !=를 == 로 바꿔주고 no yes의 위..
https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 최빈값에서 꽤나 애먹었다. max_element라는 좋은 녀석을 알게되었다. 이녀석은 값 자체를 반환하는게 아닌, 값의 주소를 반환한다. (iterator 반복자) 그러므로 값을 참조하고싶다면 *를 붙여주도록 하자. max_element는, 범위 내에서 가장 큰녀석의 첫번째 위치를 반환해준다. (반대로는 min_element가 있다.) arr = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5} 라는 배열..
https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net sort는 퀵정렬을 기반으로하는 불안정 정렬이다. 고로, 나이순으로 정렬을 하지만, 나이가 같다면 뒤에는 어떤 이름이 어떻게 정렬될지 모른다. 간단한 정렬문제지만 조건이 있다. 나이가 같다면 먼저 기입된 순으로 출력할 것. 찾아보니 stable_sort 라는 녀석이 있는데 병합정렬이다. 둘의 결정적 차이라면 sort : 기존의 순서를 보장하지않음. stable_sort : 기존의 순서를 보장함. 속도의..