본문 바로가기

어셈블리어

18. 수정된 문자열 파일로 저장하기 18. 수정된 문자열 파일로 저장하기 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. 파일로 저장하기 위해 패치된 문자열을 드래그한 후에 마우스 오른쪽 버튼을 클릭해 Copy to executable fiel 메뉴를 클릭한다. File 창이 뜨면 마우스 오른쪽 버튼을 클릭해 Save file 메뉴를 선택하고 원하는 파일명으로 저장한다. 본인은 수정 파일 이름을 helloReverss01.exe 입력하여 저장하여 보았다. CMD 명령 프롬프트를 띄운후 저장된 파일경로에 접근하여 helloReverss01.exe 실행 파일을 확인한다. 본인은 .. 더보기
17. hello world 문사열 수정하기 17. hello world 문사열 수정하기 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. helloworld01.exe 저장하고 올리디버거에서 파일을 불러온후 Gtrl + G 키를 눌러 main 검색하고 hello word printf 문자열 함수를 찾은후 00FC13F0 주소를 클릭후 덤프 영역 ASCII 값의 문자 hello RCE 부분을 마우스 드레그 후, 오른쪽 버튼 눌러서 printf address 00FC5858 값을 넣어 주고 Binary → Edit 클릭하여 RCE 부분을 world!! 로 수정하였다. 끝으로 F9 번을 눌.. 더보기
16. OliyDbg v1.10 영문판 windows7 64bit 호환 문제점 16. OliyDbg v1.10 영문판 windows7 64bit 호환 문제점 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. OliyDbg v1.10 영문판 설치후 windowns7 64bit 에서 호환상의 이유로 실행 에러 뜰때 Shift /F7/F8/F9 hello word.exe 파일의 문자열을 수정하기 위해서 2가지 방법으로 해결할 수 있다. #1. 64bit OS + OllyDbg 2.0 OllyDbg 2.0 버전에서는 64bit에서 정상 실행 되지 않는 버그가 수정되었습니다. 다운로드 링크 : http://www.ollydbg... 더보기
15. 포인터를 사용하지 않는 C 소스 15. 포인터를 사용하지 않는 C 소스 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. include int inc(int a) { a = a+1; return a; } int main() { int s, ret; s = 2; ret =inc(s); printf("%d, %d ", s, ret); return 0; } 포인터를 사용하지 않는 함수의 인자 전달 포인터를 사용하지 않는 함수의 어셈블리어 더보기
14. 지역변수, 전역변수, 포인터 14. 지역변수, 전역변수, 포인터 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include #include int main() { int lv; int *gv; lv = 1; gv = (int *)malloc(0x4); *gv = 2; printf("lv is &d ", lv); printf("gv is &d ", *gv); return 0; } 더보기
13. 함수 프롤로그,에필로그 13. 함수 프롤로그,에필로그 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include int main() { printf("prologue & epilogue "); return 0; } [발췌-수정] 함수프로그에서 PUSH EBP 후 스텍 구조 스택 구조가 함수 프롤로그와 에필로그에 따라 어떻게 변한는지 알아보자. main() 함수의 프롤로그 PUSH EBP를 실행하면 스택 구조는 아래와 같다. Low Address main() 함수 이전 EBP 값 더보기
12. 함수 호출 리턴값 확인 12. 함수 호출 리턴값 확인 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include int sum(int a,int b, int c) { return a+b+c; } int main() { int s; s = sum(1, 2, 3); printf("%dn", s); return 0; } 3개의 인자를 입력 받아 모두 더한 결과값을 리턴하는 main 함수의 어셈블리어 [발췌-수정] 위의 어셈블리어는 main() 함수의 일부분이다. 013C1434 CALL 013C1104 명령어로 sum() 함수 호출 이후 013C1441 주소에서 .. 더보기
11. 콜린 컨벤션 __fastcall 함수의 어셈블리어 코드 11. 콜린 컨벤션 __fastcall 함수의 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. [발췌] 구분 __cdecl __stdcall __fastcall 인자 전달 방법 스택 스택 레지스터, 스택 스택 해제 방법 호출한 함수 호출된 함수 호출된 함수 #include int __fastcall sum(int a, int b, int c) { return a+b+c; } int main() { int s; s =sum(1, 2, 3); printf("%d ", s); return 0; } [발췌-수정] __Fastcall.. 더보기
10. 콜린 컨베션 __stdcall 함수의 어셈블리어 코드 10. 콜린 컨베션 __stdcall 함수의 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. [발췌] 구분 __cdecl __stdcall __fastcall 인자 전달 방법 스택 스택 레지스터, 스택 스택 해제 방법 호출한 함수 호출된 함수 호출된 함수 #include int __stdcall sum(int a, int b, int c) { return a+b+c; } int main() { int s; s =sum(1, 2, 3); printf("%d ", s); return 0; } [발췌-수정] 인자 입력은 __cde.. 더보기
9. 콜린 컨벤션 __cdecl 함수 어셈블리어 코드 9. 콜린 컨벤션 __cdecl 함수 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. [발췌] 구분 __cdecl __stdcall __fastcall 인자 전달 방법 스택 스택 레지스터, 스택 스택 해제 방법 호출한 함수 호출된 함수 호출된 함수 #include int __cdecl sum(int a, int b, int c) { return a+b+c; } int main() { int s; s = sum(1, 2, 3); printf("%d ", s); return 0; } [발췌-수정] PUSH 명령어를 이용해 스택에.. 더보기