일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- rev-basic-1
- rev-basic-3
- 코드엔진 베이직
- 포너블
- rev-basic-7
- basic_exploitation_000
- RCE
- Pwnable
- L18
- rev-basic-4
- off_by_one_001
- 코드엔진 베이직 13
- rev-basic-2
- Dreamhack
- CodeEngn
- pwnable.kr
- rev-basic-6
- L17
- off_by_one_000
- Basic
- L15
- rev-basic-5
- rev-basic-0
- out_of_bound
- 드림핵
- basic_exploitation_001
- coin1
- L16
- sint
- sd카드 리더기
- Today
- Total
목록CodeEngn (7)
서브웨이

마지막 문제인 만큼 뭔가 지금까지 배운것들의 총 집합일 것 같다. 한번 확인해보자. 예상과 다르게 패킹은 안되어있다.ㅎㅎ 일단 CRACKME3.KEY라는 파일의 존재여부를 확인하는 듯 하다. 파일을 만들어주자. 예시와 비슷하게 값을 넣어주자. 네번째 인자가 읽어들인 데이터의 길이로 리턴되기때문에 파일의 내용이 0x12글자 이상이어야 진행이 된다. 이후에 중단점이 걸린 곳으로 진행하면 아래와 같은 함수가 나온다. 실행해보니 CRACKME3의 내용을 불러와서 이걸로 무슨 일을 한다. 다 끝나면 또 다시 무슨 일을 한다. cmp문을 일단 레지스터를 조작해서 지나가보면 이런 창이 나온다. 그럼 일단 8글자만 나오도록 9번째를 00으로 만들어야될것이다. 쉬운 이해를 위해 이걸 코드로 바꿔보자. 대충 이런식으로 하..

일단 뭔가 간단해보인다. UPX로 패킹이 되어있다. 매번 하던대로 OEP를 찾아서 분석을 하자. OEP로 점프하는 부분을 찾았다. 근데 분석하다보니 이상한 메시지가 뜬다. 디버거인지 확인하는 함수가 들어있는것 같다. 분석하기 귀찮아 졌으니 일단 언패킹을 해놓자. 역시나 있다.... 귀찮으니 그냥 패치해놓자. 분석을 하다보니 이 부분을 지나면 이런 메시지가 뜨고 몇 초 후에 종료된다. 일단 저기가 핵심인 것 같다. 몇 밀리세컨 뒤에 종료되는지를 보는거니 sleep이 쓰인곳을 찾자. 그냥 sleep이 쓰이는 곳에 다 중단점을 걸어봤지만 하나도걸리지 않는다. 한번 time을 키워드로 찾아보자. timeGetTime이라는 것이 자주 쓰이는 것을 알 수 있는데 이는 운영체제 시작 이후 흐른 시간을 가져오는 함수이..

몇번 풀어봤던 유형이다. 근데 왜 바이러스로 인식을 할까.... 일단 제외시키고 분석을 해보자. 일단 성공메시지 출력부분은 찾았다. 분기문 전에 중단점을 걸고 일단 아무거나 입력해본다. 아무리 봐도 수상해보이는 문자열이 있다. 저 두개를 비교하나보다 입력해보자 엥 뭐지

자 일단 조금 귀찮아보입니다. 일단 시작해봅시다. 패킹은 안되어있네요. 대충 아무거나랑 주어진 키 값을 입력해보면 이런 메시지가 뜹니다. 그러므로 Please로 문자열 검색을 해봅시다. 어디에서 사용하는지 따라가봅시다. 분기문을 찾았습니다. 근데 name은 3글자 이상만 허용이 되는데 왜 힌트는 한글자 일까요. 그냥 알아서 수정해라 이건가....? 일단 1글자만 입력해도 되도록 패치해줍니다. 1글자랬으니 하나씩 입력해봅시다. 중단점이 걸린곳에서 이름을 가지고 키가 생성이 됩니다. 알았으니 한글자씩 다 해봅니다. F였네요. +α 시리얼을 생성하는 함수 안에 들어가보면 이 부분에서 키의 첫 4글자가 생성이 됩니다. 이 두개를 비교해보면 확인이 가능합니다. 그러므로 키의 첫 네글자를 만드는 부분을 C나 파이썬..

14, 15번이랑 비슷할 것으로 예상된다. 일단 패킹은 안되어있다. 성공메시지 출력이 분기되는 곳을 찾아보자 여긴가보다. 언제나처럼 입력해보자. 그리고 EAX랑 EBP-3C에 있는 값이랑 비교를 하니 한번 가리키는곳으로 가보자. 역시 그냥 간단하게 입력한 값을 10진수에서 16진수로 변경했다. EBP가 0070FF28 이므로 3C를 뺀곳의 주소는 아래와 같다. 결국 우리는 16진수로 B9D2A657이 되는 10진수 값을 찾으면 된다. 계산기가 이렇단다. 입력해보자. 얼래 안된다. 다시 해보자. 값이 바뀌었다 뭘까? 일단 위의 값을 10진수로 바꾸니 해결은 했다. 뭐였을까 위의 값은? 아무리 다시 해봐도 저 값이 안나온다. 0070FEEC의 값은 내가 입력한 주소인데 흠....

14번이랑 비슷해보입니다. 패킹은 안되어있으니 하던대로 성공메시지를 출력하는 부분을 찾아봅시다. 여깄네요. 중단점을 걸고 아무거나 입력해봅시다. 14번에서 했던대로 입력합니다. 14번이랑 거의 비슷해보입니다. 결국 eax랑 45B844에 있는 값이랑 같은지 비교하는거네요. 흠 그냥 serial에 입력한 값을 10진수에서 16진수로 변환해놨네요 메모리에는 저런 값이 들어있습니다. 16진수로 6160이 되는 10진수 값을 입력하면 될것 같습니다. 참고로 그 값은 24928입니다. 짜잔