리버싱워게임
-
Dreamhack - Simple Patch Mewargame/Dreamhack 2024. 11. 26. 12:06
[LEVEL 1 - Simple Patch Me - reversing] 실제 시간으로 365일이 지나면 플래그를 출력하는 프로그램이 주어진다.프로그램을 패치하여 플래그를 획득하라고 되어있다. 일단 ida로 열어보면 main함수가 위와 같이 나온다.위 프로그램은 8760시간(365*24)이 지나지 않으면 1시간동안 sleep하고, 그 후 변수가 1 증가한다. dword_40404C를 8760으로 바꾸거나 sleep(0)으로 바꾸면 플래그를 얻을 수 있을 것으로 보인다.플래그를 출력하는 함수로 들어가본다. 개인적으로 그냥 궁금해서 __readfsqword() 함수가 뭔지 찾아보았다. https://learn.microsoft.com/ko-kr/cpp/intrinsics/readfsbyte..
-
Dreamhack - Simple Crack Mewargame/Dreamhack 2024. 8. 24. 21:23
[LEVEL 1 - Simple Crack Me - reversing] 문제 파일을 다운로드 받으면 "simple_crack_me"라는 파일이 하나 들어있다. start 함수를 IDA로 디컴파일하고 sub_401AD5 함수 내부를 들어가본다. 위에서 볼 수 있듯 sub_40BB20()은 scanf()로 추정된다.(&unk_4B6004가 %d를 가리키고 있으며, 해당 함수 내부에서 va_start로 va argument를 가져옴)그리고 이 입력값 v11이 위에 하이라이트 표시한 값과 같을 때 "Correct!"를 출력하고 있는 것도 볼 수 있다.문제에서 correct를 출력하는 10진수 양수값을 찾으라고 했기 때문에 이 값이 정답이다. 플래그를 획득했다!
-
Dreamhack - [CodeEngn] Malware L08wargame/Dreamhack 2024. 8. 24. 21:09
[LEVEL 1 - [CodeEngn] Malware L08 - reversing, misc] 문제 파일을 다운로드 받으면 이전 문제들처럼 pdf가 하나 들어있다. 앞서 풀었던 문제들보다 주어진 악성코드의 flow가 조금 더 복잡해 보인다. 위에서부터 쭉 보다가 중간쯤에서 위와 같이 수상해 보이는 함수를 발견했다. 위와 같이 msdn에 ShellExecuteExA()에 대한 친절한 설명이 나와있다. 따라서 앞서 하이라이트 표시한 부분이 문제 설명에 나와있던 "다른 악성코드를 실행하여 추가 감염을 일으키는 함수의 주소"임을 알 수 있다.PE 파일이 익숙한 사람들에게는 당연한 것이겠지만, 정답은 Ex) 00401000과 같은 형태임을 유의해야 한다. 플래그를 획득했다!
-
Dreamhack - [CodeEngn] Malware L07wargame/Dreamhack 2024. 8. 18. 19:49
[LEVEL 1 - [CodeEngn] Malware L07 - reversing, misc] 이 문제도 문제 파일을 다운로드 받으면 pdf 하나가 들어있다. 악성코드의 Flow 일부가 주어지는데, 이전 L06번 문제와 거의 같아 보인다. 문제 설명에 나와있는 것처럼 이 악성코드는 위와 같이 특정 사이트에 접속을 시도하고 있다. 접속이 안될 경우 몇초 단위로 재접속을 하는데, 몇ms 단위로 재접속을 하는지 구해야 한다.pdf 아래 부분을 확대하면 위처럼 96000h ms 만큼 Sleep(쉬었다가) 이후 재접속을 하는 것으로 보인다.96000h의 h는 16진수를 의미하므로 이를 10진수로 바꾸면 614400이다. 즉, 614400 ms 단위로 재접속을 한다. 플래그를 획득했다!
-
Dreamhack - [CodeEngn] Malware L06wargame/Dreamhack 2024. 8. 18. 19:39
[LEVEL 1 - [CodeEngn] Malware L06 - reversing, misc] 문제 파일을 다운로드 받으면 pdf 하나가 들어있다. 위와 같이 악성코드의 전체 Flow가 그래프로 주어진 pdf이다. 시작 부분을 보면 CreateMutexA()가 가장 눈에 띈다. 구글링하면 msdn에 아래와 같이 친절하게 설명이 나온다.매개변수 중 lpMutexAttributes는 SECURITY_ATTRIBUTES 구조체에 대한 포인터이다. 이 매개변수가 NULL이면 자식 프로세스에서 핸들을 상속할 수 없다.bInitialOwner은 이 값이 TRUE 이고 호출자가 뮤텍스를 만든 경우 호출 스레드는 뮤텍스 개체의 초기 소유권을 얻는다. 그렇지 않으면 호출 스레드는 뮤텍스의 소유권을 얻지 못..
-
Dreamhack - Inject ME!!!wargame/Dreamhack 2024. 8. 5. 00:19
[LEVEL 1 - Inject ME!!! - reversing] 문제 설명을 보면, 문제 파일에서 주어진 prob_rev.dll 파일과 함께 있는 TXT 파일에는 조건을 맞춰서 DLL을 로드시키면 플래그를 얻을 수 있다고만 쓰여져 있었다고 한다.문제를 풀고 나서 보니 이 문장 자체가 문제 힌트다. ida로 해당 dll을 열어서 디컴파일하면 위와 같이 DllMain함수를 볼 수 있다. 함수로 들어오면 위와 같이 디컴파일되는데, 모르는 함수들은 검색을 하자. 구글링하면서 대략적으로 이 함수가 전체적으로 무엇을 하는지 주석을 달아 정리해보았다. 밑쪽에 sub_180001060 함수는 자신의 반환값과 v5~v8을 xor연산하고 결과값 중 Text를 메시지박스로 출력하는데, 이것이 곧 플래그값일 ..
-
Dreamhack - Secure Mailwargame/Dreamhack 2024. 8. 4. 23:58
[LEVEL 1 - Secure Mail - reversing] 문제파일을 다운로드 받으면 html 파일이 하나 있는데, 비밀번호 생년월일 6자리를 알아내면 플래그값을 알 수 있는 문제다. 일단 vs code로 열어서 소스코드 내용을 확인해본다. 보니까 생년월일 비번 제출하는 Confirm 버튼에 onclick()으로 0x9a220함수가 있는데 이걸 Ctrl+F로 검색해본다. 위쪽에 이 함수가 사용되는 것을 볼 수 있다. 그런데 이 코드를 다 해석하는 건 비효율적으로 보인다. 브루트포싱이 나을 것 같다. html태그 나오기 바로 전에 script태그 끝나는 부분이 있었는데 여기에 보면 틀릴 때마다 wrong을 alert창으로 띄우는 걸 볼 수 있다. 브루트포싱할 때마다 alert창이 ..
-
Dreamhack - rev-basic-8wargame/Dreamhack 2024. 7. 23. 22:13
[LEVEL 1 - rev-basic-8 - reversing] 1단계 문제 중에서는 rev-basic 시리즈 마지막 문제다. 메인함수 ida로 디컴파일하면 이전 문제들과 동일하게 생겼다. -5가 좀 이상해 보여서 커서 올려놓고 h 눌러서 헥스값으로 바꿔본다. 그러면 0xFB가 나오는데 이건 251이다.rev-basic-4 문제와 개념적으로 조금 비슷한 문제인 것 같다. byte_140003000을 더블클릭해서 어떤 데이터가 들어있는지 확인한다. Hex View탭으로 가서 복사해오기 이전 문제들과 다르게 헷갈리는 부분이 있어서 드림핵 해당 문제 커뮤니티 페이지에 있는 댓글을 참고했고, 위와 같이 코드를 작성하기 위해 짚고 넘어가야 할 것은 아래와 같다. 16진수 바이트로 표현..