먼저 peid로 열어보니 aspack이 되어있는 것을 볼 수 있다.



Oep를 찾기 위해서 popad 이후에 점프하는 곳 retn 하는 곳으로 가보면



이상하게 나오지만 코드가 복구가 안되서 그렇다. 55 push ebp 이므로 함수 프롤로그다.



코드실행 부분에 들어왔고 등록성공 이전에 분기점을 보니 jnz 명령어가 있다


Eax 0이 아니면 점프를 해서 등록성공이 뜨지 않는다


답 나왔다.


'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 12  (0) 2017.01.10
CodeEngn Basic 11  (0) 2017.01.10
CodeEngn Basic 09  (0) 2017.01.10
CodeEngn Basic 08  (0) 2017.01.10
CodeEngn Basic 07  (0) 2017.01.10


일단 stolenByte가 뭔지 몰라서 조사를 해보았다.



stolenByte: StolenByte 는 훔친 바이트란 의미로 프로그램의 한부분의 코드를 훔쳐내어 다른 부분으로 옮겨진 코드를 말한주로 옮겨지는 코드는 엔트리 포인트위의 몇개의 코드들이며 옮겨진 코드들은 OEP 주소로 점프하기 전에 위치에서 PUSH 된. 이러한 StolenByte 는 주로 패커가 프로그램을 패킹할때 볼수있. 이렇게 옮겨진 코드들은 할당된 메모리 공간에서 실행된. 이때문에 패킹된 프로세스가 덤프될때 StolenByte를 복구하지 못하면 프로그램은 정상적으로 작동하지 못하게 된.




문제를 보면 popad 후에 푸쉬를 세번 하는 것을 볼 수 있다. 푸시되는 명령어를 16진수로 읽으면 인증가능하다.

'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 11  (0) 2017.01.10
CodeEngn Basic 10  (0) 2017.01.10
CodeEngn Basic 08  (0) 2017.01.10
CodeEngn Basic 07  (0) 2017.01.10
CodeEngn Basic 06  (0) 2017.01.10


검색해보니 Popad 명령어를 실행한 후에 점프 뛰는곳의 주소가 oep라고 한다.


'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 10  (0) 2017.01.10
CodeEngn Basic 09  (0) 2017.01.10
CodeEngn Basic 07  (0) 2017.01.10
CodeEngn Basic 06  (0) 2017.01.10
CodeEngn Basic 05  (0) 2017.01.10


GetVolumeInformationA() 함수에 들어가는 2번째 매개변수에 c드라이브 명이 들어간다.


그리고 c드라이브명에서 앞의 4글자가 반복문을 통해서 2씩 증가하는 것을 볼 수 있다


그러므로 c드라이브명이 CodeEngn이라면 무엇으로 바뀌는지 알수있다.

'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 09  (0) 2017.01.10
CodeEngn Basic 08  (0) 2017.01.10
CodeEngn Basic 06  (0) 2017.01.10
CodeEngn Basic 05  (0) 2017.01.10
CodeEngn Basic 04  (0) 2017.01.10


먼저 oep(original entry point)를 찾겠다. Oep upx방식으로 pack된 파일이 실제로 프로그램에 진입하는 지점을 뜻한다.


올리디버거로 upx 방식으로 압축된 파일을 까보면 popad하고 점프하는 부분이 있다. 그점프하는 부분이 oep.



Oep 00401360 .


이제 압축된 원본파일을 unpack 해야 한다.




pack 된 파일



unpack 된 파일



원본파일과 unpack된 파일을 비교해보면 peviewer로 봤을 때 다른 것을 볼 수 있다


이제 serial번호를 찾아야 하는데 처음에 peviewer로 보니



이렇게 문자열이 박혀있는 것을 볼 수 있다. You got it 이라는 문자열을 출력하면 될 거 같다.



코드를 분석하니 시리얼 번호가 보인다.


'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 08  (0) 2017.01.10
CodeEngn Basic 07  (0) 2017.01.10
CodeEngn Basic 05  (0) 2017.01.10
CodeEngn Basic 04  (0) 2017.01.10
CodeEngn Basic 03  (0) 2017.01.10


먼저 잘못 입력했을 때 이러한 메시지 창이 뜬다


이 메시지 창에 있는 문자열이 사용되는 부분을 올리디버거에서 검색해보니 이러한 부분이 나왔다.




아스키코드로 박혀있는 문자열 두 개가 눈에 띈다


Registered User GFX-???-???-???.


두 개의 문자열 이후 점프를 하는데 점프하는 부분을 보니 둘다 Wrong Serial이라는 부분으로 점프를 한다


그렇다면 두 부분에서 점프를 하지 못하도록 하면 될거같다


Unregistered... 부분에는 Registered User를 시리얼 부분에는 GFX-???-???-???를 입력해 주면 된다.


'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 07  (0) 2017.01.10
CodeEngn Basic 06  (0) 2017.01.10
CodeEngn Basic 04  (0) 2017.01.10
CodeEngn Basic 03  (0) 2017.01.10
CodeEngn Basic 02  (0) 2017.01.10


먼저 실행파일을 실행해보니 정상이라고 1초마다 출력이 된다. 그러나 올리디버거로 실행시켰을 때 디버깅 당함이라고 출력이 된다.



올리 디버거로 보니 점프부분에서 정상 또는 디버깅 당함을 출력하는 것을 결정한다.


그 위에는 IsDebugguerPresent 라는 함수를 호출한다


함수명만 봐도 디버거를 탐지하는 함수인지를 알 수 있다.


'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 06  (0) 2017.01.10
CodeEngn Basic 05  (0) 2017.01.10
CodeEngn Basic 03  (0) 2017.01.10
CodeEngn Basic 02  (0) 2017.01.10
CodeEngn Basic 01  (0) 2017.01.10


이 실행파일 역시 컴퓨터에 dll이 없어 실행할 수 없다고 나온다


그래서 pe뷰어로 pe구조를 보니 import directory table msvbvm50.dll이 있었다


컴퓨터에 dll이 없다고 했던 그 dll이.  그래서 dll 내 함수명들을 쭉 보니



이런 함수명이 있었다. vb는 비쥬얼베이직을 뜻하고 strcmp는 스트링 비교를 뜻하는거 같아 인증해보니 인증이 되었다.


'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 06  (0) 2017.01.10
CodeEngn Basic 05  (0) 2017.01.10
CodeEngn Basic 04  (0) 2017.01.10
CodeEngn Basic 02  (0) 2017.01.10
CodeEngn Basic 01  (0) 2017.01.10


먼저 다운받은 실행파일을 실행시켜 보았으나 실행파일이 손상되어 실행을 할 수 없었다.


그래서 pe뷰어로 실행파일의 pe구조를 보니



목록이 이렇게 밖에 나오지 않아 pe구조를 분석하지 못하는구나 라고 생각했다.



그래서 그냥 hex값들을 쭉 보다보니 실행파일이 손상되기전 파일을 실행시키면 쓰일 것 같은 문자열들이 보였다.


그중 비밀번호 같은 것을 인증해보니 인증되었다.

'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 06  (0) 2017.01.10
CodeEngn Basic 05  (0) 2017.01.10
CodeEngn Basic 04  (0) 2017.01.10
CodeEngn Basic 03  (0) 2017.01.10
CodeEngn Basic 01  (0) 2017.01.10




GetDriveTypeA의 리턴값이 eax에 저장되는데 함수 종료후 eax는 두번 감소 된다


그리고 리턴값에서 -2 된 값과 esi를 비교해서 같을경우 CD-ROM으로 인식하는데 esi 3이므로 리턴값은 3이 되야 한다.


'문제 > CodeEngn_Basic' 카테고리의 다른 글

CodeEngn Basic 06  (0) 2017.01.10
CodeEngn Basic 05  (0) 2017.01.10
CodeEngn Basic 04  (0) 2017.01.10
CodeEngn Basic 03  (0) 2017.01.10
CodeEngn Basic 02  (0) 2017.01.10

+ Recent posts