본문 바로가기

리버싱

(2)
[Basic RCE] L05 Q. 이 프로그램의 등록키는 무엇인가? 등록 키를 입력하여 인증을 받는 프로그램이다. 정상적으로 실행한 모습. 아무 값이나 넣고 Register now를 클릭해본다. 시리얼 번호가 틀렸다고 출력되고 아이다를 통해 분석해보기로 한다. 그런데 분석이 되지 않고 딸랑 하나의 Function만 존재하며 세그먼트는 UPX1을 가리키고 있다. 검색을 해보니 UPX로 프로그램이 패킹되어 있는 것을 확인 할 수 있다. Detect It Easy에서도 UPX로 패킹되어있는것을 확인할 수 있다. UPX는 디버거 상태의 OEP 위치에서 다음 진행을 통해 우회하거나, 메모리 상의 시작 위치를 계산하고 덤프하여 분석할 수도 있지만 편의성을 위해 upx 언패커가 존재하므로 해당 프로그램을 사용하기로 한다. 언패킹 후 다시 DIE..
[Basic RCE] L04 Q.이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가? 이번 문제는 디버거를 탐지하는 프로그램이며 해당 함수의 이름을 알아내야 한다. 정상적으로 해당 프로그램을 실행하였을 때 디버거가 탐지되지 않아 정상으로 출력되는 모습이다. IDA를 통해 해당 프로그램을 열어보았다. 먼저 loc_401048의 push 3E8h를 10진수로 바꾸면 1000이 된다. 이것을 스택에 저장 후 Sleep을 콜하여 sleep(1000)이 되며 1초마다 해당 분기를 수행하게 된다. 그리고 IsDebuggerPresent 함수의 경우 Microsoft Docs에서 확인하였을 때 프로세스가 디버거의 컨텍스트에서 실행되고 있다면 반환값은 0이 아니게 되고 프로세스가 디버거의 컨텍스트..