먼저 peid로 열어보니 c#으로 만들어진 파일임을 알 수 있다


c#은 디컴파일이 가능하고 디컴파일을 해주는 툴은 reflector이다.



소스를 모두 볼 수 있게 되었고 plainText라는 변수에 저장된 값과 내가 입력한 값을 비교한 뒤에 같으면 정답이라고 출력한다.


코드를 수정해 비교하는 값인 plainText를 출력해 보았다.



답 나왔다.

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

CodeEngn Basic 15  (0) 2017.01.10
CodeEngn Basic 14  (0) 2017.01.10
CodeEngn Basic 12  (0) 2017.01.10
CodeEngn Basic 11  (0) 2017.01.10
CodeEngn Basic 10  (0) 2017.01.10


eax에는 입력값이 들어간다


그런데 eax 0x7a2896bf와 비교해서 같다면 congratulation 이라고 출력을 한다


그러면 key값은 0x7a2896bf 십진수로 2049480383이 된다


그리고 key값을 입력한후 메시지 창이 뜰 때 메시지 박스에 키값이 출력이 되도록 하려면 congratulation자리에 키값이 들어가면 될 것이다.



hex editer로 보았을 때 키값 10자리와 마지막에 null문자를 포함해서 0x???~0x???영역에 overwrite하면 된다.

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

CodeEngn Basic 14  (0) 2017.01.10
CodeEngn Basic 13  (0) 2017.01.10
CodeEngn Basic 11  (0) 2017.01.10
CodeEngn Basic 10  (0) 2017.01.10
CodeEngn Basic 09  (0) 2017.01.10


Popad 이후의 코드를 보면 푸시를 세 번 해주고 그 후에 점프하는 모습을 볼 수 있다.


 stolenbyte는 푸시되는 명령어들의 16진수 값이라 할 수 있고 oep는 점프하는 주소에서 stolenbyte의 크기를 뺀 주소가 oep가 된다.



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

CodeEngn Basic 13  (0) 2017.01.10
CodeEngn Basic 12  (0) 2017.01.10
CodeEngn Basic 10  (0) 2017.01.10
CodeEngn Basic 09  (0) 2017.01.10
CodeEngn Basic 08  (0) 2017.01.10


먼저 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

+ Recent posts