일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- old-1
- 크레인 인형뽑기
- 웹케이알
- 10809
- 소프트맥스 함수
- 리버싱
- JS
- 계단함수
- 자바스크립트
- c++
- Old-17
- 코드엔진
- tcp
- C언어
- 코딩테스트 연습
- 퍼셉트론
- 자바
- 신규 아이디 추천
- webhacking.kr
- 웹해킹
- c언어 게임
- 5585
- 딥러닝
- boj
- 백준
- Old-14
- 네트워크
- 게임 프로그래밍
- openCV
- 프로그래머스
- Today
- Total
목록Reversing (11)
SteffenLee
CPU 레지스터란? CPU 내부에 존재하는 다목적 저장공간입니다. 우리가 일반적으로 알고 있는 RAM과는 다릅니다. CPU가 RAM에 접근하려면 물리적으로 접근해야해서 시간이 오래걸립니다. 하지만 레지스터는 CPU 내부에 존재하기 때문에 빠르게 접근할 수 있습니다. IA-32 레지스터 IA-32레지스터는 인텔 아키텍쳐 32비트 기반 레지스터입니다. 범용 레지스터 말 그래도 범용적으로 사용되는 레지스터입니다. IA-32 기준 각 각의 범용 레지스터들의 크기는 32비트(4바이트)입니다. 대체적으로 상수/주소 등을 저장할 때 사용되며 특정 어셈블리 명령어에서는 특정 레지스터를 조작하기도 합니다. 아래 4개의 레지스터는 주로 산술연산(and, sub, xor, or 등) 명령어에서 상수/변수 값의 저장 용도로 ..
CodeEngn 9번 풀이입니다. Challenges : Basic 09 Author : abex Korean : StolenByte를 구하시오 Ex) 75156A0068352040 English : Find the StolenByte Ex) 75156A0068352040 StolenByte를 구하는 문제입니다. StolenByte : 훔쳐진 코드로 코드 일부분을 OEP로 점프하기 전에 PUSH합니다. StolenByte는 주로 패커에서 자주 보입니다. 그리고 프로그램을 덤프 할 때 StolenByte를 복구하지 않으면 프로그램이 정상적으로 작동 안 할 수 있습니다. 프로그램을 실행 시켜보겠습니다. 이런 식으로 나오는 군요 그럼 PEiD로 패킹이 되어있는지 확인해봅시다. UPX로 패킹이 되어있군요. 그럼..
코드엔진 basic 08번 풀이입니다. OEP를 구하는 문제이군요. 그렇다면 이 프로그램은 패킹이 되어있다고 볼 수 있습니다. PEiD로 확인해보겠습니다. UPX로 패킹되어있군요. 올리디버거로 열어보겠습니다. 앞에서부터 쭉 해오던 패커를 언패킹하는 거니 바로 풀겠습니다. 이렇게 찾으시면 저 점프문에서 점프하는 주소가 정답입니다. 인증해보겠습니다. 성공입니다. 감사합니다.
코드엔진 07번 풀이입니다. 문제가 c드라이브 이름이 codeengn일 경우 생성된 시리얼을 찾으면 되나 봅니다. 그럼 c드라이브 이름을 codeengn으로 바꾸고 시작하겠습니다. 이제 올리디버거로 열어보겠습니다. 일단 한 번 실행시켜 보겠습니다. 이런 식으로 입력을 하니 시리얼이 다르다고 뜨네요. 그럼 밑으로 내리다 보면 많은 문자열이 보이는 곳이 있습니다. 밑에는 실패나 성공을 했을 때 뜨는 문구도 있습니다. 그리고 중간에 아까 입력했던 asdf라는 문자열도 있군요. 그렇다면 저 부근에서 문자열 비교가 일어난다는 걸 추측 할 수 있습니다. 추측이 맞는지 확인 해봅시다. 성공, 실패 여부를 확인하는 곳 앞에는 JE분기문이 있습니다. 이 분기문은 ZF를 보고 판단하여 분기하게 됩니다. 그렇다면 저 부분에..
코드엔진 baisc 06번 풀이 입니다. 문제가 언팩을 한 후에 시리얼을 찾아서 인증하는게 문제인가 봅니다. 언팩을 하려면 어떤 패커로 압축되어 있는지 확인해봅시다. PEiD로 열어봤습니다. UPX로 패킹이 되어있군요. UPX패커라면 지난번에 풀었던 5번과 같은 패커로 이루어져있습니다. 그렇다면 바로 올리디버거로 열어서 언팩을 진행해보겠습니다. 올리디버거로 열은 뒤 POPAD를 찾고 그 밑에서 JMP을 찾았습니다. 그러면 JMP로 따라가는 저 주소 값이 정답의 절반이겠군요 지금까지 정답은 ; 00401360Serial입니다. Serial 키를 찾으러 가봅시다. 지난번과 같은 방법으로 언팩해주신 후에 올리덤프로 저장해주시면 되겠습니다. 2018/01/05 - [CodeEngn] - [CodeEngn]bas..
코드엔진 basic 05번 풀이입니다. 이번 문제는 프로그램에 등록키를 알아내는 문제인가 봅니다. 풀이에 앞서 이 프로그램은 패킹이 되어있습니다. 패킹에 관한 내용은 나중에 따로 다루겠습니다. 그래서 PEiD라는 프로그램으로 패커의 종류를 알아보겠습니다. UPX 0.89.6 - 1.02라는 패커로 패킹 되어있군요. 이 패커의 특징은 시작 부분에서 PUSHAD를 하고 OEP(Original Entry Point)로 들어가기 전에 POPAD를 한다. POPAD이후에 나오는 JMP의 주소 부분이 OEP 주소이다. PUSHAD : PUSHAD는 EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI의 레지스터 값을 스택으로 PUSH 합니다. POPAD : POPAD는 반대로 스택 값에 있는 EAX..
코드엔진 basic 04번 풀이입니다. 안티 디버깅이 되있는 프로그램입니다. 프로그램을 실행시키면 정상이라는 내용이 계속해서 출력되는군요. 그럼 올리디버거에 프로그램을 올리고 실행시켜보겠습니다. 올리디버거에서 실행시켰더니 디버깅 당함이라고 뜨는군요. 그렇다면 이제 디버깅을 탐지하는 함수를 찾아봅시다. Ctrl + F2를 눌러 재시작해주시고 F8로 쭉 실행시켜봅니다. 중간에 실행이 멈추면서 무언가를 호출해오면서 cmd창에 디버깅 당함이라 뜨기 시작합니다. 그렇다면 다시 한번 재시작해주시고 저 부분까지 내려옵니다. 이번에는 F8이 아닌 F7로 내부로 들어가 봅니다. 이런식으로 내부로 들어오게 됩니다. F8로 천천히 실행시키다 보면 중간에 IsDebuggerPresent라고 수상하게 생긴 함수가 있습니다. 이..
새해 복 많이 받으세요! 코드엔진 basic 03번 풀이입니다. 문제는 프로그램 내에 비주얼베이직에서 쓰는 스트링 비교함수를 찾으면 되나 봅니다. 그러면 올리디 버거로 열어보겠습니다. 이런 식으로 돼 있군요. 이런 문제는 실행시키면서 문자열 비교함수를 찾아도 되지만, 다른 방법으로 한번 찾아보겠습니다. 문자열을 비교시킬려면 문자열 비교함수를 호출해야합니다. 그러면 함수만 모아서 찾으면 쉽게 찾을 수 있겠군요. 우클릭 후 > Search for > All intermodulaer calls를 가시면 호출하는 함수 목록을 볼 수 있습니다. 이런 식으로 말이죠. 그럼 이제 저 안에서 비주얼 베이직에서 사용하는 문자열 비교함수를 찾으면 됩니다. 저는 찾을 때 c언어에서 문자열비교함수가 strcmp라는것을 생각하..