목록Reversing/CodeEngn (32)
Information Security Study

문제: 이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 문제 파일을 실행하니 '정상' 문자열이 뜬다. Immunity Debugger로 열어보았다. Search for > All referenced string에서 '정상'을 찾아보았지만 없었다. 코드를 한줄씩 실행하다보니 00408454에서 '디버깅 당함' 문자열을 볼 수 있었고 이 위치에서 디버깅이 시작됨을 알 수 있었다. 00408454 함수 내부로 들어와보니 IsDebuggerPresent 함수가 보였다. 계속 한줄씩 실행하다보니 00401074에서 '디버깅 당함'이 찍혔다. 이 방법 말고도 Found intermodular calls를 이용하여 함수명을 찾을 수 있다.

문제: 비주얼베이직에서 스트링 비교함수 이름은? 03.exe 파일을 실행하면 코드를 입력하는 창이 뜬다. 우선 아무 값이나 입력해보았고 에러 메시지를 확인할 수 있었다. Immunity Debugger로 03.exe 파일을 열어보았다. Code Window에서 특별히 문자열을 찾아볼 수 없었기 때문에 Search for > All referenced text strings 로 파일의 문자열을 확인했다. 문자열 참조 중 “2G83G35Hs2”라는 문자열을 볼 수 있다. 이를 클릭하여 들어가 보았다. 클릭하여 들어가 보니 “2G83G35Hs2” 문자열 밑에 vbaStrCmp (Visualbasic String Compare) 문자열 비교 함수를 찾을 수 있었다. Regcode란에 “2G83G35Hs2” 문자..

문제: 패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오. 02.exe 파일을 실행하니 에러 메시지와 함께 실행이 되지 않았다. 디버거로도 열리지 않아 HxD로 한번 열어보았다. 02.exe 파일의 Hex code와 offset, decoded code를 볼 수 있었다. 해당 파일이 실행파일인지 확인하려면 offset의 00000000부터 00000030까지 확인해 보면 된다. 4D 5A로 시작하면 PE구조를 가진 파일이라는 의미이다. decoded code 부분을 쭉 보다보니 "Yeah, you did it!" 이라는 문자열과 문제 정답을 찾을 수 있었다.

문제: HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가 문제 파일 실행 시 "Make me think your HD is a CD-Rom,"이라는 문자열을 볼 수 있다, 확인 버튼을 눌러보니 CD-ROM Drive가 아니라는 에러 문자열이 뜬다. Immunity Debugger로 01.exe 파일을 열어보았다. Code Window 우측을 보면 파란색으로 표시되어있는 함수와 문자열을 볼 수 있다. HDD를 CD-ROM Drive로 인식시켰을 때의 문자열을 확인할 수 있다. 성공 문자열이 있는 함수 내부로 들어가면 문제를 해결할 수 있을 것 같다. 0040101F를 보면 00401021 주소로 JMP를 하는데 00401021 주소 대신 성공 문자열이 있..

문제: 정답은 무엇인가 004012C5 이 부분이 입력받는 부분이다. 004013C5는 핵심 함수이다. 입력 뒤 핵심함수로 진행한다. f7로 자세히 들여다보았더니 CRAAACKED! 글자를 찾을 수 있었고 CRAAACKED! 를 입력하니 WELL DONE! 창이 뜨는 것을 확인할 수 있었다. 정답은 CRAAACKED!

문제: 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오 1번 파일을 올리디버그로 실행해보았다. 패킹이 되어있었고 CFF로 언패킹했다. 우선 실행을 먼저 해보니 에러메시지를 확인할 수 있었다. IsDebuggerPresent 함수가 호출하는 것 같다. BP를 걸고 실행해주었다. JNZ문을 JE로 변경해줍니다. 변경해준 뒤에 timeGetTime 함수에 BP를 걸어서 실행했다. 0044D3A에서 멈추는 것을 확인할 수 있었다. 이는 timeGetTime의 반환값과 ebx+4와 비교한다. ebx+4는 0x337B이고 10진수로 13179이다. 정답은 DB59260CCE0B871C7B2BB780EEE305DB

문제: Name이 CodeEngn일때 Serial은 무엇인가 실행 시 화면이다. All referenced text strings로 실패시 뜨는 문자열을 찾아준다. "Bad" 문자열을 찾았고 그 위를 보니 성공 메시지 출력 부분으로 분기하는 JE문과 문자열 비교 함수를 찾을 수 있었다. 자세히 보면 String 1과 시리얼 넘버 String 2 값을 비교하고 있다. 확인하기 위해 18.exe를 실행해 입력해보니 성공 문자열이 출력되는 것을 확인할 수 있다. 정답: 06162370056B6AC0

문제: Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가 힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자) 17번 파일을 올리디버거로 실행해준뒤 실패시 뜨는 구문을 찾아준다. 문자열 위에 문자열 길이를 비교하는 cmp eax, 3 구문이 있고 cmp eax, 1로 수정해준다. "Good Boy!!!" 는 성공 시 출력될 것으로 예상된다. 확인해보면 JNZ 명령이 분기점임을 확인할 수 있다. BEDA로 시작하는 시리얼 값을 가지는 문자는 F임을 알 수 있다. 따라서 F의 해시값을 변환기를 통해 구해보았다. 정답은 800618943025315F869E4E1F09471012