본문 바로가기

전체 글

"버스 vs 지하철" 개발일지 - 1 보호되어 있는 글입니다. 더보기
[Reversing.kr] Easy Keygen [주의] 해당 글에는 풀이 및 정답이 적혀있습니다. 스스로 해결하고 싶으신 분들은 문제를 해결한 후, 이 페이지를 참고하셨으면 합니다 : ) 문제를 보면, 시리얼이 "5B134977135E7D13"일 때, 이름을 찾으라고 한다. 실행은 이름을 입력하고 시리얼을 입력하는 순으로 흘러간다. 디버깅해보면, edx에는 입력한 이름, ecx에는 10, 20, 30이 반복되며 나타난다. 그리고 이름과 해당 값을 xor 계산하여 시리얼을 생성한다. 그렇다면, "5B134977135E7D13" 시리얼을 차례로 10, 20, 30을 xor하여 값을 구하면 답을 찾을 수 있을 것이다. (손으로 하나씩 해도 되는데, 코드를 구현해봤다.) serial = "5B134977135E7D13" x_value = [16, 32, 4.. 더보기
[Reversing.kr] Easy Crack [주의] 해당 글에는 풀이 및 정답이 적혀있습니다. 스스로 해결하고 싶으신 분들은 문제를 해결한 후, 이 페이지를 참고하셨으면 합니다 : ) 차분히 디버깅하면서 내가 넣은 값이랑 비교하는 값이랑 확인하면서 풀다보니 flag를 획득했다. 우선 string으로 "Incorrect Password" 인 부분을 찾고 그 함수에서 BP를 걸고 디버깅했다. [ESP+5], 61(=a)와 비교한다. [ESP+5] 값은 입력 값의 2번째 글자다. 그 다음엔, 5y와 "?a"다음 2글자를 _strncmp 함수로 비교한다. "?a5y" 넣으니깐 다음으로 넘어갔다. 반복문을 돌며 "?a5y" 다음 글자들과 "R3versing"을 비교한다. 마지막으로, 가장 처음글자를 45(=E)와 비교한다. 그래서 최종 답은 "Ea5yR3.. 더보기
BOJ 11650 (좌표 정렬하기) #include int tmp_x[100000]; int tmp_y[100000]; void merge(int x[], int y[], int left, int right) { int L = left; int mid = (left + right) / 2; int R = mid + 1; int i = left; while (L mid) { for (int j = R; j right) { for (int j = L; j 더보기
BOJ 1018 (체스판 다시 칠하기) #include int min(int a, int b) { if (a > b) return b; else return a; } int main() { int N, M; int res = 1000000; char arr[51][51]; scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) { scanf("%s", arr[i]); } for (int i = 0; i < N - 7; i++) { for (int j = 0; j < M - 7; j++) { int cnt = 0; int num = 0; for (int k = i; k < 8 + i; k++) { for (int l = j; l < 8 + j; l++) { if (arr[i][j] == 'W') { if (.. 더보기
BOJ 1914 (하노이 탑) def hanoi(n, start, end, via): if n == 1: print(start, end) else: hanoi(n-1, start, via, end) print(start, end) hanoi(n-1, via, end, start) n = int(input()) print((2**n)-1) if n 더보기
BOJ 1002 (터렛) #include #include int main() { int T, res; double x1, y1, r1, x2, y2, r2; scanf("%d", &T); for (int i = 0; i q) res = 2; if (d == r || d == q) res = 1; if (d > r || d < q) res = 0; if (x1 == x2 && y1 == y.. 더보기
BOJ 1316(그룹 단어 체커) #include #include int main() { int N; scanf("%d", &N); int count = 0; for (int i = 0; i < N; i++) { char word[101]; int alpha[26] = { 0, }; int flag = 1; scanf("%s", word); int length = strlen(word); for (int j = 0; j < length; j++) { //printf("%c: %d\n", word[i],alpha[word[i] - 97]); if (alpha[word[j] - 97] == 0) { alpha[word[j] - 97] = 1; } else { //printf("i = %d, word[i] = %c\n", i, word[i]).. 더보기