본문 바로가기

전체 글

[Reversing.kr] Music Player [주의] 해당 글에는 풀이 및 정답이 적혀있습니다. 스스로 해결하고 싶으신 분들은 문제를 해결한 후, 이 페이지를 참고하셨으면 합니다 : ) Music_Player.exe 파일과 dll 파일을 제공해주고, 1분 이상 실행시키는 것이 목적이다. 처음에 IDA로 봤는데 별로 유의미한 내용을 얻진 못하고, VB Decompiler로 많은 정보를 얻고 IDA의 Graph View로 실행흐름을 파악했다. 프로그램을 1분 이상 실행하려고 하면, "1분 미리듣기만 가능합니다."라고 msgBox가 나온다. FrmMain의 TMR_POS_TIMER를 보면 그 코드가 나와있다. 그래서 해당 부분을, 디버거로 디버깅했는데, 비교하는 부분을 찾았고, 이를 우회하지 못하면 메세지박스가 출력되는 것을 확인했다. 우회하기 위해 0.. 더보기
"버스 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.. 더보기