본문 바로가기

분류 전체보기

(312)
크랙 : 레나 챌린지 (Level 4) PixtopianBook 체험판 크랙 해당 프로그램은 안티 디버그 설정이 되어있어 디버그를 실행을 했을 때, 실행 화면이 출력이 되지 않는다. Ollyobg 툴에서는 옵션을 설정을 하면 무시를 할 수 있는 기능이 있다. 해당 부분을 진짜 프로그램처럼 수정을 해보자. 메모리쪽에서 해당 부분을 검색을 한다. 상태바에 있는 내용이 있는 주소인 4E4 BC6로 이동을 해보자. 지우고 싶은 (UNREFISTERED VERSION) 부분의 메모리를 NOP로 수정을 한 다음 파일을 저장한다. 해당 부분이 삭제된걸 확인할 수 있다. 다음 단계는 This is an unregistered version of.... 부분이다. 메모리에 가서 삭제할 문자열의 위치를 찾기 위한 검색을 진행한다. a에서부터 뒷부분을 a reg..
PE 분석 : 레나 챌린지 (Level 3) 2 실행 화면은 Level3과 같음 다른 점은 디버그로 열었을 때, Error 가 발생한다. EntryPoint가 7C90120F 위치에 있다. 분석방법 1. Entry Point 직접 가서 잡는다. -> 덤프 위치를 변경해 주면 된다. 2. PE 구조가 이상해서 에러가 발생이기때문에 PE구조 수정을 한다. 2.1 PE 구조를 비교를 해본다. PE 구조가 온전하지 않아 분석하기가 어렵다..... 다른 툴인 HxD를 사용하여 두개의 프로그램을 비교해 보자 F6을 눌러 다른 부분을 찾아준다. 위치는 D00F는 DF이다. PEview를 통해 확인해 보자. Size of Code가 40000400으로 변경이 되었다. 40을 00으로 수정 00000A00 -> 40000A00으로 수정이 되었다... 이렇게 다른 부분..
PE 분석 : 레나 챌린지 (Level 3) 1 Nags를 삭제해라,, 경고창을 없애라!! PE 구조를 파악하기 위해서 PEview 툴을 사용한다. Offset to New EXE Header가 가리키는 것은 새로운 해더의 위치(000000 C0)이다. Image Base(400000byte)의 1000byte 지점에 진입점이 있다는 뜻이다. 프로그램의 진입점은 401000점 이다. JE에서 점프를 진행을 해야 하는데 CMP EAX, 0에서는 거짓이 나오기 때문에 점프를 하지 않기 때문에 밑에 있는 MessageBox가 실행이 된다. (Nags 제거를 위해 JE를 JMP로 수정을 한다.) **우리는 공부가 목적이기 때문에 JMP가 아닌 EntryPoint를 수정을 해서 통과를 할 것이다 EntryPoint를 401024 번지로 수정을 할 것이다. 1...
라이센스 키 알고리즘 분석하기 : 레나 챌린지 (Level 2) 오늘의 목적은 Keyfile를 만드는 거이기 때문에 해당 파일을 삭제해 준다. Keyfile를 삭제를 하면 위 와 같은 메시지가 출력이 된다. OllyDbg로 해당 파일을 열고 확인을 하면, CreatFileA는 Keyfile.dat가 존재해야지 열린다. 해당 파일에 Notepad를 열어 abcd 입력 후, 파일 이름을 Keyfile.dat으로 수정을 해준다. 해당 버퍼에 abcd가 들어갔는지 확인을 한다. abcd가 잘 들어가 있다. 해당 데이터를 몇 바이트 읽었는지 확인을 한다. 실행을 시키다 보면 402173 주 속값의 데이터와 10 byte랑 비교를 하고 해당 값이 작으면 JL 부분에서 점프를 취한다. 즉, Keyfile.dat의 크기가 10byte 보다 크며 해당 부분은 무사히 통과할 수 있다...
라이센스 루틴 지나기 : 레나 챌린지(Level 1) 문제 정보 1. 새로운 license가 필요하다는 메시지가 출력이 된다. F8을 눌러 한 개씩 실행을 시키다 보면 lincense가 필요하다는 메시지가 보인다. 즉, 그 위 가상메모리 주소에서 CMP EAX , -1 (CreateFileA가 실패를 했다라는 의미)을 비교하고 맞으면 0040109A 주소로 점프를 하고, 값이 다르면 점프를 안 하고 메시지를 출력을 시킨다. JNZ -> JMP 로 변경을 해 해당 주소를 지나갈 때, 0040109A 주소로 점프를 할 수 있게 수정을 한다. F8로 계속 실행시키다보면 다른 곳에서 Keyfile is not vaild 메시지가 출력이 되면서 프로그램을 종료시킨다. JNZ에서 점프가 안되고 그 밑에 주소인 JMP가 실행이 되면서 Kefile is not vaild..
C++ 문법 뽀개기 ∙ C언어와 C++ 그리고 C#이 무엇인가? - C언어 : 아주 먼 옛날 벨 연구소에서 Unix라는 운영체제(OS)를 개발 목적으로 탄생한 언어이다. - C++ : 조금 먼 옛날 C언어에서 한단계 진화한 언어로 객체와 클래스라는 개념이 처음 도입이 되었다. 이후 템플릿이라는 기능이 추가되어 더욱더 강력해졌고 지금도 계속 꾸준히 발전중이다. - C# : 마이크로소프트사에서 2000년대 개발한 언어인데, 사실 Java를 대항하기 위해 탄생한 언어이다 보니 C와 C++만큼 관련은 없다. ∙ C++ 의 장점 1. 속도가 빠르다. (python 보다 수십배에서 수백배정도!) 2. 사용자가 직접! 메모리를 관리할 수 있다. 3. cross-platform : 하나의 코드를 여기저기서 사용 -> C++으로 하나를 만..
동적 계획법 응용 : 정수 삼각형 ∙문제 해결 방법 - 정수 삼각형을 직각 삼각형 형태로 표현할 경우, 임의의 좌표 (x, y)에 이동하기 위해서는 (x - 1, y -1) 또는 (x, y - 1)좌표를 거쳐야한다. - 임의의 좌표 (x, y)에서의 삼각형 정수 값을 tri(x, y)라고 하고, 꼭대기 좌표에서 (x, y)까지 이동할 때의 정수 합의 최댓값을 dp(x, y)라고 할 경우 아래의 식이 성립된다. - 꼭대기 좌표부터 시작하여 왼쪽에서 오른쪽으로 위에서 아래 방향으로 dp(x, y) 값을 계산하고, 최종적으로 삼각형 바닥에서 dp(x, y)의 최댓값 구한다. ∙ 정수 삼각형 문제의 솔루션 함수의 예 int solution(vector triangle) { vector dp = triangle; int n = triangle.s..
동적 계획법 응용 : 최소 비용 경로 ∙ 최소 비용 경로 (minimum cost path) - 2차원 행렬의 각 셀에 정수 값 비용이 적혀 있을 때, 행렬의 좌상단에서 우하단까지 이동하기 위한 최소 비용을 계산하는 문제. 최소 경로 합 - 이동은 오른쪽 또는 아래쪽 방향으로만 가능 ∙ 문제 해결 방법 - 오른쪽 또는 아래쪽 방향으로만 이동할 수 있으므로, 임의이 좌표(x, y)에 도달하기 위해서는 (x-1,y) 또는 (x, y-1)좌표를 거쳐야 한다. - 임의의 좌표 (x, y)에서의 행렬 값(비용)을 m(x, y)라고 하고, 좌상단에서 (x, y)까지 이동하는 경로의 최소 비용을 C(x, y)라고 할 경우 아래의 식이 성립된다. C(x, y) =. min(C(x - 1, y), C(x, y - 1)) + m(x, y) - 좌상단 좌표부터..