Codeengn 문제 풀이 보고서

TaeHyun Lee·2023년 9월 14일
0

해킹

목록 보기
10/11

먼저 문제를 풀기 전에 다운로드 링크에서 x64dbg를 다운로드 받아준다.

그리고 Codeengn 사이트에서 문제를 다운로드 받은 후에 x64dbg에서 열어줬다.

Basic 01

HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가


열었을 때의 처음 화면이다. 여기서 main으로 가기 위해서 F9를 눌러서 이동한다.

그리고 다시 한번 F9를 눌러주면 메세지 박스가 뜬다.


CD-ROM이 아니라고 뜨는 것을 볼 수 있다. 그리고 명령어들을 살펴보면

inc, dec, cmp, je를 눈여겨 볼 수 있다. 그리고 문제에서 문어보는 GetDriveTypeA의 리턴값을 알아보기 위해서 Break(F2)를 걸고 F8을 눌러서 함수를 실행시켰다.

함수를 실행시키고 레지스터의 값을 살펴보니 다음과 같이 eax = 3, esi = 401000이었다.

이후에 명령어 상에서 esi가 inc로 3번 증가되고 eax는 dec로 2번 감소된다. 그러므로 eax는 1이 되고 esi는 401003이 된다. 그 후에 비교연산이 진행되는데 여기서 값이 같으면 OK가 뜨고 다르면 error가 뜬다고 나와있다.

그래서 값을 맞춰주기 위해서 GetDriveTypeA를 실행한 직후에 esi를 -2로 만들어서 증가가 3번 되면 1이 되도록 맞춰주었다. 그러면 eax, esi가 각각 증감을 실행하면 1로 같아진다. 그래서 그렇게 실행을 한 결과


정답을 띄울 수 있었다. 그리고 이 방법 말고 다른 방법도 있다.

처음 화면이다. 여기서 실행을 한다면 당연히 error로 갈 것이다. 근데 여기서 명령어를 수정하는 방법을 통해서 OK를 띄울 수 있다. 첫번째는 비교연산인 cmp를 수정하는 것이다. cmp eax, esi라고 되어있는 것을 cmp eax, eax로 바꾸는 것이다. 이러면 무조건 같을 수밖에 없기 때문에 OK가 뜬다.

명령어를 클릭하고 스페이스바를 눌러서 수정할 수 있었다.

또 다른 방법을 je 명령어 자체를 변경해버리는 것이다. je는 jump equal인데 이것을 jne(jump not equal)로 바꾸는 것이다. 이렇게 실행을 하면

정답이 뜬다.

Basic 02

패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오

파일을 다운로드 받은 후에 x64dbg로 열려고 하니 열리지 않았다. 그래서 HxD를 통해서 파일을 열어주었다.

Text를 더 확인하기 위해서 조금 내려주었다.

DialogBox라는 단어를 찾을 수 있었다. 그리고 조금 더 내려주었다.

Nope, try again! 과 Yeah, you did it!.Crackme #1. JK3FJZh가 있었다. 이러한 값들을 구한 후에 문제에서 찾는 패스워드로 보이는 JK3FJZh를 Codeengn의 auth를 통해서 넣어주니 정답을 띄울 수 있었다.

Basic 03

비주얼베이직에서 스트링 비교함수 이름은?

문제를 실행하니 뭘 다운받으라고 한다. 그것을 다운받고 문제 파일을 다운받은 폴더로 옮긴 후에 실행한다. 그러니 실행시킬 수 있었다. 실행화면에 스트링 비교함수인 StrComp를 입력하니


이런 에러가 떴다. 그리고 문제 파일을 x64dbg에서 열어서

한번 쭉 내려 보았다.


아까 떴던 에러와 같은 메세지를 찾았다. 그리고 위에 있는 2G83G35Hs2를 한번 입력해 보았다.

에러가 바낀걸 확인 할 수 있었다. 이제 이 메세지를 찾았다.

이 메세지 또한 위에 이상한 문자열이 있었다. 그래서 입력해보았다.

명령어를 자세히 보니

__vbaStrCmp가 보인다 이걸 auth에 입력해 보았다.



정답이 떴다.

Basic 04

이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가


그냥 한번 실행시켜 보았다. 그리고 디버깅 프로그램으로 열고 실행 시켜보니 디버깅 당함이라고 뜨는걸 확인할 수 있었다.


디버깅을 탐지하는 함수가 실행된 후에 디버깅 당함이라는 문자가 생겨나기 시작했으므로 F9를 눌러서 프로그램을 실행시킨 후에 모든 모듈간 호출을 확인했다.

가장 눈에 띄는 것은 IsDebuggerPresent였다. 현재 디버깅인가? 라는 의미의 함수인 것 같다.

정답을 띄울 수 있었다.

profile
서커스형 개발자

0개의 댓글