wonder

정보보안 스터디 - 19주차 1일 - 프로그램 기능적 크랙 본문

Security/리버싱

정보보안 스터디 - 19주차 1일 - 프로그램 기능적 크랙

wonder12 2023. 2. 17. 07:49

 

lena CTF를 계속 풀어보면서

 

일단 타이틀이나

겉으로만 보이는 건 없앨 수 있습니다.

 

하지만 문제는 겉으로는 없앨 수 있지만

키를 등록하지 않으면 trial 접속 횟수에 제한이 있거나

창이 계속 뜬다거나

확실히 register 등록해야 인정해주는 경우입니다.

 

이 때는 문자열만 없애는 게 아니라 확실히 찾아서 점프하게 만들어 인증을 우회해 줘야합니다.

 

 

☞ level 3

정품인증을 하지 않으면 처음 실행할 때 

첫번째 창과 세번째 창이 같이 뜨게 됩니다.

 

함수가 호출되면서 팝업창이 뜨는데

함수를 무조건 제거하면 프로그램이 동작안할 수 있기 때문에

F7로 들어가 세부 분석 후에 제거해야합니다.

 

바로 검색하지 말고

F8을 계속 눌러 팝업창이 뜰 때까지 실행을 시켜봅니다.

간단하게 인자값을 쭉 PUSH하고 팝업창이 실행되는구조라 확인하기 편했습니다.

 

NOP= 아무것도 넣지 않겠다. 

로 채워 아예 함수 동작하지 않도록 해줍니다. 

5바이트를 NOP로 채웁니다.

 

 

 

level 4

전화번호부 프로그램입니다.

 

 

현재 키 인증이 된 상태가 아니라는 정보가 3곳에서 뜹니다.

사용기한이 5일 남았다거나 기능에는 제한이 없기 때문에 겉 표지를 바꾼다는 느낌으로 접근합니다.

 

 

여기서 문자열로 찾을 경우

search for 로 찾는다면 주석(코드표)에만 뜨는경우입니다. 

 

하지만 주석에 입력하지 않는 경우도 존재하기 때문에

이 때는 M버튼(메모리) 클릭하여 메모리창 안에서 문자열을 검색ㅎ야합니다.

 

메모리상에 올라온 

ASCII 코드 또는 

UNICODE로 검색합니다.

ascii나 unicode 둘 중에 하나는 될 겁니다.

이 때 UNICODE는 메모리상에서 .이 붙어서 나오는 형식이라 한글자당 2바이트 라고 보면됩니다.

 

메모리 상에서

CTLR+E로 keep size를 유지시키고 문자열을 변경합니다

 

 

 

수정이 완료되었습니다.

 

 

 

기능 수정

 

 

기능 상으로는 지금 멤버 4명이상, 

그룹은 3그룹 이상 만들기가 불가능한 상태입니다.

이 부분은 딱봐도 비교구문으로 3, 4를 각각 비교한 후 분기되는 명령어 부분이 있을 테니

값을 바꿔주거나 바로 점프를 해줘서 제한 메세지가 뜨지 않도록 합니다.

 

 

 

 

완료되었습니다.

 

 

 

일시중지 버튼을 누르면 프로그램이 중지가 되서 기능할 수 없습니다.

이 때 K를 눌러 현재 메모리에 열어져있는 함수를 확인 후 함수주소로 가주는 방식이 있습니다. 

또는debug > execute ~ usercode를 그 쪽으로 가줍니다.

 

 

 

 

level 5

포토샵같은 프로그램이며

이것은 처음 trial 버전이라면 10번밖에 실행을 못하고 종료할 때도 광고창이 뜹니다.

즉 첫번째와 세번째 창을 닫고 싶은 상황입니다.

 

일단 exeinfo로 해당 PE 파일이 어떤 환경에서 만들어졌는지 확인합니다.

visual C++ 환경으로 제작되었습니다.

 

 

함수가 호출되면서 팝업이 실행되는 데 이 때

break point를 걸고 F7을 해서 함수 내부를 자세히 들여다 봅니다.

 

그러다보면 프로그램영역이 아니라 시스템 dll 주소 영역이(7xxxxxxx) 나오는데 

이 때는 소프트웨어 bp가 아닌 하드웨어 breakpoint를 이용해 호출부분을 엽니다.

하드웨어를 사용했기 때문에 bp까지 바로 실행이 가능합니다.

 

 

여기에서 결국 실행이 되는데 창을 안나오게 하기 위해서는 건너뛰어야 합니다. 

TEST AL, AL 결과와 상관없이 점프할 수 있도록 JMP로 수정합니다.

 

 

그다음 광고 팝업창을 패치해야하는데 

이건 F8을 누른다고 해서 자동으로 뜨지않습니다.

종료를 해야 작동하기 때문에

F9를 실행하고 종료까지 실시합니다..

 

 

이 때 일시중지를 하여 K(call stack of main thread) 버튼을 눌러 called from에 광고 팝업창이 어떤 함수에 의해 호출되었는지 확인하고 show call로 해당 주소에 들어갑니다.

 

call함수에 BP를 지정하고 ctrl F2로 재시작하여 BP지점으로 이동합니다. 

이 때 실행하면 바로 팝업창이 나오는 부분이기 때문에

jmp가 아닌 CALL 처리 되지 않도록 그냥 NOP으로 변경하여 팝업창을 띄우지 않습니다.

 

Copy to executable > All modifications > copy all > Save files 로 저장까지 합니다.

 

 

level 6

PCsurgeion 이라는 프로그램입니다.

처음에 창이 하나 뜨는데 

정품인증을 하지 않아 뜨게 됩니다.

메인화면에서 또한 5일이 남았다고 타이틀에 뜨게 됩니다.

 

정품인증 자체를 해결한다면 창도 사라지고 정보에서도 registered 된다고 뜨는 문제였습니다.

 

 

 

처음에 정품인증을 하지않아 영향을 받는 부분을 확인하고

문자열을 수집합니다. 팝업창 위주로 실행합니다.

 

<Unregistered Version> 이라고 뜨는 부분 근처에서 JMP하거나 값을 변경하여 우회가

가능할 것으로 의심됩니다.

 

처음 부터 팝업창을 없애야지 생각 하지 않고 하는 이유는

이렇게 정품인증 값을 인증하는 입력창이 있는 경우에는 우회하여 정품인증 처리를 받으면 모두 해결되기 때문입니다.

 

일단 델파이 개발환경에서 제작된 프로그램입니다.

 

 

 

<unregistered - 5 days ~ >문자열을 referenced 에 먼저 검색하고 없으면 메모리상에서 검색합니다.

해당 주소에가서 실행하면서 확인해보니

타이틀의 남은일자 문자열이 먼저나오고 그다음 첫번째 팝업창이 뜨는 구조로 되어있습니다.

 

위에 보면 JNZ를 무조건적인 JMP로 바꿔 해당 단계를 뛰어넘어버립니다.

 

 

 

그다음은  <Unregistered Version> 문자열을 찾아

마찬가지로 JMP를 해야 해당 단계를 건너뛰고 정품처리로 넘어갑니다.

 

 

 

 

 

level 7

MrBills 라는 프로그램이며

이것도 역시 창은 뜨지 않지만 

정품인증안됨 타이틀과, about > register를 해결해야 합니다.

 

 

Email과 라이센스 키 값을 입력해서 중요한 팝업창의 문자열까지(크랙/패치 해야되는 부분) 수집합니다.

 

 

다른 데 문자열을 검색하기 보다는 메세지 정보가 뜨는 곳을 문자열 검색하는 것이 좋습니다.

프로그램 구성상 인자값을 push 하고 그다음 메세지함수를 불러오기 때문에 메세지 정보가 뜨는 창을 주의해서 봐야할 것 같습니다. 

 

 바로 메세지 경고창 코드근처로 들어가 JMP를 하여 정품인증을 우회합니다. 

그러면 정품인증되었기 때문에 타이틀 문제도 해결됩니다.

 

지금 한 처리는 일회성이기 때문에 수준을 높여

더 앞의 코드를 분석 후 수정하여 재시작해도 정품인증을 유지할 수 있도록 할수도 있습니다. 

 

 

 

 

 

Comments