0x.리버스 엔지니어링
-
0x03.Easy Unpack0x.리버스 엔지니어링/Reversing.kr 2019. 2. 27. 11:02
0x03.Easy Unpack 예전 Codeengn 문제풀 때 몇번 본것 같은 기억이 나서 UPX를 확인해보니까 커스텀 패킹으로 된 듯하였다. 급하게 ollydbg를 깔아서 후닥 까보니 금방 끝났다. 초반 부분을 보면 kernel32.dll, GetModuleHandleA, FreeLibrary 및 VirtualProtect와 관련된 작업을 수행하고 특정주소로 분기를 한다. 해당 부분에서 JMP 00401150을 따라가보면 OEP가 나온다. 스택 프레임이 정의되면서 작업이 수행되서 아래와 같은 창이 뜨는 시점이기도 하다. 결론적으로 프로그램에 직접적인 영향을 주는 시점이 00401150이었고, 해당 부분이 OEP임을 알 수 있다. (분석은 loop문 만나면 bp로 빠져나오고, f8로 진행하다가 jmp부분..
-
0x02.Easy Keygen0x.리버스 엔지니어링/Reversing.kr 2019. 2. 24. 18:00
0x02.Easy Keygen revkr 문제를 오랜만에 풀어보는 듯하다. 리버싱이 요즘 부족하다고 느껴서 심심할 때마다 하나씩 손봐줄려고 한다. 엄청 쉬운 문제중 하나였다. ㅋㅋ ReversingKr KeygenMe Find the Name when the Serial is 5B134977135E7D13 키젠 문제인데 Serial을 바탕으로 Name을 찾아라고 한다. 프로그램이 진행되면서 사용자로부터 Name과 Serial 두 정보를 입력받고 Correct 또는 Wrong이라는 결과를 출력해준다. 프로그램의 flow상 결국 untrusted input은 Name과 Serial로 정의할 수 있다. 다만 우리가 Serial 을 알고 있기 때문에, 결국은 Serial로 Name을 추측하는것이 목표기에..
-
0x01.Ransomware0x.리버스 엔지니어링/Reversing.kr 2018. 1. 9. 16:35
0x01.Ransomware 오랜만에 풀어보는 리버싱 문제라 그런지 생각보다 힘들었다. 머리가 잘 안 굴러가는 듯한 느낌이 들 뿐 ㅋㅋ.가장 먼저 포맷을 확인해보니, UPX로 인코딩이 되어있다. 바로 풀어준다. 여기서 윈도우7에서 진행했는데 한글이 깨져서 시간을 많이 허비했다. 어쨋든.. 실행시켜보면 key값을 입력받는데, 키 값의 여부에 따라 어떤 동작을 한다는 사실을 예측할 수 있다. 올리로 까볼 필요성이 있다. 가장 먼저 Key : 스트링을 따라가보았더니, 이곳이었다. 밑으로 조금 내려보니, 루프 문이 있는데, BP 부분에서 각각 file과 key 인자값을 불러오는 작업을 하였다. 루프문을 한 줄로 요약하자면 file[i] ^ key_input[i] ^ 0xFF 작업을 수행하는 것이다. 그런데 아무..
-
0x01.CodeEngn Advance RCE 020x.리버스 엔지니어링/CodeEngn Advance RCE 2018. 1. 2. 21:36
0x01.CodeEngn Advance RCE 02 윈10에서 디버깅을 하려고 하는데 도저히 되 먹질 않는다. 그래서 결국 win7을 깔아버렸는데 또 dos-16비트 오류가 뜨는 것이다. 그래서 다시 삽질을 하다가 downloads 폴더에서 실행시키니까 되서 겨우겨우 시작하게 되었다. 패스워드를 입력하는데 맞지 않으면 그냥 종료해버리는 것 같다. 패스워드 입력 부분을 찾아서 돌려보니까 특별한 부분이 안보여서 세부적인 함수내로 들어가야 할 것 같았다. EDX를 call하는 부분이 있어서 들어가보았더니, 아래와 같이 비교부분이 짱짱 많았다. 그래서 이 비교부분을 전부다 hex디코딩을 해서 아래와 같이 쳐보았더니, 성공 메시지가 떴다. 클리어!
-
0x19.CodeEngn Basic RCE 200x.리버스 엔지니어링/CodeEngn Basic RCE 2017. 12. 18. 15:29
0x19.CodeEngn Basic RCE 20 마지막 문제라서 그런가 짱짱 어렵게 느껴졌다. 이문제는 CRACKME3.KEY라는 파일의 내용을 불러와서 작업을 수행하기 때문에 123456789123456789라는 값을 가진 파일을 임의로 만들었다. 이 값들은 위와 같이 어떤 연산에 사용되는데, 위의 함수를 보면 BL의 값이 루프를 돌 때마다 1씩 증가하는데 4F에 도달하면 종료됨으로써 최대 14번 반복됨을 알 수 있다. 즉, 18자리의 입력값 중 14자리를 사용하는 함수인데, 하는 일은 XOR 작업을 수행한다. 위의 함수는 나머지 4자리를 가지고 오는데 그 값을 EAX에 저장한다. EAX에 39383736이 들어간 것을 확인할 수 있다. 첫 함수에서 XOR작업이 수행되는데 그 결과값은 아래와 같았다. ..