WarGame
-
[Lenas Reversing for Newbies] 03Wargame/Lenas Reversing 2021. 1. 28. 02:15
1. 프로그램 실행 reverseMe.exe를 실행시켜보자. 실행시키면 위와 같은 창들을 확인할 수 있다. 메인 윈도우인 실행화면 2의 앞 뒤에 있는 nag(메시지 박스)를 제거하면 되는 간단한 문제다. 2. Debugging(with OllyDbg) OllyDbg로 reverseMe.exe를 열어 코드를 한 줄씩 실행시키다 보면 아래와 같은 코드를 볼 수 있다. GetModuleHandleA가 호출 된 이후 EAX 레지스터에는 ImageBase 값이 저장되므로 정상적인 경우에는 무조건 MessageBoxA가 호출될 수밖에 없는 구조다. 다양한 방법이 있겠지만 (본인은 단순히 MessageBox 다음 위치로 점프하는 것을 생각했다) 강의에서는 PE 구조체의 IMAGE_OPTIONAL_HEADER 구조체의..
-
[Lenas Reversing for Newbies] 02Wargame/Lenas Reversing 2021. 1. 26. 23:10
1. 프로그램 실행 01편 강좌와 동일한 reverseMe.exe 파일을 이번에는 패치를 이용하지 않고 크랙을 이용해 문제를 해결한다. 2. Debugging(with OllyDbg) 위의 동그라미 친 부분에서 CreateFileA() API가 호출되는 것을 확인할 수 있다. CreateFileA() API는 다음과 같은 형태다. HANDLE CreateFileA( LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); OllyDb..
-
[Lenas Reversing for Newbies] 01Wargame/Lenas Reversing 2021. 1. 26. 01:59
1. 프로그램 실행 위와 같은 메시지 박스가 나오고 확인을 누르면 프로그램은 그대로 종료된다. OllyDbg로 바로 분석을 해보자. 2. Debugging(with OllyDbg) Stub Code 없이 바로 프로그램 코드를 확인할 수 있다. "Search for All referenced Strings"를 이용해 패치했을 때 나올 수 있는 문자열을 확인해보자. 동그라미 친 부분이 패치했을 때 나와야 할 문자열로 보인다. 해당 부분으로 이동해보자. 위와 같이 메시지 박스를 출력한다. 분기 지점을 찾아 조건에 상관없이 위 코드의 시작 지점인 00401205 주소로 JMP 하도록 코드를 수정해보자. 코드를 조금 실행하다 보면 위와 같이 조건 검사 및 점프를 하는 코드를 확인할 수 있다. 해당 지점에서 원본 ..
-
-
-
[reversing.kr] ransomware 풀이Wargame/reversing.kr 2021. 1. 8. 17:19
1. 프로그램 분석 프로그램을 다운로드하여 압축을 풀면 다음과 같이 세 가지 파일이 있는 것을 확인할 수 있다. 우선 readme.txt를 열어보자. file을 decrypt하라고 한다. 이제 run.exe를 실행시켜보자. file이 암호화 되어 있고 적절한 key를 입력하면 해당 key 값으로 파일을 복호화하는 구조의 프로그램인 것 같다. 위와 같이 임의의 키를 입력하였을 때 위와 같은 문구가 출력된다. 과연 파일이 복구되었는지 file에 exe 확장자를 붙여서 실행해보자. 위와 같이 당연하게도 "maple19out"으로는 파일 복호화가 안된 것을 알 수 있다. file 자체가 잘못된 키 값으로 복호화가 되었으므로, 새로 파일을 다운로드하고 디버거를 통해 디버깅을 해보자. 2. Debugging(wit..
-
[reversing.kr] Easy ELF 풀이Wargame/reversing.kr 2021. 1. 5. 13:29
본래는 dreamhack.io의 hash-browns 문제를 풀려고 했는데 리눅스 환경에서의 리버싱은 익숙하지 않다. 문득 reversing.kr의 100점짜리 문제인 Easy ELF가 떠올랐고, 풀기 위해 다양한 방법을 시도해보았다. - gdb로 접근 많은 사람들이 리눅스 환경에서 gdb를 이용하여 디버깅을 한다고 하였다. 보통 file (filename) 명령어로 symbol 테이블 정보를 받아오고 disas main과 같은 명령어를 통해 바로 main 함수 쪽 어셈블리 코드를 확인하는데 symbol table이 없다는 문구가 나왔다. 알고 보니 gcc compile 옵션에 -s를 추가하면 symbol table이 제거되는 효과가 있다고 한다. readelf 명령어를 통해 EP를 찾은 후 해당 주소를..
-