목록Reversing/Wargame (17)
Iriton's log
Name이 CodeEngn일때 Serial을 구하시오. 필요 개념 정리 Ollydbg 메뉴더블 클릭: 해당 주소로 이동 Az 아이콘: 현재 보고 있는 모듈에 있는 문자열들을 참조하는 어셈블리어를 검색해줌. CMP: 두 값을 비교한다. 두 값이 같다면 ZF가 1로, 다르면 0으로 설정됨. JNZ: JNZ A - 비교 값이 0이 아닌 경우 A로 이동, 0인 경우 점프하지 않고 다음 코드 실행. 비교된 값이 있어야 하므로 앞에 CMP가 먼저 실행되어야 함. EAX: 산술, 논리 연산을 수행. 함수의 반환값이 이 레지스터에 저장. 호출 함수의 성공 또는 실패 여부를 쉽게 파악할 수 있으며 반환값을 쉽게 얻어올 수 있음. 리틀 엔디언: 데이터 저장을 위해 메모리에 바이트를 저장하는데, 이 바이트를 저장하는 배열 ..
OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP + OPCODE EX) 00400000EB03 필요 개념 정리 ASPack 패킹: PUSHAD → 복호화 코드 실행 → POPAD → Return 0C → OEP 값 PUSH → Return으로 OEP 주소로 이동 ASPack 언패킹하는 법-하드웨어 BP를 이용하여 언패킹하는 법 -RET C를 찾아 OEP를 찾는 법 PUSHAD: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 순으로 레지스터의 값을 스택에 저장 레지스터들의 값을 보관해야 할 때 사용 POPAD: PUSHAD 명령어로 스택에 보관해 놓은 레지스터 정보를 다시 이용할 때 사용 RET(RETN): CALL을 통해 호출된 함수에서..
StolenByte를 구하시오 Ex) 75156A0068352040 필요 개념 정리 StolenByte: 패킹된 바이너리를 언패킹할 때의 과정을 방해하기 위한 방법으로, 프로그램의 일부 바이트를 별도의 영역에서 실행되게 하여 OEP를 다른 위치로 가장하고 덤프를 쉽게 하지 못하도록 구현한 기법.따라서 OEP를 찾아서 덤프를 떠서 언팩했다고 생각하고 실행하려고 하면 실행되지 않는 것이다. OEP의 옵코드 몇 바이트가 JMP 직전에 있었기 때문에 OEP로 코드 조각이 오지 못했고, 예를 들어 함수의 인자값에 대한 push 옵코드였다면 함수의 인자가 충분하지 않으므로 실행에서 에러가 나게 되는 것이다. 이런 경우 소위 StolenByte라고 하는 옵코드를 찾아서 실행코드 부분에 복원을 해준 다음 언팩 해주어야..
OEP를 구하시오 Ex) 00400000 필요 개념 정리 OEP: Original Entry Point - 패킹된 파일의 실제 프로그램 시작 부분 OEP 이전의 실행 부분은 패킹된 파일이 메모리에 로드되어 압축을 푸는 명령어가 들어 있다. UPX 패킹: PUSHAD로 레지스터 백업 → 아바축 해제 루틴 실행 → POPAD로 레지스터 값 복구 → OEP로 점프 UPX 패킹 파일 구조:[SECTION UPX1] - 압축 코드가 저장되어 있는 공간 [SECTION UPX0] - 메모리에 로드된 후 압축 코드가 해제될 공간 JMP: 압축 해제 루틴 맨 밑에 있는 원본 코드로 이동하기 위한 명령. 이 명령이 실행되어 이동하는 주소가 원본 코드의 시작점인 OEP이다. BP: Break Point - 값이 변경된 경..
Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 00400000PASSWORD 풀이 언패킹을 한 후 시리얼을 찾으라고 하니 뭘로 패킹되어 있는지 확인해 봤다. UPX 패킹이다. cmd - upx.exe -d 06.exe 명령어로 언패킹해준 뒤 올리디버거로 열어봤다. 프로그램을 실행해 봤을 때 시리얼값이 틀리면 Wrong Serial! 이란 창을 띄웠다. 그걸 띄우는 코드로 이동하기 위해 [Search for - All referenced text strings]를 이용했다. 텍스트가 많긴 한데 맨 위쪽에 떴다. Good job과 You got it 이 궁금해서 더블클릭 해 봤다. 역시 여기서 시리얼 값을 찾으면 된다. 임의의 값인 1234를 시리얼 창에 기입하고 한..
이 프로그램의 등록키는 무엇인가 풀이 무슨 프로그램인지는 잘 모르겠다. 이것저것 눌러보니 등록키가 저런 숫자와 영어 조합인 거 같은데 코드 분석으로 찾으면 되는 거 같다. PEiD로 확인해 보니 UPX로 패킹되어 있는 것을 확인할 수 있었다. 이제 UPX 패킹은 익숙하다. 등록키를 찾기 위해 cmd를 통해 언패킹을 해준 뒤 올리디버거로 열어볼 것이다. 언패킹 하는 법: [upx가 다운받아져 있는 파일에 05.exe를 옮긴 뒤 cmd 실행 - upx.exe -d 05.exe] 그럼 이런 화면이 뜬다. 등록키를 정상 입력됐을 때 뜰 만한 문구를 찾기로 했다. [우클릭 - Search for - All referenced text strings] 그럼 이렇게 텍스트를 띄우는 코드들이 뜬다. 저 중에서 "Con..
이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가? 필요 개념 정리 TEST EAX, EAX: EAX의 값이 0인지를 판별하는 코드이다. 풀이 프로그램을 실행시키면 일정 시간이 지남에 따라 "정상"이라는 문구가 출력된다. 올리 디버거로 열어 보았다. 올리디버거를 통해 실행시키니 "디버깅 당함"이라고 출력을 한다. 올리디버거를 통해 F8을 누르면서 코드 흐름을 따라가 보았다. 그러다 00408454 부분에서 어떤 함수를 CALL하니 문자열이 무한반복으로 출력된다는 것을 알게 됐다. [Ctrl + G]를 눌러 해당 주소(0040100F)로 이동하였다. IsDebuggerPresent라는 함수가 의심스러워서 실행시켜 보니 EAX 값이 0에서 1로 변한다. 그..
패스워드로 인증하는 실행파일이 손상되어 실행이 안 되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오. 필요 개념 정리 HxD: 헥스 에디터 프로그램. 평균적으로 16진술 표현된 이진파일을 읽을 수 있게 보여주는 프로그램. 주로 파일 및 프로그램의 내부 데이터 값을 분석, 수정, 복구, 삭제 등을 할 때 사용. 풀이 프로그램을 실행시키면 위와 같은 사진이 뜬다. 올리디버거로도 열리지 않아서 검색해 보니 HxD라는 헥스 에디터 프로그램을 사용해야 된다는 것을 알았다. 헥스 에디터 다운로드 링크 Downloads | mh-nexus Downloads I am looking for new translators, if you want to help, here is a list of unmaintained tra..