닷넷 디컴파일 툴로는 dotpeek 밖에 사용해보지 않았는데, 소스 수정이 안된다는 단점이 있었다. 물론 dotpeek에서 export를 시키면 비쥬얼 스튜디오 프로젝트 파일로 저장이 되고 여기서 소스 수정 후 빌드를 다시 해주어도 되지만, 비쥬얼 스튜디오와 닷넷 버전? 호환이 안되는 건지 빌드가 제대로 안되는 경우가 있었다. 그래서 구글링하던 중 닷넷 디컴파일 툴로 많이 사용되는 .Net Reflector에 reflexil 툴을 추가시키면 간단하게 소스 수정을 해볼 수 있다는 것을 알게되어 간단히 reflexil 추가 방법과 사용법을 여기에 정리한다. reflexil 다운로드 아래 링크에서 reflexil을 다운로드받을 수 있다. reflexil 다운로드 페이지 sailro/Reflexil The .N..
드라이버 파일이 같이 주어진 만큼, 이번 기회에 Windbg로 커널 디버깅 하는 연습을 해보려고 했는데 결국 제대로 실행시키는데 실패해서 IDA로 겨우겨우 풀었다. reversing.kr WindowsKernel 풀이 관리자 권한으로 실행시키면, StartService 관련 에러가 발생한다. StartService에 대한 에러코드를 보기위해 간단히 코드를 짠 후 어떤 에러인지 봤는데, 에러코드 0x4fb (1275)로 ERROR_DRIVER_BLOCKED 에러이다. #include #include int main() { SC_HANDLE schSCManager = NULL; SC_HANDLE schService = NULL; char* Filename = "C:\\Users\\leefo\\Desktop\..
초반에 문제들만 Easy가 붙은 줄 알았는데 중간에 쉬어가라는 문제인지 Easy ELF 문제가 있다. 문제 이름대로 정말정말 쉬워서 푸는데 15분 컷이 가능했다. 지금까지 푼 문제중에서는 제일 쉬운 것 같다(+Easy Crack). reversing.kr Easy ELF 풀이 처음에는 아무래도 ELF인 만큼 gdb로 풀어야 하는 줄 알았다. 실행시키고 입력값을 주면, 'Wrong'이 출력된다. 그런데 심볼이 없어서 디버깅하기가 힘들었기 때문에 그냥 IDA로 보기로 했다. main함수를 보면 Wrong으로 분기하는 조건으로 sub_8048451의 리턴값을 확인하고 있다. sub_8048451을 헥스레이로 봐보면, 0x804A020이 첫번째자리 값이라는 것은 사실 추론이긴 하지만... 간단한 xor 연산으로..
ntdll.dll의 NtQueryInformationProcess를 활용한 안티디버깅 방법과 우회 방법에 대해 알아본다. 참고로 NtQueryInformationProcess는 zwQueryInformationProcess의 wrapper 함수로 동일하다고 생각하면 된다. NtQueryInformationProcess 안티디버깅 방식은 2번째 인자인 PrecessInfomrationClass에 어떤 값을 주느냐에 따라 총 3가지 방법으로 나뉘게 된다. (0x7/0x1E/0x1F) __kernel_entry NTSTATUS NtQueryInformationProcess( IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, OUT PV..
Twist1은 여러 안티디버깅 기법을 확인할 수 있는 문제인데 안티디버깅 플러그인도 안먹히고 코드가 중간중간 풀리는게 많아서 bp도 여러곳에 걸어주어야 하고 게다가 왜인지는 모르겠지만, OEP를 찾은 후 덤프를 떠주고 진행했는데 중간에 빠진 코드가 있어서 이것 때문에 삽질 시간이 더 길어졌다. 겨우 전부 우회를 한 후에도 키젠 부분에 페이크가 많아서 풀다보면 굉장히 지치는 문제이다. 확실히 푼사람 수가 확 줄어든 것을 보니 인내심을 충분히 갖고 풀어야 하는 문제인 것 같다. reversing.kr Twist1 풀이 이번 문제는 Windows x32 환경에서 풀어야 하는 문제로 Twist1.exe를 실행시키면 Input 값을 받고 있다. 일단, 패킹이 된 것인지? IDA로 디컴파일이 잘 안된다. pusha..
PE 구조를 생각하고 풀면 좋은 문제이다. reversing.kr ransomware 풀이 이번문제는 랜섬웨어 문제이다. 설마 뭐 진짜 내파일을 암호화할꺼라고 생각하진 않았지만 혹시 모르기 때문에 그냥 가상환경에서 진행했다. run 파일을 실행시키면 아래와 같이 zip파일에 들어있던 파일 file을 암호화했다고 협박(?) 메시지가 나온다. 처음에 key 문자열이 쓰인 함수를 찾아서I 보는데 함수 시작 부분에 아래 반복 코드가 엄청 크게 있다. 뭔가 했는데 그냥 파일 크기를 키우고 혼선?을 주기 위함인 것 같으니 딱히 신경쓰지 않아도 문제 풀이에는 지장이 없다. 위 코드를 빼면 함수 자체는 별로 크지 않다. 반복문이 계속 나오게 되는데 첫번째 반목문에서는 암호화된 file 데이터를 1바이트씩 가져와서 0x..
CodeEngn부터 reversing.kr Position 문제까지는 2017년에 작성해놨던 풀이를 옮겼던 것인데 (새로풀면서 거의 풀이가 바꼈지만) Direct3D FPS부터는 지금부터 틈틈히 새로 풀 예정이다. 계속 리버싱을 해왔던 것은 아니지만... 2017년에는 이 문제를 못풀었었는데 이번엔 풀 수 있게된 것을 보니 그래도 어느정도는 발전했나보다 :D reversing.kr Direct3D FPS 풀이 이번 문제 zip에는 간단한 FPS 게임 파일과 data 폴더, D3DX9_43.dll 이 들어있다. 문제가 무엇인지 안나와있어서 무얼 해야하는 것인지 감이 오지 않기 때문에 일단 맵을 좀 살펴보기로 했다. 좀 더 들어가니 제작자가 카라 한승현 팬인지 한승현 사진과 걸어다니는 고구마들이 있다. 총을..
아주아주 옛날 취약점이지만, 실제 크래쉬 덤프에서의 기초적인 bof를 이해하고 익스플로잇 코드를 짜보는 시뮬레이션을 하기에는 이만한 취약점도 없는 것 같다. 요즘 소프트웨어는 패치 이력도 오래됐고 기본적인 보안코딩은 어느정도 갖추고 있기 때문에 이런류의 간단한 bof는 거의...... 없는 것 같다. '.asx' Local Stack Overflow 취약점 정보 곰플레이어의 오래된 취약점이고 asx파일로 인해 bof가 일어난다는 사실만 알면 사실 분석하기 엄청 어려운 취약점은 아니지만, 최대한 해당 사실을 모른다고 가정하고 크래쉬 파일만 가지고 분석을 해보았다. 크래쉬 파일은 해당 버전의 곰플레이어를 BFF 퍼저로 돌려서 얻었다. - 취약 프로그램: Gom Player - 버전: 2.0.12.3375 -..
Position 문제부터는 elf를 제외하고는 푼 수가 1000이하로 떨어진다.. 확실히 Position부터는 좀 문제가 까다로워지는 것 같은게 input name으로 serial을 생성하는 과정이 좀 복잡해서 코드 짜기가 좀 헷갈렸다. reversing.kr Position 풀이 Position.exe를 실행시키면 다음과 같이 Name과 Serial을 입력받는다. 키젠 문제답게 시리얼이 주어지고 그에 맞는 Name값을 구해야 하는 문제이다. 친절하게 ***p 라고 알려주며 끝자리 p와 총 길이가 4임을 알려주었다. Position 창에서 "Wrong"이라는 문자열이 있었으므로 해당 문자열이 사용되는 함수로 먼저 가본다. 참고로 Wrong은 유니코드로 저장되어 있기 때문에 IDA 문자열 보기(Open S..
문제의 의도대로 정확하게 분석해서 푼듯한 느낌은 안들지만 rsrc 섹션 데이터를 확인하는 순간 풀 수 있는 문제이다. 봐야겠다는 생각을 늦게하긴 했지만... reversing.kr ImagePrc 풀이 ImagePrc.exe 를 실행시킨 후 Check를 누르면 틀렸다는 메시지창에 나온다. Wrong 문자열이 사용되는 함수로 먼저 가보자. Wrong 창이 출력되는 블록을 보면 딱 한가지 경로밖에 없는데 처음 함수 시작에서 빨간네모박스 분기를 타는 것이다. 처음 분기에서 왼쪽 분기를 타게 되면 무조건 Wrong 출력되는 곳으로 가기 때문에 파란색 분기를 대안으로 생각할 수 있다. 제일 정답에 가까워보이는 분기는 왼쪽 파란색 네모 분기를 타는 것인데 그럴려면 ecx가 0x1이어야 한다. 그래서 ecx가 무조건..
정형화된 유형의 키젠만 풀어봤기 때문에 뇌정지가 왔던 문제이다. reversing.kr Replace 풀이 Replace.exe는 입력값을 받아서 check하는 심플한 프로그램이다. 언제나 그렇듯, 먼저 체크 루틴에서 사용되는 문자열이 사용되는 함수로 가보았다. 이번 문제는 특이한게, Correct로 가는 분기가 아예 없다. 정답값 인증이 입력값인 경우밖에 생각할 수 없으므로 입력한 입력값을 알맞게 주면 그게 ~~~ 되어 뭔가 Correct 분기를 탈 수 있게 만들어야 하는 문제인 것 같다. 함수가 별로 크지 않으므로 트레이싱 하면서 봐보자. 참고로 이번 파일은 IDA가 틀리게 디컴파일한 부분이 많아서 동적으로만 보려고 한다. 입력값을 123(0x7B)으로 주고 입력값을 입력받아서 eax에 저장하는 Ge..
우회 자체는 어렵지 않은데 런타임 에러 때문에 삽질을 많이 했던 문제이다. reversing.kr Music Player 풀이 이번 문제는 1분듣기 밖에 안되는 파일의 1분 체크 루틴을 우회해서 1분 이상 실행시키는 문제이다. 1분 이상 실행되면 플래그가 출력된다고 한다. mp3 파일을 넣어보면 1분 듣기 후 아래와 같이 "1분 미리듣기만 가능합니다.'라는 메시지 창이 출력된다. 이번 파일은 비주얼 베이직 (VB) 프로그램이기 때문에 IDA로 디컴파일이 안된다ㅠㅠ 일단 메시지창 함수가 실행된다는 것을 알기 때문에 관련 함수 호출부분을 찾기로 했다. 다행히도 msvbvm60.dll 함수 중 "msg"가 들어간 함수는 rtcMsgBox밖에 없었다. 해당 함수에 bp를 걸고 리턴주소가 저장되는 스택 상단을 보..