System & Reversing (7) 썸네일형 리스트형 ReadInt 함수 분석 3 <test.second> ReadInt 함수 분석 3 사용한 툴: x64/x32dbg , Visual Studio 2017 14. call 들어가기 15. cmp ecx, 0 -> ecx 와0을 비교해서 0이 아니면 점프-> 점프 **je: jump equal - 비교 결과가 같을 때 점프jne: jump not equal - 비교 결과가 다를 때 점프 ** 16. cmp al, 20-> al(eax) 과 20(‘ ‘)을 비교, eax=31 “1”-> 20과 다르므로 점프하지 않음 17. cmp al, 9-> 밑에 cmp al(eax) , 9(\t) 도 비교-> 9과 다르므로 점프하지 않음 18. loop-> 그 다음 점프해서 글자 자릿수 만큼 loop 19. cmp al, 2D / cmp al, 2B-> '-' 연산자와 비교 .. ReadInt 함수 분석 2 <test.first> ReadInt 함수 분석 2 사용한 툴: x64/x32dbg , Visual Studio 2017 6. call 에서 cmd 에 값 입력 (10 입력) -> cmp dword ptr ds :[],0 에서 0과 비교 후 ZE=0, 따라서 je(0과 같으면 점프) / 0이 아니므로 점프하지 않고 그대로 넘어감 7. EAX 확인-> al (eax) 에 A(10) 넣어짐숫자 10 : cmd 에서 숫자 입력 후 쳤을 Enter 로 예상 8. repne scasb: EDI가 가리키는 곳에 EAX에 저장되어 있는 값이 있는지 스캐닝 9. ECX 확인 -> ecx에 4c 확인 가능(80) / ZE=1 이므로 0임(jne : 0이 아니거나 같지 않을때 점프) 이므로 점프하지 않음 10. -> dec 로 문자열 앞자리로 .. ReadInt 함수 분석 1 <test.first> ReadInt 함수 분석 1 사용한 툴: x64/x32dbg , Visual Studio 2017 1. call 들어가기 2. call 들어가기 3. cmp byte ptr ds:[],0 => 0과 비교 -> jne 후 ZE=1 / 들어온 값이 0임을 알 수 있음.(jne : 0이 아니거나 같지 않을때 점프) ** 그래프로 보기 ** 4. jne후-> 점프하지 않고call 로 넘어감 5. call -> readconsole() 검색 -> 스택은 역순이므로, 거꾸로 한줄씩 대응 여기에서, inputhandle 이 hConsoleInputpush edx 가 lpbufferpush ecx 가 nNumberofchastoread 이므로 레이블로 알아보기 쉽게 lpNumberof CharsRead 지정 ~ 값 입.. 어셈블리어 2 도서 : x86 프로세서를 위한 어셈블리언어 복습 4장 1. 피연산자 유형 - 변수 이름은 데이터 세그먼트 내의 오프셋을 가리킴 ex> reg : 임의의 범용 레지스터 (reg8 : 8비트 범용 레지스터…) mem : 8,16,32 비트 메모리 피연산자 2. 명령어 1. 이동 - mov : 데이터 복사, 두 피연산자끼리 같은 크기여야함 ex> mov reg,reg ** mov명령어는 한 메모리 위치에서 다른 메모리 위치로 데이터를 직접 이동시키는데 사용할 수 x / 레지스터 이용해야함. ex> .data var1 WORD ? var2 WORD ? .code mov ax(레지스터), var1(메모리) mov var2, aw 2. 덧셈 뺄셈 - INC / DEC : 각각 단일 피연산자에서 +1 / -1 ex.. 어셈블리어 1 도서 : x86 프로세서를 위한 어셈블리언어 복습 3장 1. 예약어 : MASM에서 특별한 목적이 있음 -명령어 니모닉, 레지스터 이름, 디렉티브, 연산자 등 2. 식별자 : 프로그래머가 선택한 이름 -대소문자 구분 x, 어셈블러의 예약어와 같을 수 x 3. 디렉티브 : 어셈블러가 인식, 소스코드에 포함된 명령어. ex> .data , dword (더블워드 변수용으로 공간 예약 지시) 4. 세그먼트 : 프로그램 섹션 정의 ex> .data : 변수 포함 영역 표시.code : 명령어 포함.stack : 스택 크기 결정 4. 명령어 : 프로그램 어셈블되었을 때 실행 가능하게 되는 문장 -레이블, 명령어 니모닉, 피연산자, 주석 5. 레이블 : 데이터 위치 표시 식별자 - 데이터 레이블(변수 위치)- 코드 .. 프로세서, 레지스터 도서 : x86 프로세서를 위한 어셈블리언어 복습 2장 1. 프로세서 개념 - 프로세서: 명령어실행, 데이터 처리하는 장치 ex>CICS 계열 : 80x86 / RISC 계열 : Alpha, APM.. - 마이크로프로세서 : 컴퓨터의 산술논리연산기, 레지스터, 프로그램 카운터, 명령디코더, 제어회로 등의 연산장치와 제어장치를 1개의 작은 실리콘 칩에 모아 놓은 처리 장치 - 프로그램 카운터 (PC) (명령어 포인터): 마이크로프로세서(중앙 처리 장치) 내부에 있는 레지스터 중의 하나로, 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정 -명령디코더 : 오퍼랜드를 번역하고 제어부에 어떻게 할 것인지를 지시 -x86 프로세서: 인텔 사의 프로세서인 80x86 및 Pentium 계열.. 어셈블러, VM 도서 : x86 프로세서를 위한 어셈블리언어 복습 1장 1. 어셈블러 기본 개념 -어셈블러 : 어셈블리 언어 -> 기계어-링커 : 기계어 파일들-> 하나의 실행파일-디버거 : 프로그램 단계별 실행, 레지스터와 메모리 확인 -어셈블리 언어 : 기계어와1:1 대응 관계 / 이식성 xcf>고급언어 : 기계어와1:다 관계 / 이식성 o -마이크로소프트 매크로 어셈블러(MASM) : 인텔 문법을 사용하는MS-DOS 및 마이크로소프트 윈도우용x86 어셈블러- MS-DOS : 마이크로소프트사가IBM사의 의뢰를 받아 시애틀 컴퓨터시스템사로부터 사들여 개발한IBM PC용 운영 체제 2. 가상 기계 (VM) 개념 - ex> 컴퓨터가 이해하기 쉬운 언어=L0 / 사용자가 사용하기 조금 더 쉬운 언어=L1, L1 프로그램(V.. 이전 1 다음