일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리뷰
- Javascript
- Win32
- c++
- Desktop
- Visual Studio
- VS ERROR
- Programming
- Windows
- 알고리즘
- 함수
- Direct2D
- c
- 포인터
- doit코틀린프로그래밍
- 지식나눔강좌
- 연산자
- tipssoft
- 티스토리
- CS
- 프로그래밍
- Tips강좌
- 문법
- Tips프로그래밍강좌
- 백준
- c#
- Kotlin
- 배열
- 이지스퍼블리싱
- 김성엽
- Yesterday
- Today
- Total
목록All (383)
F.R.I.D.A.Y.
#include #define X 1 #define PI 3.141592 main() { double z; z = X + PI; printf( "%f", z ); } 위 코드를 분석한다. IDA로 돌리면 아래와 같은 코드가 나온다. var_8의 경우에는 IDA가 분석을 실행하며 발생하는 IDA 변수로 바라볼 수 있다. movsd 명령어는 DWORD 기준으로 복사를 시행한다. mov 명령어로도 충분이 이동이 가능하지만, CPU에 존재하는 명령어를 통해 속도를 최적화하기 위해 사용한다. xmm0은 CPU상에 128bit의 레지스터를 의미한다. 자세한 내용은 다음 참고. 이렇게 데이터를 처리하는 이유은 현재 컴퓨터에서 정수의 저장방식과 실수를 저장할 때 사용하는 부동소수점의 저장방식에 차이가 있기 때문이다. ..
#include main() { int x; int y; int z; x = 1; y = 2; z = x + y; printf( "%d", z ); } 이번엔 위 코드를 분석한다. IDA로 돌리면 아래 이미지와 같은 화면이 나온다. push 3push offset _Format 이 두 줄의 코드로 3과 _Format이 가리키는 주소를 스택에 쌓는다. 그러면 스택에는 아래 이미지와 같이 데이터가 쌓이게 된다. 이후 _printf 함수가 호출된다.add esp, 8xor eax, eax 두 줄의 코드를 통해 호출한 함수를 정리한다. 이제 간단히 의사 코드를 작성하면 아래와 같아진다. #include int main(void){ printf(_Format, 3); return 0; } _Format은 C001..
#include main() { printf( "오늘부터 나는 C 프로그래머!" ); } 위 코드를 IDA로 분석하면 아래와 같은 ASM이 나온다. 이 코드를 역분석 하는 것이 C001의 문제이다. offset _Format에서 offset은 명령어로 다음 기능을 수행한다. offset>> 전역 변수의 주소를 구한다. 여기서 _printf 아래의 두줄은 주석의 설명과 같다.add esp, 4 ; esp값을 4를 더하고 (즉, 프로그램 시작의 bp를 지운다. )xor eax, eax ; eax를 xor을 해서 0으로 바꾼다. 따라서 프로그램 코드를 작성할 당시 전역 변수가 저장된 주소를 찾아준 후, 스택에 쌓는 작업을 [401010]이 작업한다고 볼 수 있다.이후, _printf를 실행하므로 기본 구조는 ..
WinAPI로 만든 닷지, 프로토타입.아무래도 뭣 모르고 만들다보니 CPU 이용률도 높고 방향키 감지에서 처음 원했던대로 나오지는 않는다. thread 하나를 더 쓴다
CPU는 연산속도가 굉장히 빠르다. 하드디스크보다 SSD가, SSD보다 메모리(RAM, 램)가 빠르다는 것은 일반적으로 알고 있다. 그러나 CPU는 메모리 속도를 훨~씬 뛰어넘는다. CPU는 연산을 위해 자체 메모리를 가지고 있는데 이 메모리는 용량은 미칠듯이 작으면서 가격은 미칠듯이 높아서 차선책으로 현재의 램이 사용되는 것이다. 레지스터는 다음으로 나눌 수 있다.>> 범용 레지스터>> 세그먼트 레지스터>> 플래그 레지스터>> 명령 포인터 레지스터 레지스터는 XL, XH 등으로 분할해서 접근이 가능하다. XL과 XH를 모두 접근하고자 하면 XX라고 하면 된다.범용 레지스터EAX 주 누산기. 산술 연산에 사용, 기본적으로 산술된 값을 저장한다.EBX DS 세그먼트의 포인터를 주로 저장한다. ESI나 ED..
프로그램을 처음 실행하면 위와 같은 윈도우가 화면에 나타난다. [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 작업 지속 실행
MFC프로그래밍 배우면서 블로그는 사실상 관리를 안했는데, 관리 안한만큼 굉장히 도음이 많이 되었다. TIPS 들을 시간에 블로그 관리를 했다면 아무것도 못했을거야.. 그래서 TIPS 20기 모집하면 꼭 해보길 바랍니다. 대표님 주소가... ^ 베타버전 ^ 1.0.0.0 위에 라이브러리 파일은 XdobeFix를 만들면서 사용한 한글 자모 클래스를 라이브러리화 해서 다른 프로그램에서 쉽게 사용할 수 있도록 만든겁니다. 필요한 사람은 다운받아서 잘 사용하시기 바랍니다. 상업 목적으로의 사용은 불가능합니다. 상업 목적으로 사용하시려면 따로 허락을 받고 사용해주세요. 사용 전 포스트 하단의 ISSUE 탭을 확인하세요.1. 열거형 설명1) charState1 JaEum >> 한글 자음 2 MoEum >> 한글 모..