일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- off_by_one_001
- basic_exploitation_000
- rev-basic-0
- L17
- Pwnable
- 포너블
- L16
- rev-basic-2
- Dreamhack
- 코드엔진 베이직 13
- CodeEngn
- rev-basic-6
- basic_exploitation_001
- rev-basic-7
- L18
- rev-basic-4
- sd카드 리더기
- rev-basic-5
- L15
- off_by_one_000
- rev-basic-3
- pwnable.kr
- rev-basic-1
- RCE
- 드림핵
- 코드엔진 베이직
- out_of_bound
- coin1
- sint
- Basic
- Today
- Total
목록Reverse Engineering (25)
서브웨이
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/4jtvg/btqBg8pRCQE/qt9osUWKjAf0dXbSN9Coy0/img.png)
14, 15번이랑 비슷할 것으로 예상된다. 일단 패킹은 안되어있다. 성공메시지 출력이 분기되는 곳을 찾아보자 여긴가보다. 언제나처럼 입력해보자. 그리고 EAX랑 EBP-3C에 있는 값이랑 비교를 하니 한번 가리키는곳으로 가보자. 역시 그냥 간단하게 입력한 값을 10진수에서 16진수로 변경했다. EBP가 0070FF28 이므로 3C를 뺀곳의 주소는 아래와 같다. 결국 우리는 16진수로 B9D2A657이 되는 10진수 값을 찾으면 된다. 계산기가 이렇단다. 입력해보자. 얼래 안된다. 다시 해보자. 값이 바뀌었다 뭘까? 일단 위의 값을 10진수로 바꾸니 해결은 했다. 뭐였을까 위의 값은? 아무리 다시 해봐도 저 값이 안나온다. 0070FEEC의 값은 내가 입력한 주소인데 흠....
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bj0RsJ/btqBg9Hqhhj/8IKd3QN5sQRXKkvhd4dwkk/img.png)
14번이랑 비슷해보입니다. 패킹은 안되어있으니 하던대로 성공메시지를 출력하는 부분을 찾아봅시다. 여깄네요. 중단점을 걸고 아무거나 입력해봅시다. 14번에서 했던대로 입력합니다. 14번이랑 거의 비슷해보입니다. 결국 eax랑 45B844에 있는 값이랑 같은지 비교하는거네요. 흠 그냥 serial에 입력한 값을 10진수에서 16진수로 변환해놨네요 메모리에는 저런 값이 들어있습니다. 16진수로 6160이 되는 10진수 값을 입력하면 될것 같습니다. 참고로 그 값은 24928입니다. 짜잔
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dcToa6/btqBftffFUo/jmafM9095CXZrrZEkqm2t1/img.png)
bruteforce가 필요하다니 조금 귀찮을 것 같습니다. 일단 UPX로 패킹이 되어있습니다. 본 코드에서 성공/실패 메시지를 띄우는 부분입니다. 귀찮아보입니다. 일단 핵심처럼 보이는 부분들에 중단점을 걸고 이것저것 넣어봅시다. 두번째 중단점에서 eax와 esi를 비교하니 이걸 중점으로 보면 될 듯 합니다. 일단 간단히 11111 먼저 넣어봅시다. 두번째 중단점에서의 값입니다. 이번엔 11112 로 해봅시다. 흠 eax의 값만 1증가하네요. eax는 일단 serial과 관련이 있어보입니다. 이번엔 name을 바꿔봅시다. 위의 과정들을 통해 esi가 name과 관련된 값이고 eax가 serial에 관련된 값이라는 것을 알 수 있습니다. 그런데 2B6B을 16진수에서 10진수로 바꾸어보면 그냥 11112가 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/x6O0b/btqBdUdHSjD/Sp9ytr8oKPbIbYkiqTxKt0/img.png)
아주 간결합니다. 왠지 어려울 것 같습니다. 패스워드만 찾으면 될 것 같네요. 일단 패킹은 안되어있습니다. 근데 디버거로 열려고하니 열리지가 않습니다. 한참을 헤매다가 찾아보니 C#으로 만들어진 파일은 닷넷프레임워크가 없는 환경에서는 분석이 되지 않는다고 합니다. 그럼 닷넷 디컴파일러 중에 프리웨어 중 아무거나 설치합니다. 저는 JetBrains의 dotPeek을 설치했습니다. https://www.jetbrains.com/decompiler/ dotPeek: Free .NET Decompiler & Assembly Browser by JetBrains dotPeek is a free tool based on ReSharper. It can reliably decompile any .NET assembl..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d8y19E/btqBgEtuk5M/Hpy92M0sf2GSo0MbReKvzK/img.png)
일단 키를 찾아봅시다. 성공메시지 위에 Dialog에서 Editbox에서 정수형을 받아오는 함수가 있는 것으로 보아 저걸 통해 키를 받아오는것으로 보이네요. 그러니 저곳에 중단점을 걸고 진행해봅시다. 간단히 12라는 수를 입력해봅시다. EAX에 C라는 값이 들어가는 것으로 보아 10진수로 받아서 저장하나봅니다. 왠지 맨밑에 7A2896BF를 비교를 해야할거같은데 저쪽에서 계속 돕니다. ESI의 값이 0일때까지 반복이니 ESI로 가봅시다. 별 의미없는 곳이네요... ESI가 0이 되는 지점에 중단점을 걸어줍니다. 7A2896BF가 키가 맞는 것 같습니다. 10진수로 변환한 2049480383를 입력해봅시다. 키는 찾았습니다. HxD에서는 간단히 이부분을 바꾸면 될 듯 합니다. 하지만 어차피 끝나는 부분만..