본문 바로가기

2. Reversing (리버싱)/1) Write UP

(51)
[2021.11.20] CodeEngn Basic RCE L17, L18, L19, L20 풀이 Basic RCE L17 Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가 힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자) 스트링 검색을 통해서 에러메세지, 성공 메시지를 찾고 에러 메시지를 확인해 보았다. 글자수가 세글자 미만일 때 에러 메시지가 출력된다. 문제에서 Name이 한글자라고 했고 비교하는 부분을 한글자인 1로 바꿔주고 실패 문자열 밑에 브레이크포인트를 걸고 실행한다. 1을 입력하고 Checkit 하면 시리얼을 만들어 낸다. Call 0045b850이 시리얼을 만들어내고, 들어가보면 이부분을 통해 시리얼을 만들어낸다는 것을 알 수 있다. 따라서 해당 부분을 파이썬코드로 작성한다. 결과는..
[2021.11.13] CodeEngn Basic RCE L13, L14, L15, L16 풀이 코드엔진 13번 문제 Q. 정답은 무엇인가 파일을 실행하면 패스워드를 입력하라는 창이 나온다. PEiD를 통해 파일을 살펴보니 C#으로 파일이 되어있는 것을 확인할 수 있었다. OllyDbg에서의 분석이 되지 않길래 찾아보니 C#으로 되어있는 파일은 OllyDbg와 같은 동적 분석 도구로 분석할 수 없다고 한다. 찾아보니 dotPeek로 C#으로 작성된 파일을 분석할 수 있는 것 같아 설치하고 파일을 열어보았다. File-Open으로 13번 파일을 불러오고, ConsoleAppllication3 - Root Namespace – RijndaelSimpleTest – Main 을 누르면 소스코드가 뜬다. 확인해보니 Console.ReadLine() == str 이어야 else로 빠져나가고, well don..
[2021.11.06] Codeengn 12 먼저 올리디버거로 12번 문제를 열기. 문제에서 key값과 주소영역을 찾으라고 했으니 먼저 key값을 구하는 목표로 할것입니다. Key 값을 입력하고 이를 비교하는 것은 성공 시 문자열을 찾는 것도 좋은 방법이기 때문에 search for-> all referenced text strings에 접근해보겠습니다. 회색부분에 키를 찾았다는 것을 축하해주는 문자열을 확인 할 수 있습니다. 이 부분을 눌러서 코드 안으로 들어가보겠습니다. 코드를 살펴보면 cmp eax 7A2896BF를 볼 수 있습니다. 이는 cmp와 eax와 7A2896BF값을 비교하는 것입니다. Jnz 는 not zero jump로써 비교된 값이 0이 아닌 경우 (제로플래그 값이 0인경우)에 해당 주소로 이동하는 명령어입니다. 따라서 비교된 ..
[2021.11.06] Codeengn 11,Nag 창 없애기 OEP를 찾으시오. Ex) 00401000 / Stolenbyte를 찾으시오. Ex) FF35CA204000E84D000000 정답인증은 OEP+ Stolenbyte Ex ) 00401000FF35CA204000E84D000000 StolenByte 란? 프로그램의 어떤 부분의 코드를 다른 부분으로 옮긴 코드이다. 조금 더 쉽게 말하면 옮겨지는 코드들은 대부분 OEP 위에 코드들이 JMP 구문으로 OEP에 도달하기 전 코드들이다. 주로 패킹과 동시에 이루어지는 것 같다. 이제 프로그램을 실행시켜보겠다. 프로그램이 잘 작동된다. 이제 올리디버거에 프로그램을 올려 분석해주겠다. 코드들을 실행시켜줘도 큰 변화가 일어나지 않고 무엇보다 주석,힌트 등 코드들이 수상하게 생겼다. 이제 ExeinfoPE 프로그램에 ..
[2021.10.09] CodeEngn Basic RCE L07, L08, L09, L10 풀이 CodeEngn Basic RCE L07 Q. 컴퓨터 C 드라이브의 이름이 CodeEngn 일 경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가 -abex 5번 문제와 동일 일단 프로그램을 무작정 실행시키고 체크 버튼을 누르면 not correct 메시지가 뜨는 것을 확인할 수 있다. 그리고 문제에서 컴퓨터 C 드라이브의 이름이 CodeEngn이라고 했으니, 내 컴퓨터 드라이브 이름을 변경해주었다 GetDigItemTextA 를 통해 입력한 문자열을 받아들일 것이다. GetVolumInformation 은 사용자의 volume 정보를 읽어들일 것이다. 그리고 VolumnNameBuffer 가 있으니 여기에, 즉 0040225C에 정보가 저장이 될 것이며, IstrcatA 가 있으니 St..
[2021.09.25] abex crackme 5, PE파일 3.1 프로그램 동작 방식 델파이로 만들어진 프로그램 델파이란? 델파이(Delphi)는 윈도우즈, 리눅스, iOS, 안드로이드에서 작동하는 프로그램 제작에 이용되는 통합개발환경이자 언어이다. (프로그램을 실행시켰을 때의 화면) 3.2 GetVolumelnformation() 함수 GetVolumeInformation() 함수란? 지정된 루트 디렉터리가 속한 파일 시스템 정보와 볼륨 정보를 가져오는 함수. 3.3 반복문을 통한 문자열 변경 1. int i=2 : EDX 레지스터 하위 16비트를 의미하는 DL 레지스터에 2를 복사한다. 여기서 DL의 역할은? -> 반복문의 종료를 체크하는 변수 2. print(‘inside for loop’): 반복문이 수행하는 로직(logic)에 해당하는 부분. 3. i-..
[2021.09.25] CodeEngn Basic RCE L05, L06 풀이 코드엔진 5번 문제 이 프로그램의 등록키는 무엇인가 한줄씩 실행해보기 한줄씩 실행시켜보면 004412BC 주소에서 메시지 박스가 호출되는 것을 알 수 있다. 위에 칸에 123을 입력하고 아래 칸에 456을 입력해보았더니 잘못되었다는 메시지가 출력되었다. 그 다음줄 실행 다음줄을 실행하였더니 서브루틴함수로 들어가졌다. 코드가 끝인 것 같다. 그래서 오른쪽 마우스 클릭 -> Search for -> All referenced text strings 를 통해 이동해보겠다. All referenced text strings 실행시킨 상태 All referenced text strings 중에서 아까 오류메시지가 뜬 부분을 찾아 이동할 것이다. 더블클릭하면 그 부분 위치를 볼 수 있다. wrong Serial, ..
[2021.09.18] CodeEngn Basic RCE L03, L04 풀이 코드엔진 3 비주얼베이직에서 스트링 비교함수 이름은? 필요하다고 뜨는 dll을 설치하고 실행시켜보니 특정 창이 떴다. 확인 버튼을 누르니 뭔가 입력할 수 있는 창이 뜬다. 뭔가 입력해보니 error 창이 뜬다. 오른쪽 마우스 클릭 후 search for > all referenced text strings로 들어가 이 메시지 텍스트가 어디있는지 확인해보니 00402A69 에 있었다. 그리고 조금 위를 더 살펴보니 이 패스워드가 맞다고 하는 주소인 004028F5도 확인할 수 있었다. 그래서 어디서 성공메시지를 출력시키는지 따라가보니 다음과 같은 화면을 확인할 수 있었다. 살짝 위를 살펴보니 유니코드 2G83G35Hs2가 있었고. 그 다음줄에 vbaStrCmp라는 함수를 CALL한다는 사실을 알았다. 즉,..