티스토리 뷰

$ 제 풀이는 저 혼자만의 생각이라서 다른 사람의 풀이와 많~~~이 다를 수가 있습니다. 

1. Ransomware 3개 파일

- run 실행파일 1개, file(무슨 암호화가 되어있는 것 같음), readme(힌트파일)

readme에는 Decrypt File(EXE)가 적혀있는 걸로 봐서 file을 복호화 시켜서 EXE로 실행? 저 나름대로의 생각이였습니다.

2. run 파일을 실행 해 보겠습니다. 

3. key를 아무거나 입력 했더니 밑의 글씨가 나오네요. 전형적인 짱깨 말투에 돈 뜯어낼려는 모습이 보입니다.

 4. 실행파일을 분석하기 전에 항상 PEID를 이용해서 패킹이 되어 있는지 확인합니다. 

run 파일은 UPX로 패킹이 되어있네요! 두 가지 방법이 있는데, Manual Unpacking이랑 UPX 툴을 이용해서 언팩을 해주면 됩니다. 저는 UPX툴 깔기가 귀찮아서 사용하지 않을게요~ 툴을 사용하면 UPX는 한방에 풀리기 때문에 간편합니다.

5. 전형적인 패킹된 파일을 들어가면 PUSHAD를 볼 수가 있습니다.

6. 맨 밑에 마우스로 내려보시면 NOP가 수두룩 있는 상태에서 바로 위에 JMP가 있습니다. JMP를 통해 언팩이된 코드로 가봅니다.

7. 언팩된 코드입니다. 저 같은 경우는 이 상태에서 VM으로 스냅샷을 찍어요. 악성코드 분석할 때 필수입니다.

8. 트레이싱 하면서 오류가 났던 부분인데 4135E0 함수로 들어가 보겠습니다.

9. 쓰레기 코드가 나오네요. PUSHAD, POPAD 등 아무의미 없는 넣었다가 빼는ㅋㅋㅋ제가 생각하기로는 분석에 어려움을 주려고 일부러 넣은 듯 하네요. 

10. 힘들게 내려온 결과 정상적인 코드가 보입니다. Key를 입력하라는 print와 scanf를 볼 수가 있습니다. '123'을 입력해 보겠습니다.

11. 트레이싱 하면서 아까 위에서 도둑놈새끼에 의해서 암호화된 file 을 rb로 읽어들입니다. 조작하기 위해서 불러들이는 거라고 생각하시면 됩니다.

12. 첫 번째 반복 루틴이 나옵니다. 이 루틴은 getc로 불러들인 file의 바이너리 값을 한 글자씩 읽어 들입니다.

13. 005415B8의 공간을 만들어서 현재 암호화 되어있는 file의 Hex 값을 넣습니다.

14. 첫 번째 xor 코드가 나오네요. 13번의 hex값과 제가 아까 입력했던 '123' key를 연속적으로 xor시킵니다.

15. 14번에서 xor 시킨 값들과 0FF(255)를 다시 한번 XOR을 시킵니다. 사기꾼이 머리를 쓴 것같은데 흠...

16. 최종적으로 key('123')값으로 복호화 한 값이네요. 하지만 아까 위에서 사기꾼 새끼가 말했듯이 key값이 true라면 정상적인 파일로 풀리고 key값이 fales라면 더 줯같이 암호화 된 다는 것입니다.

17. 위에서 xor한 결과값을 file에 다시 wb 속성으로 write합니다.

18. putc 함수로 값을 읽어들여 문자 수를 체크합니다.

19. getch 함수는 키보드에 이벤트가 발생하면 완료됩니다.


여기까지가 전체적인 코드의 진행과정입니다. 풀이를 시작하기 전에 정리를 하자면 file은 사기꾼에 의해 암호화 되어 있고 

정확한 key 값을 입력해야 정상적인 파일로 복호화가 됩니다. 풀이를 시작 하겠습니다.


암호화된 파일에 'key'값과 'FF(255)'로 xor을 수행을 해서 복호화 된 파일이 나온다....xor은 암호화를 해도 다시 같은 값으로 암호화를 한다면 똑같은 값이 나옵니다. ex) a xor b = c -> b xor c = a 이런 식으로 a,b,c중 하나만 몰라도 2개의 식을 이용해서 구할 수가 있습니다. 

이런 방식을 이용해서 python으로 코드를 짜보았습니다.

20. python 코드인데, 줯밥이라 코드가 많이 더럽네요. 결과 값은 나왔으니 혼자만의 만족ㅠ

일단 암호화된 파일과 FF(255)를 암호화 했습니다.

1. A(암호화파일) xor B(KEY) = C

2. C xor FF(255) = 복호화 한 파일 

이런 방식으로 작동이 되는 것을 알 수가 있는데, 역으로 생각해 보면 암호화 한 파일과 FF(255)를 XOR 하고나서 KEY값으로 XOR을 다시하면 원본 코드가 나온 다는 것을 생각 해봤습니다. 하지만 KEY값을 모르기 때문에 곰곰히 생각을 해본 결과 readMe 파일에서 봤듯이 EXE 파일이라는 힌트가 있었습니다. 그래서 EXE파일의 전형적인 헤더의 HEX값과 비교하면서 KEY값을 유추하는 것을 생각해봤습니다.

21. 결과 값(암호화 한 파일과 FF(255)를 XOR한 결과)

22. 전형적인 실행파일 코드.

- EXE 파일이 가지고 있는 헤더 입니다. 4D 5A 90 많이들 보셨죠??

밑의 그림은 제가 정리해본 KEY값을 알아내기 위한 노가다입니다. 빨간 색이 KEY값인데, EXE 헤더의 HEX값이 나오기 위해서 A xor ? = B를 선택했네요. 전 이렇게 노가다로 풀었는데, python으로 짜는게 더 빠르겠네요..ㅋㅋㅋㅋㅋㅋpython 공부가 절실히 필요합니다 요즘ㅠㅠ

23. 문자열이 나오네요ㅋㅋ 성공입니다. 하지만 답이 아니였습니다... 복호호화된 파일을 다시 분석해야 하는 느낌이 들어서

복화환 file을 .exe 확장자로 변경 후에 분석을 시작 했습니다.

24. file.exe를 PEID에 넣어본 결과 UPX로 패킹이 되어있네요! Markus & Laszlo는 누구지..

25. 버전 낮은 걸로 하면 언팩이 안됩니다. 최신 버전 upx3.07 버전으로 풀어줍니다.

26. UPX로 언팩이 완료 되었습니다. 귀찮음을 가지고 UPX를 다운로드 한 이유는 file.exe 파일을 실행하면 MVCR100D.dll을 찾을 수 없다고나오네요. 빡쳐서 dll을 다운로드해서 바꿔도 안되고 그냥 UPX로 언팩 후에 IDA로 분석 하기로 했습니다. 저만 이런 식으로 뜨는건지 모르겠네요...ㅠ

27. 언팩한 파일을 IDA로 열어서 String 값을 우선 Check 했습니다. 근데 뻔히 Key로 된 문자열이 보이네요. 

'Colle System'이 답이네요..

28. Colle System이 체스와 관련된 것이었네요. ^______^

29. Clear!







'Wargame > reversing.kr' 카테고리의 다른 글

reversing.kr_ImagePrc 풀이  (0) 2015.07.05
reversing.kr_CSHOP 풀이  (0) 2015.07.03
reversing.kr_Easy_ELF 풀이  (0) 2015.07.01
reversing.kr_Easy Unpack 풀이  (0) 2015.06.30
reversing.kr_Easy Keygen 풀이  (0) 2015.06.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함