본문 바로가기

모의해킹/리버싱

난독화 코드 해석과 패치 방법 : 레나 챌린지(Level18)

728x90

프로그램을 실행시키면 nag가 출력이 된다.

메시지를 보면 "nag을 제거하는데 두 개의 바이트를 패치해서 없앨 방법을 찾아내라"라고 적혀있다.

 

올리디버그로 열었는데 바로 밑에 우리가 원하는 nag 메시지 박스가 있는걸 볼 수 있다.

해당 부분에 브레이크 포인트를 걸고 실행을 해보니까...메시지 박스에 브레이크가 걸리지 않는다..

 

Ctrl + N 을 눌러 다른 곳에 메시지 박스가 존재하는지 확인하기 위해 브레이크 포인트를 걸어준다..

다시 프로그램을 실행시키면 해당 부분에서 걸리게 된다. 

내용을 밖에 나가서 보기위해 ctrl + g를 눌러 [esp]을 입력을 해보자.

 

점프하는 곳으로 오게 된다...그 위 주소를 보니까 nag 내용이 출력하는 메시지박스가 있는 걸 확인할 수 있다.

401011을 기억하고 프로그램을 다시 시작해보자.

 

401011로 가면 message box가 없다..?! 코드를 열심히 꼬아놨다는 사실을 알 수 있는 코드이다.

 

코드가 왜 바뀌는지 추적을 해보자. 해당 CALL을 들어가 보자.

 

XOR을 통해서 뭔가의 데이터를 교체하는 부분이 있다.

 

해당 부분에서 nag가 출력이 된다.

 

여기서 nag가 출력이 된다. 

 

F8로 하나씩 실행시키다 보면 데이터가 밀려 올라가는 거 볼 수 있다. 이때 ctrl + a를 누르면 깨진 데이터중에 nag가 출력하는 401011이 보인다.

 

그냥 브레이크 포인트를 걸면 통과가 되기 때문에 하드웨어 브레이크 포인트를 걸어준다.

 

난독화가 풀리면서 nag의 데이터가 깨지지 않는다. 그다음 F8로 실행을 시키다 보면 0040106A로 점프를 하면서 프로그램이 실행이 되는 거 같다.

 

PUSH 0에서 JMP SHORT 0040106A로 점프를 해준다. 그러면 정상적으로 프로그램이 시작된다..

두 바이트 패치를 위해 EB XOR 5A => B1이고 57 XOR 5A -> 0D이다.

 

우리는 16바이트에다가 패치를 한다. B1 0D로 두 바이트를 수정을 하고 파일을 저장하면 저장적으로 nag가 출력이 안된다.