일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Javascript
- 이지스퍼블리싱
- Tips강좌
- 프로그래밍
- VS ERROR
- c#
- Direct2D
- 포인터
- 문법
- Kotlin
- Win32
- 김성엽
- tipssoft
- doit코틀린프로그래밍
- 함수
- 지식나눔강좌
- Visual Studio
- Desktop
- Programming
- 연산자
- c++
- 리뷰
- 알고리즘
- Tips프로그래밍강좌
- c
- 배열
- Windows
- 백준
- 티스토리
- CS
- Yesterday
- Today
- Total
목록리버싱/Olly (5)
F.R.I.D.A.Y.
콘솔 프로그램의 패스워드를 찾는 리버싱인듯 하다. 쭉 돌아보면 [9139B]에서 main을 콜한다. 이후에 값을 입력하게 되면 이 위치에서 문자열의 길이를 판단한다. 14개의 문자를 입력하면 기본적으로 [Sure ! Nice]가 나오고 프로그램이 종료된다. 단, 종료 코드는 -8이 나오므로 정상적인 패스워드는 아니라는 소리다. fake를 넣어서 이것으로 리버싱이 끝났다고 착각하도록 만들고 있다. F8을 눌러 [910DB]까지 내려오게 되면 여기서부터 데이터를 체크한다.cmp byte ptr ss: [ebp-N], N 에서 뒤에 숫자를 ASCII 변환을 해보면 다음과 같다. 즉, 이 프로그램의 패스워드는R3versE_is_FuN 이다. 이렇게 찾은 패스워드를 입력하면 프로그램은 다음과 같이 작동한다. 리버..
프로그램을 처음 실행하면 위와 같은 윈도우가 화면에 나타난다. [F9]를 누르면 [401000]으로 이동하지 않고 [4013C0]으로 이동하는데 프로그램이 시작하기 전, 사전 초기화 작업으로 보인다.메모리 주소가 [4013C0]이다. 확인해보면 각 메모리 주소는 다음 행동으로 예측할 수 있다. [401000] ~ [401076]>> 윈도우 클래스 설정, 등록과정 [40107C] ~ [4010A7]>> 윈도우 생성 과정 [4010AD] ~ [4010B3]>> 생성된 윈도우 출력 [4010E2] ~ [4010FB]>> 프로그램의 이벤트에 따른 행동을 위해 프로그램을 종료시키지 않음 프로그램 이벤트는 메모리주소 [401120]으로 시작하는 함수단에서 처리하는 것으로 보인다. WNDCLASS의 WndProc 부..
이전 프로그램과 달리 메모리주소가 [ 401000 ]에서 시작하지 않고 [ 40116B ]에서 시작한다. 이는 사전 작업으로 프로그램을 시작하기 전 사전 작업을 위한 코드로 보인다. 쭉 실행하다보면 메모리주소[ 401233 ]에서 아래와 같은 코드를 볼 수 있다. call crackme1.00401000 프로그램 진입점이다. 밑줄 친 부분이 실제 메시지박스를 띄우는 함수를 콜하는 부분 [ 401003 ]위치에서 [F7]을 눌러 메시지콜 함수로 진입한다.메시지 박스 콜 함수에 진입한 모습 그러면 위 이미지와 같은 메모리 주소로 이동한다. [ 40102E ]에서 local.1과 5를 비교해 ZF에 저장한다. 그러면 jnz에 의해 다음 메모리 주소로 이동할지, jnz가 지정한 메모리 주소로 갈지 분기를 정한다..
abexcm1(실습).exe를 실행하면 위와같은 메시지가 출력된다. 그리고 [확인]을 누르면 Error라는 제목의 메시지가 발생하는데, 이를 아래와같은 메시지로 출력할 수 있도록 코드를 수정해야한다. " Ok, I really think that you HD is a CD-ROM! :p " 처음 olly를 실행해서 abexcm1을 열게되면 아래와 같은 어셈 코드가 나온다.ASM 코드 (x64라서 그런지 모듈명이 ntdll이다 ) 이 상황에서 [F9]를 누르면 프로그램의 진입점, 즉 프로그램이 시작하는 첫 코드로 이동하게 된다. 아래 이미지와 같은 화면이 나오면 된다. 메모리의 주소는 [ 401000 ]으로, 이 주소가 프로그램의 시작이다. 그외에는 오류. [F8]을 이용해 메모리 주소가 [ 401024 ..
단축키 설명 Ctrl + F2 다시 디버깅 ( 프로그램을 종료하고 다시 디버깅) F7 현재 코드 실행 (함수 호출시 함수 내부로 진입) F8 현재 코드 실행 (함수 호출시 함수 실행 후 다음 코드 이동) Ctrl + F9 함수코드 내에서 탈출 ( caller로 이동) Ctrl + G 원하는 코드 줄로 이동 ' ; ' comment 추가 (주석기능) ' : ' Label 추가 ( 메모리 주소에 이름 부여) F2 Break Point 설정/해제 Alt + B Break Point 목록 F9 실행, BP가 걸린 곳까지 실행 ' * ' 현재 BP의 위치를 보여줌 ' - ' 직전 커서 위치를 보여줌 Ctrl + F8 F8 작업 지속 실행