해킹 공부/리버싱 10

StolenByte란?

- StolenByte란? 말 그대로 훔친 바이트라는 뜻으로, 패킹된 프로그램에서 코드의 일부를 훔치는(숨기는) 것이다. - StolenByte를 적용하는 이유 Anti-Reverse Engineering의 일환이다. 패킹된 파일을 언패킹할때 OEP(original entry point)를 찾아서 덤프해야 하는데, 만약 StolenByte를 적용하면 OEP 이전에 일부 코드가 들어있음 -> OEP 찾아서 언패킹해도 프로그램이 정상실행되지 않는다. => 언패킹 방해할 수 있음 - StolenByte 찾기 프로그램을 디버거에서 분석했을 때 위와 같이 popad 직후에 push되는 값들이 있다면 이것을 StolenByte로 추정할 수 있다. 상자 안의 값들이 StolenByte가 맞는지 확인하기 위해선 저 값..

CodeEngn_Basic RCE L9 (StolenByte)

1. 문제 파일 실행 문제 파일 실행 시 keyfile 확인을 위해 ok버튼을 누르라는 메세지 창 실행됨 확인 버튼 클릭 시 파일을 찾을 수 없다는 안내문이 나옴 2. 문제 파일 패킹 여부 확인 PEiD로 확인 결과 UPX로 패킹된 파일이다. 3. UPX 언패킹 upx.exe로 언패킹을 해 보았다. 성공적으로 언팩되었다. 그런데 언패킹 된 파일을 실행해보니 문자가 깨지면서 정상실행되지 않고 오류창이 뜨며 종료되었다. 단순히 언패킹툴로 언패킹하는 문제가 아닌 것이다. 여기서 사용되는 개념이 문제에 제시된 StolenByte이다. StolenByte란? 4. StolenByte 찾기 StolenByte를 찾는 것은 어렵지 않다. 디버거로 패킹된 원본파일을 열고 살펴보면 POPAD 뒤에 어떤 값들이 연속으로 ..

CodeEngn_Basic RCE L16 (CMP, 레지스터값, stack)

1. 문제 파일 실행 문제 파일 실행 시 Name과 Password를 입력하는 프로그램 실행됨 잘못된 Password 입력하면 Wrong password가 출력됨 2. 문제 파일 패킹 여부 확인 PEiD로 확인 결과 EP Section이 .text로 나오는 것으로 보아 패킹되지 않은 실행파일이다. 3. Password 찾기 immnunity debugger로 문제 파일을 연 후 password를 찾기로 했다. 올바른 password를 입력한 경우 성공메시지가 출력될 것이므로 해당 위치 근처를 살펴보기로 했다. immnunity debugger로 문제 파일을 연 후 마우스 우클릭 > Search for > All referenced text strings로 파일에 포함된 문자열을 확인한 결과 성공 시 출력..

CodeEngn_Basic RCE L15 (CMP, 레지스터값, hex dump)

1. 문제 파일 실행 문제 파일 실행 시 Name 과 Serial를 입력하는 메세지 창 실행됨 잘못된 키 입력하고 Check it 클릭 시 다시 시도하라는 문자 출력됨 2. 문제 파일 패킹 여부 확인 PEiD로 확인 결과 EP Section이 CODE로 나왔다. 이런 경우는 처음이라 왜 CODE인지 잘 모르겠지만 일단 디버거에서 열어보기로 했다. 3. Serial 값 찾기 immnunity debugger로 문제 파일을 열어보았는데 특별히 이상한 점이 보이지 않는 것으로 보아 패킹된 것은 아닌가보다. 올바른 Serial 값을 입력한 경우 성공메시지가 출력될 것이기 때문에 해당 위치 근처를 살펴보기로 했다. immnunity debugger로 문제 파일을 연 후 마우스 우클릭 > Search for > A..

CodeEngn_Basic RCE L14 (strings, CMP, EAX/ESI값)

1. 문제 파일 실행 문제 파일 실행 시 Name과 Serial을 입력하는 프로그램 실행됨(진짜 수상하게 생겼다) 잘못된 Serial 입력하고 Check를 누르면 오른쪽과 같은 메시지 창 출력됨 2. 문제 파일 패킹 여부 확인 PEiD로 EP Section 확인 결과 UPX로 패킹되었음을 알 수 있다. 3. UPX 언패킹 upx.exe로 언패킹을 위해선 대상 파일과 같은 위치에 존재해야 한다. 해당 위치에서 cmd 창을 열고 ./upx -d 14.exe 명령을 실행해 언패킹했다. 4. 주소영역 찾기 문제를 immunity debugger에서 분석해보았다. 정답/오답 처리 결과가 출력 되는 부분 근처에서 Serial 검증이 일어날 가능성이 높으므로 해당 부분으로 이동해 살펴보았다. 마우스 우클릭 > Sea..

CodeEngn_Basic RCE L13 (C# 디컴파일)

1. 문제 파일 실행 문제 파일 실행 시 password 입력하는 프로그램 실행됨 아무 문자열이나 입력하면 계속해서 다시 시도할 수 있음 문제 풀이를 위해서는 비밀번호를 찾아야 할 것이다. 2. 문제 파일 패킹 여부 확인 PEiD로 확인 결과 EP Section이 .text로 나오는 것으로 보아 패킹되지 않은 실행파일이다. 또 하나 살펴봐야 하는 부분은 아래 초록색 박스 안 내용인데, 이 실행프로그램은 C#으로 쓰였다. C#으로 쓰인 프로그램은 olly debugger 나 immunity debugger로 열리지 않는다. 이것은 아래에 나오는 dotPeek으로 분석할 수 있다. 3. 비밀번호 찾기 dotPeek은 jetbrains에서 제공하는 .NET Decompiler 이자 Assembly Browse..

CodeEngn_Basic RCE L12 (strings, hexedit)

1. 문제 파일 실행 문제 파일 실행 시 Key를 입력하는 메세지 창 실행됨 About 버튼 클릭 시 올바른 키를 찾으라는 안내문이 나옴 잘못된 키 입력하면 Check를 눌러도 아무 반응 없음 2. 문제 파일 패킹 여부 확인 PEiD로 확인 결과 EP Section이 .text로 나오는 것으로 보아 패킹되지 않은 실행파일이다. 3. Key 값 찾기 immnunity debugger로 문제 파일을 연 후 key값을 먼저 찾기로 했다. 문제를 통해 올바른 key값을 입력한 경우 성공메시지가 출력됨을 알 수 있기 때문에 해당 위치 근처를 살펴보기로 했다. immnunity debugger로 문제 파일을 연 후 마우스 우클릭 > Search for > All referenced text strings로 파일에 ..

CodeEngn_Basic RCE L11 (OEP, stolenbyte)

1. 문제 파일 실행 문제 파일 다운로드 후 실행하면 좌측 그림과 같은 창이 뜨고, 확인 버튼을 누르면 우측 메시지가 뜨고, 다시 확인을 누르면 프로그램 실행이 종료된다. 2. 문제 파일 패킹 여부 확인 PEiD 분석 결과 UPX로 패킹된 것을 알 수 있다. 3. Stolenbyte 확인 언패킹 전 문제 파일 원본을 디버거로 분석해보면 Stolenbyte를 찾을 수 있다. (Stolenbyte에 대한 추가 공부 필요) Stolenbyte : 6A0068002040006812204000 4. 언패킹 후 OEP 확인 문제 파일(11.exe)를 언패킹했다. 언패킹 시 upx: 11.exe: IOException: 11.exe: Permission denied 라는 오류가 발생한 경우 디버거에서 파일이 열려있는..

CodeEngn_Basic RCE L06 (OEP, unpacking, strings)

1. 문제 파일 실행 문제 파일(06.exe) 실행 시 시리얼값을 입력받아 확인하는 메세지창이 뜬다. 2. PEiD로 패킹 정보 확인 및 upx 언패킹 PEiD로 확인 결과 upx로 패킹되었음을 알 수 있다. upx.exe와 문제 파일을 같은 위치에 두고 그 위치에서 powershell(or cmd)를 열어 upx 언패킹을 진행한다. 3. OEP 및 Serial 확인 언패킹 후 디버거로 파일을 열어 분석을 시작한다. 정답 인증에 OEP(Original Entry Point)가 필요하기 때문에 디버거에서 파일 실행 시 가장 먼저 위치하는 진입 지점 00401360을 기억해놓자. 마우스 오른쪽 버튼 클릭 -> Search for -> All referenced text strings 로 프로그램 내 문자열을..

CodeEngn_Basic RCE L03

문제 파일 다운로드 후 파일 실행했더니 dll이 없다는 경고가 떴다. Dll 파일 다운로드 후 문제 파일과 MSVBVM50.DLL을 같은 폴더에 위치시킨 후 03.exe를 실행시키면 파일이 정상 실행된다. 디버거에 파일을 넣고 마우스 오른쪽 버튼 클릭 -> Search for -> All referenced text strings 선택 이 파일에 의해 참조되는 모든 문자열이 출력된다. 빨간 네모를 보면 비밀번호로 보이는 문자열 두개를 기점으로 비밀번호 정답/오류 메시지가 출력된다. 예상대로 해당 문자열을 입력하니 정답 창이 나왔다. 실행파일의 비밀번호를 알았으니, 이 비밀번호 정오를 검증하는 문자열 비교함수를 찾아야 한다. 비밀번호를 알아낸 창 왼쪽 상단을 보면 함수 이름으로 보이는 문자열들이 쭉 나온다..