반응형
반응형

반응형

ReadMe.txt

ReversingKr UnpackMe



Find the OEP


ex) 00401000



OEP = 제대로 디버깅했을 때 시작위치 (Pack된 파일이 Unpack되어서 원본파일이 되는 순간.)




일단 무엇으로 packing되었는지를 알 수 없다.





올리디버거로 열어서 스크롤을 내려보았다.

jmp문이 있다. 여기에 breakpoint을 걸고 실행한다.


그다음 jmp문을 실행한다.




push ebp 여기가 oep다.



authkey : 401150





반응형

'WAR GAME > Reversing.kr' 카테고리의 다른 글

Reversing.kr [Music Player] 풀이  (0) 2018.11.03
Reversing.kr [Easy Keygen] 풀이  (0) 2018.06.19
Reversing.kr [Easy Crack] 풀이  (0) 2018.06.19
반응형

Reversing.kr Easy Keygen 풀이



압축파일로 주어진다. 압축을 풀자.


압축을 풀면 두개의 파일이 나온다.


- Easy Keygen.exe

- ReadMe.txt



ReadMe.txt 의 내용이다.


ReversingKr KeygenMe



Find the Name when the Serial is 5B134977135E7D13



Easy Keygen.exe 을 실행하면 콘솔창이 띄워지고 Name을 입력받고 Serial을 입력받는다.



패킹은 되어 있지 않으니 올리디버거로 까보자.




strings를 확인해보니 "Correct!"와 "Wrong"이 보인다. 해당 부분으로 이동해주었다.





바로 위 분기점에 bp를 걸었다.



더 위로 올라가면 Serial을 입력받는 부분이 나온다. 입력 받고 난 후에 bp를 또 걸어주었다.


실행하고 name에 1234를, Serial에는 5678을 넣어주었다.




EAX에 5678이 들어갔고 ESI에 21120324가 들어갔다.

ECX에 들어간 값이 name의 값을 어떻게 연산해서 만들어진 값으로 추정된다.


그리고 두개의 값을 비교한다.



그렇다면 name의 값을 연산시켜 나온 값이 Serial의 값과 같아야된다는 것을 알 수 있다.


name을 입력받고 난 후의 코드를 보면 name의 값을 연산하는 루틴이 보인다.



name값에서 한바이트씩 가져와 0x10, 0x20, 0x30과 xor연산을 한다.

0번째 바이트는 0x10과,

1번째 바이트는 0x20과,

2번째 바이트는 0x30과,

3번째 바이트는 0x10과 ....


1234를 입력했을 떼 21120324가 나왔다. Serial 값으로 21120324를 넣으니 Correct가 출력된다.





그럼 이제 Serial이 5B134977135E7D13일때 name의 값을 구하면 된다.


name xor {0x10, 0x20, 0x30} = Serial 일때

name = {0x10, 0x20, 0x30} xor Serial 이므로 name의 값을 구할 수 있다.



이렇게 구한 name의 값은 K3yg3nm3이다.







반응형

'WAR GAME > Reversing.kr' 카테고리의 다른 글

Reversing.kr [Music Player] 풀이  (0) 2018.11.03
Reversing.kr [Easy Unpack] 풀이  (0) 2018.09.19
Reversing.kr [Easy Crack] 풀이  (0) 2018.06.19
반응형

Reversing.kr Easy Crack 풀이


Easy_CrackMe.exe 라는 파일이 하나 주어진다.

실행해 보면 창이 하나 뜬다.






Exeinfo로 까보았다.



별거 없다. 올리디버거로 까보면 될 것 같다.

올리디버거를 실행하자.








우클릭 > search for > all reference strings 에 들어가보았다.



여러개의 문자열들이 보인다. 이중에서 성공메세지로 추정되는 문자열을 더블클릭해주어 문자열이 사용되는 위치로 이동했다.





성공메세지를 출력하는 부분으로 보인다. 더 위로 올라가보았다.




'5y', 'R3versing' 이 문자열들과 입력값을 비교하는 것으로 추정된다.

해당 부분과 위에있는 분기점에서 바로 위에 비교구문에 breakpoint (F2)를 걸어주었다.


그리고 실행하여 1234를 넣어보았다.




첫번째 bp다. a와 [LOCAL.24+1]의 값을 비교하는데, [LOCAL.24+1]의 값은 2이다.

그렇다면 [LOCAL.24]에 우리가 입력해준 값이 들어갔을 것이다.


1234에서 2자리에 a를 넣고 길이를 늘려 1a234567890으로 다시 시도해보았다.





a와 우리가 입력한 a를 비교하면서 해당 분기를 통과한다.



그 다음분기는 조건에 맞지 않아 통과하지 못했다.





이번 분기는 '5y'와 비교한다.

a 다음자리에 5y를 넣은 1a5y2345678을 넣어 해당 분기를 통과했다.






그 다음분기는 R과 우리가 입력한 값중 하나인 2를 비교한다.

그렇다면 다음은 R3versing이 오면 된다는 것이다.


1a5yR3versing을 입력해주었다.





4010DA부터 4010FC의 동작을 잘 살펴보면 이렇다:

R3versing과 우리가 입력했던 문자열중 5번째 자리부터의 문자열을 각각 EAX와 ESI에 저장하고

EAX와 ESI에서 각각 한바이트씩 가져와 DL과 BL에 저장하고 DL과 BL을 비교한다.

비교했을 때 값이 같지 않다면 실패부분으로 이동한다.



잘 입력했다면 해당 분기는 통과한다. 그러나 출력되는 메세지는 실패였다.

원인을 알아보기 위해 실패부분으로 이동하는 부분을 찾아 보았다.




실패 부분으로 이동하기 전에 비교를 한번 더 했다.

E와 1을 비교한다. 여기서 1은 우리가 입력했던 값이므로 1을 E로 바꾸어 시도해주었다.






 성공했다



반응형

'WAR GAME > Reversing.kr' 카테고리의 다른 글

Reversing.kr [Music Player] 풀이  (0) 2018.11.03
Reversing.kr [Easy Unpack] 풀이  (0) 2018.09.19
Reversing.kr [Easy Keygen] 풀이  (0) 2018.06.19

+ Recent posts