본문 바로가기
SMALL

전체 글78

reversing.kr : musicPlayer reversing.kr의 music player 를 풀어 보았다. 우선 문제의 힌트 이다. 실행 파일은 mp3를 넣으면 1분 미리듣기가 가능하다. 이제 이것을 다뤄 보겠다. debuger를 사용하여 메인함수 진입 구간을 발견하였다. F8로 따라가다가 또 함수 진입 구간 발견 디버거 돌리던 중에 1분 미리듣기끝난경우다. 이걸 보자마자, 번뜩 떠올랐다. 문자열 참조!! 우선 1분 미리듣기가 검색이 안되어서 01:00을 찾았다. 하지만! , 이 것으로는 정답을 찾지 못하였다. 다음으로 생각해볼 것은 메세지 박스 호출 발견해서 모두 breakpoint 걸어준다 그리고 모두 메세지 호출 못하도록 메세지 박스 위쪽의 점프문을 모두 점프로 바꿔준다. 저 위에 cmp eax,EA60 부분은 시간 비교 구문이다. 이 것.. 2020. 2. 6.
reversing.kr : Easy UnpackMe Read Me 내용 읽어보니 OEP를 찾는 문제입니다. //OEP : Original Entry Point 만약 파일이 packing이 되면 OEP가 바뀌게 됩니다. 그래서 원래 OEP를 찾으라는 것 같습니다. 실행하면 아무런 반응이 없습니다. 이런? Detect 프로그램을 이용하여 패킹되어있는지 확인합니다. 하지만 packing이 되어있지 않습니다. tool을 사용해서 unpacking하는 문제는 아닌 것같습니다. 그럼 디버거로 직접 찾아야겠죠..? 일단 debuger로 뜯어 보기로 합니다. 일단 디버거로 열어서, 문자열 참조도 안되고 호출도 모르겠습니다. 그래서 F8을 무작정 따라가 봤습니다. 위와 같은 반복문 구간이 보입니다. 일단 반복문 아래에 break point를 걸고 다음으로 넘겼습니다. 반.. 2020. 2. 5.
codeengn : crackme 1 예제 1번 풀이. 예제 1번은 정말 간단하지만 어려운 문제 GetDriveType의 리턴 값이 EAX에 저장되고 EAX-2 , ESI +3 후 둘이 비교해서 같으면 오류 문을 건너뛰는 루틴임을 알 수 있다. (EAX : 1, ESI : 3) 정말 간단한 풀이로는 그냥 00401026 번지의 내용을 JE -> JMP로 수정 후 크랙파일로 저장하면 된다. 혹은 책에 나왔듯이 Zero flag를 1로 수정해주면 된다. 어려운 풀이 - GetDriveType 함수를 구글링 해보면 리턴 값이 3 이면 하드디스크, 리턴값이 5이면 CD-ROM이다. 그리고 위에 루틴을 비교했을 시 EAX - 2 , ESI + 3 --> 5 - 2 == 0 + 3 이므로 따라서 GetDriveType의 리턴 값을 5로 수정해주면 된다.. 2020. 2. 4.
1003번 : 피보나치 함수 이번에는 c++을 이용하여 피보나치 함수를 풀어봤다. 이 문제는 시간제한이 걸려있어서 처음에 너무 당황하였다. 왜냐하면 fibonacci 재귀 함수를 주고서 분석하라고 해서 재귀 함수를 써야 한다는 생각을 못 버렸다. 아래는 처음 풀이다. 또한 각 0과 1의 출력횟수는 fibonacci(N-1) , fibonacci(N)이다. 위의 코드를 이용해서 풀었더니, 결과는 시간 초과.... , 그래서 어떻게 풀어야하나 고민을 하게 되었다. 그때, 알고리즘의 한 종류인 Dynamic Programming을 알게 되었다. 일명 dp. 위키피디아의 DP 정의 일반적으로 주어진 문제를 풀기 위해서, 문제를 여러 개의 하위 문제(subproblem)로 나누어 푼 다음, 그것을 결합하여 최종적인 목적에 도달하는 것이다. .. 2020. 2. 1.
1002번 : 터렛 C++의 입출력을 공부하고 바로 문제를 풀어 보았다. 이 문제는 정답 비율 19.36% 로서 어려웠다... 솔직히 코딩 문제라기보단 수학 문제다. A(x1, y1) B(x2, y2) C라는 점을 두고 , A와 C 사이 거리 r1 , B와 C 사이 거리 r2, A와 B 사이 거리 r3로 두었다. 이 문제에서 크게 두가지 경우로 나누었다. A, B가 동일한 점인 경우 A, B가 동일하지 않은 경우 위와 같이 크게 두 경우로 나누고, 세부적으로 case를 나누었다. A, B동일 점인 경우와 A, B가 다른 점인 경우 모두 r기준으로 구분하였다. 이때, 다른 경우에 maxR을 구해서, maxR을 기준으로 삼각형의 형성 조건을 생각하면서 세 가지 경우로 나누었다. ★삼각형의 형성 조건- 가장 긴 변의 길이 < 나.. 2020. 1. 31.
C++ 표준입출력 및 namespace C 언어에 객체 지향 개념을 추가한 언어 C보다 확장된 언어로써 보다 복잡한 프로그래밍 구현이 가능 C VS C++ 순차적 프로그램 : 순서대로 프로그래밍을 짠다. |객체 지향 ---> class : 속성, 동작(method) C++ 입출력 #include std::cout > i; //키보드로부터 입력 //&쓸 필요 없음 scanf와 다르게 \t\n와 띄어쓰게 무시하고 문자만 인식 cin.getline -> 라인으로 입력받기// 띄어쓰기 탭 포함 가능 helloWorld예제 Namespace 여러 개의 전역적인 라이브러리, 함수 혹은 클래스 등이 중복되어 컴파일 상의 문제를 야기할 수 있으므로, 이들을 구분하여 중복되지 않도록 하는 키워드 함수나 클래스 작성 시 소속된 namespace를 일일이 기술하.. 2020. 1. 31.
반응형
LIST