<Wargame & CTF>/Reversing.kr 6

[ Reversing.kr ] Ransomware

Ransomware #crack me #custom crypto 오랜만에 reversing.kr 을 풀어보았다. 랜섬웨어라고 하는데... key를 알맞게 입력하면 압축파일로 같이 준 file을 올바르게 복호화 해주나보다. (키 값의 옳고 그름에 관계없이 일단 어떤 연산을 거쳐 복호화 해주긴한다.) 일단 처음 바이너리는 UPX로 패킹되어있다는 것을 알 수 있다. upx 언패커로 패킹을 해제하고... IDA에 올려보면 hex ray를 방해하기 위한 용도인지 쓸데없는 쓰레기 코드들이 있다. 그래서인지 main함수가 너무 크다며, 디컴파일이 안된다. 고민을 하다가 idc 함수를 이용해서 다 nop 처리 후, main함수 프롤로그를 옮기기로 하였다. 아래는 패치코드이다. addr=0x4135F4 end_addr=..

[Reversing.kr]ImagePrc

그래픽 관련 Windows API 를 공부할 수 있었던 문제이다. 그림을 그릴 수 있는 프로그램이 나오고 아무거나 그려서 Check를 누르면 틀렸다고 나온다. IDA로 디컴파일을 해보았다. WinMain 함수를 보면 메세지를 처리할 것만 같이 생긴 WndProc 함수가 나온다. (여담이지만 예전에 API 문제는 WndProc을 찾자는 공식(?)을 외웠던 것 같다...) 그리고 WndProc 내부를 살펴보면 bitmap 이미지를 다루는 함수들이 보인다. 우선 CreateCompatibleBitmap으로 가로 200 세로 150의 이미지 핸들(?)을 만들고CreateCompatibleDC 로 메모리핸들을 만든다. 그 후에 hdc에 가로 200 , 세로 150의 비트맵 이미지를 옮기고 BitBlt 함수로 윈도..

[Reversing.kr]Replace

바이너리를 실행시켜보면 아무거나 입력할 수 있는 창이 나온다. 아무거나 입력하고 Check 했더니 즉시 꺼져버렸다... ';;; IDA에 올려보도록 하겠다. WinMain 함수를 어렵지 않게 찾을 수 있었다. WinMain 에선 단서가 될 만한게 안보여서 string 을 검색한 결과 "Correct!" 라는 string이 있는 곳을 발견했다! 그와 동시에 DialogFunc 에서 거의 모든 action이 일어난다는 것을 알 수 있었다. 그리고 DialogFunc에서 메인역할을 하는 것 같은 sub_40466F 함수가 디컴파일이 잘 안된다는 것을 발견할 수 있었다. (alt + k 로 스택포인터 변경 불가) 아마 call 부분에서 정확한 주소가 아닌 오프셋을 5 추가한 부분을 call 하기 때문인 것 같다..

[Reversing.kr]Music_Player

mp3를 재생시킬 수 있는 Music Player 가 있고 1분 미리듣기 기능이 디폴트로 설정되어있다.1분 제한 기능을 우회하면 플래그가 나온다고 써져있다. 며칠동안 고생했던 문제... 확실히 배운 점도 있다. 1. 이런 류의 문제는 ms 단위로 시간을 책정하는 편.2. IDA로 VB 디버깅 하는 법3. 삽질 능력 등등.... 우선 프로그램을 켜서 아무노래나 재생시키면 1:00 이 되자마자 MsgBox를 띄운다. VB는 올리가 편해서 처음에는 OllyDbg 로 깠는데 이상하게 파일 여는 과정에서 자꾸 오류를 뿜어서 어쩔 수 없이 IDA로 디버그를 진행하였다. (해보니까 올리보다 편했다는 후문! ) 일단 MsgBox를 call 하는 부분을 크로스레퍼런스로 조사 후에 다 브레이크를 걸어놓고진행시켰더니 위의 ..

[Reversing.kr]Easy Unpack

문제의 목적은 바이너리의 OEP(Original Entry Point) 를 구하는 것이다. 처음에 문제 제목을 까먹고 PE View에 나와있는대로 OEP를 적었다가 틀렸다 .. :) ;; ㅋㅋㅋㅋㅋ (Packing 된 상태의 OEP) OllyDbg 에서 search for all intermodular calls를 했더니 함수가 얼마 나오지 않는 것으로 미루어 짐작하면 패킹이 되어있음을 확실히 알 수 있다. 패킹 방식은 보다시피 나오지않는 유명하지않은 패킹 방식인듯 하다. 그러면 이제 생각할 것은 매뉴얼 언패킹을 시도하는 것이다. 확신할 수 있는 것은 패킹된 바이너리도 실행할 때에는 분명히 패킹으로 인해 변조된 OEP가 아닌본래의 OEP를 거쳐서 프로그램을 실행한다는 점이다. 우리는 그 점에서 매뉴얼 언..

[Reversing.kr]Easy Keygen

CodeEngn 에서의 대부분의 문제와는 달리 이번에는 시리얼을 단서로 Name을 구해내는 문제이다.Name에서 시리얼을 추출하는 로직을 알아내야겠다고 생각했다. Name을 입력한 후 반복문에서 시리얼 값을 만들어내는 부분을 찾아냈다.처음에 ECX에 들어가는 값은 스택에 있는 값으로 ESI가 0, 1, 2 로 늘어남에 따라 ECX에는 0x10, 0x20, 0x30이 들어가게 된다. EDX에 들어가는 값은 Name으로 입력한 input값을 한 바이트씩 잘라낸 것이다. 그리고 ECX와 EDX 두 개를 XOR 연산 시켜서 이것을 시리얼 값으로 만들어내는 것이다. 만약 ESI가 3이 된다면 0으로 초기화 시켜서 0x10~0x30 루틴을 유지하게 만들어 준다. (0x0019FE08 라인에서 끝에 10 20 30 ..

반응형