3-8 결과값을 바꿔라.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
3-8번문제
C언어로 확인
#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
int i;
int sum=0;
for(i=0; i < 1000 ; i++){
sum=sum+i;
if(sum == 33670){
printf("33670일 때 i는 %d \n",i) ;
}
else if(sum == 178503){
printf("33670일 때 i는 %d \n",i) ;
}
}
return 0;
}
F9번으로 breakpoint 잡고 f5으로 순서대로 진행
33670일 때 i는 259
33670일 때 i는 597
F7-함수안으로 들어간다.
## 브레이크 포인트
디버거에서 condition에 EAX == 360 조건을 입력
F2누르면 breakpoint풀린다
shift + f2 == ECX == 0x37
alt + B에서 breakpoint 로그 확인 가능. 여기서 F2로 눌러만든 브레이크 포인트도 남는다. 지우고 싶을 때 delete키로 break log에 들어가 지우면 된다.
shift + F2 -- break point condition (브레이크 지점을 설정함)
[EBP-A] == 3 , EAX == 3 과 같은 조건을 적어준다.
shift + F4 -- break point 조건 로그 [ 안남김 | 조건 일치때만 | 무조건 남김 ] 중에 선택
Explanation에 적었던 이름으로 다음과 같은 로그값을 확인할 수 있다.(단축키 clt + l)
3-8번 문제 해결시에 다음과 같이 모든 조건이 완료되는 부분인 CMP 화살표 윗 부분 MOV .. ADD..MOV...중의 한 곳에 조건을 입력해서 확인하면 값을 알 수 있다. 다른 곳은 값이 진행되었는지 안되었는지 알 수 없다.
조건을 지정하면 아래와 같이 보라색으로 나타난다.
## 브레이크 포인트.
브레이크 포인트는 디버거에서 자체적으로 제공하는 소프트웨어 브레이크포인트(단축키 F2)와 하드웨어에서 직접 지정하는 하드웨어 브레이크포인트 두가지가 있다.
소프트 웨어 브레이크 포인트는 무한대로 지정할 수 있다.
하드웨어 브레이크 포인트는 어떤 작업을 할지를 직접 지정할 수도 있고, 크기도 지정 가능하다.
하드웨어는 인터럽트(접근,실행,쓰기)가 발생한 원인을 알려준다.
하드웨어 브레이크 포인트는 총 7개의 공간을 사용하는데, 저장하는 곳에 4개 상태를 나타내는 데에 3개의 공간을 사용한다.
## 스택프레임
호출한함수가 호출된 함수의 아래에 있다.
ESP
-----------
SFP
------
0x0012FF7C 무조건 스택에 이 값을 가짐
지금은 주소가 바뀌게 되었다.
--------
프롤로그 / 에필로그 (함수가 시작되고 끝날때)
함수는 호출 후/전이 똑같아야함. pop을 하는 이유.
call -- 시 복귀할 주소를 push 후 jump
push 1;
call ->
push
jmp;
return은 +4
argument +8로 복귀한다.
lpcmd +10
arg2 +C
arg1 +8
ret + 4
SFP - EBP
SFP가 없으면 리버싱이 어렵다. EBP가 ESP + n으로 나타남.
sfp는 중간에 겹치는 값.
## 하드웨어 브레이크 포인트
CALLER --호출
CALLEE -- 호출됨
### IT 기술 보유 종류 3가지
특허 ->나만만든다. (5년뒤에는 공개, 수정하면 갱신되나 어렵다)
의료정보등도 공개된다.
영업비밀 ->회사에서 제공하는 서비스의 정보. 특허가 아니면 영업비밀
공개기간 X , 관리안하면 영업비밀 아님.
저작권 -> 알고리즘 3000이하 벌금, 3년이하 징역
'리버싱' 카테고리의 다른 글
12일차 포인터의 caller,callee. 반복문 (0) | 2013.04.23 |
---|---|
11일차, caller, callee 복귀주소(RETN) (0) | 2013.04.22 |
9일차, 시저암호화 (0) | 2013.04.18 |
8일차, malloc, strcmp (0) | 2013.04.17 |
7일차 리버싱의 오묘한맛 (0) | 2013.04.16 |