본문 바로가기

Code Engn - Basic 06 RCE UPX로 패킹되어 있다.UPX 특성상 EP코드는 pushad ~ popad로 이루어져 있는데OEP 코드는 popad 이후에 나타나는 JMP 주소가 되므로 먼저 OEP 코드를 찾았다. 이전에 사용했던 툴을 이용해 언패킹한후 실행해보니 아래와 같은 문자열이 나타났다. 문자열이 호출되는 시점을 찾고, 평문으로 들어간 시리얼을 찾았다. 더보기
Code Engn - Basic 05 RCE 이뮤니티 디버거로 뜯어보니 제대로 안보이길래 헥스에디터로 열어보았다.아래와 같이 UPX로 패킹되어있다는 메세지를 보고 unpacking 함. (http://bbolmin.tistory.com/47 참고) "Wrong Serial" 문자열이 호출되는 시점을 찾아보니 Serial 정보가 평문으로 들어있었다. 입력해보니 정답 더보기
Code Engn - Basic 04 RCE 실행해보니 계속해서 "디버깅 당함" 이라고 출력되었다. 이뮤니티 디버거를 통해서 확인하다보니 딱 봐도 의심스러운 "IsDebuggerPresent"라는 이름의 함수를 발견했다. 아래에 호출되는 0x408190은 문자열 출력부분이고, 0x431024와 0x43101c는 디버깅 여부에 대한 문자열인 듯 하다. JE를 JMP로 바꿔서 우회하였다. (디버깅 중일 때, IsDebuggerPresent()의 반환값은 1 이다.) 더보기
Code Engn - Basic 03 RCE 실행해보니 저런 오류가 나길래 MSVBVM50.DLL을 따로 설치했다. 아무 값이나 넣어보니 틀렸다는 문자열이 나타났길래 이뮤니티 디버거에서 문자열을 찾았다. 에러 문자열이 호출되는 시점을 찾아보니 아래와 같았다. 위아래로 좀더 살펴보니 Key값으로 보이는 문자열과, 아마도 문자열을 비교하는 함수..를 호출하는 부분이 존재했다.확인해보니 맞았다. 더보기
Code Engn - Basic 02 RCE 파일이 손상되어 있어, 실행자체가 안되는 상황.일단 헥스에디터로 확인해봤는데, (처음엔 봐놓고도 key인줄 몰랐다..) 보니까 key가 존재했다. 코드 엔진 사이트에 Auth를 확인하는 부분이 바로 확인되지 않아서 쫌 그랬는데.. 찾아보니 CodeEngn Basic RCE Auth 인증기[출처] CodeEngn Basic RCE Auth 인증기|작성자 해피용 ( ( http://blog.naver.com/93immm/220196816080 ) -> 고맙게도 어떤분이 Auth 인증기를 만들어두심 더보기
Code Engn - Basic 01 RCE C드라이브를 CD-ROM 형태로 인식하게끔 만들면 되는 문제.GetDriveTypeA 함수를 통해 값을 얻으므로, 반환값을 조작하면 된다. 함수의 반환값은 EAX를 통해 전달되므로, GetDriveTypeA 의 반환값은 3이 된다.(하드디스크이므로) GetDriveTypeA 함수의 반환값을 찾아보니 아래와 같았다.CD-ROM의 경우 5이므로, EAX를 5로 조작하여 통과 (다른 방법을 이용해도 CMP-JE 조건만 맞추면 된다.) 더보기
HISCHALL_2013 BAAASIC GNIREENIGNE 보호되어 있는 글입니다. 더보기
01. Hello_World.exe 실습 환경 : Windows XP 32bit 가상머신 + 이뮤니티 디버거 main 함수를 찾은 후에,Title 부분은 문자열을 직접 수정하고message 부분은 빈공간에 문자열을 쓴 후, 문자열이 있는 주소로 주소를 수정함 p.s. 수정된 코드로 파일을 만들면 제대로 작동하지 않는다. message 부분이 문제실행 파일이 메모리에 로딩되어 프로세스로 실행될 때 파일이 그대로 메모리로 로딩되는 것이 아니라,어떤 규칙(메모리 관리기법.. 세그먼테이션+페이징 -> 가상메모리)에 의해 올라가게 되는데프로세스 메모리는 존재하지만, 그에 해당하는 파일 오프셋이 존재하지 않기 때문이라고함 (p.44) PE File Format 공부 후에 이부분 다시 확인 필요.. 더보기
PE 파일 포맷 ( PE File Format ) 요약 PE File Format PE(Portable Executable)파일 - Windows 운영체제에서 사용되는 실행 파일 형식 종류 - 실행 계열 : exe, scr - 라이브러리 계열 : dll, ocx, cpl, drv - 드라이버 계열 : sys, vxd - 오브젝트 파일 계열 : obj 구조 PE Header : DOS Header ~ Section Header PE Body : PE헤더 이후 Section들 파일을 실행하기 위한 모든 정보는 구조체 형식으로 PE 헤더에 저장되어 있다.섹션 헤더에 각 섹션에 대한 크기/위치/속성이 정의되어 있고,파일의 내용은 코드(.text), 데이터(.data), 리소스(.rsrc) 섹션에 나누어 저장한다. 파일에서는 offset으로 메모리에서는 VA로 위치 .. 더보기
함수 호출 규약(Calling Convention) 함수 호출 규약(Calling Convention) 함수 호출 시 전달 되었던 파라미터들에 대하여함수 호출이 끝난 후 스택을 정리하는 방법에 대한 약속( ESP를 정리하는 방법 ) caller : 함수를 호출한 쪽callee : 호출 당한 함수 1. cdcel- 주로 C언어에서 사용 됨- caller에서 스택을 정리한다.- 장점 : 가변 길이 파라미터를 전달할 수 있다.2. stdcall- Win32 API에서 사용됨- callee에서 스택을 정리- c언어에서 stdcall 방식을 사용하고 싶을 때는 함수이름 앞에 '_stdcall' 옵션 추가3. fastcall- stdcall 방식과 기본적으로 같지만, 전달하는 파라미터의 일부(2개)를 레지스터(ECX, EDX)를 이용해 전달한다. 나머지는 스택을 통.. 더보기