목록Categories (1099)
KoreanFoodie's Study
I'm introducing fine Korean restaurants/places where actual local Koreans usually go, not only tourist-targeted restaurants. Review Summary : - Fine place to experience taste of Korean Kimchi Stew which local Koreans enjoy. - Prices : 6~7$ - Rating : 3.5/5 - How to order : Just say "Saeng-Go-Gi Duru-Chigi-Jui-Se-Yo" or show this sentence : "생고기 두루치기 1명당 1인분 주세요" Everytime I want to have a nice K..
윈도우 시스템 프로그래밍에서 파일을 생성하고 읽기/쓰기를 수행해 보자. 먼저 아래에 MSDN에서 가져온 예제 코드를 살펴보자.파일 읽고 쓰기 :해당 코드는 CreateFile()과 WriteFile() 함수를 이용해 파일을 생성하고 값을 입력하고 있다. 이때, CreateFile()에서 이미 있는 파일을 새로 생성하려고 하면 에러코드를 반환한다(에러코드 80).만약 log 파일을 만들고 싶은데, 이름이 같은 파일이 있을 시 덮어쓰고 싶다면? CreateFile() 함수의 CREATE_NEW부분을 바꿔주면 된다! (예제 코드 아래에 상세 설명)#include #include #include #include void DisplayError(LPTSTR lpszFunction); void __cdecl _tm..
리눅스 쉘에 환경변수 경로를 추가해보자! 가끔씩, 리눅스에서 실행파일을 쉽게 실행시키고 싶을 때가 있다. 우분투 소프트웨어에서 인식하는 소프트웨어의 경우 window키를 누르고 입력해서 실행시킬 수도 있겠지만, 등록이 안 된 소프트웨어의 경우 실행파일이 설치된 경로로 들어가서 파일의 이름을 쉘에 쳐야 하는 불편함이 있다. 실행하고 싶은 프로그램 vivado.. 그냥 찾으려고 하면 안보인다. 이를 해결하기 위해, 환경 변수 PATH에 해당 바이너리 파일이 설치된 경로를 추가해 줌으로써 쉘을 키자마자(Ctrl+Alt+T) 해당 파일을 실행 시킬 수 있다! 방법은 간단하다. 쉘 실행후, home directory에서 vi ~/.bashrc를 실행한다. .bashrc 파일의 마지막에 아래 코드를 추가한다. ex..
프로세스 스케줄링과 시그널에 대해 알아보자 먼저, 프로세스가 어떤 state를 가질 수 있는지부터 알아보도록 하자. 위 그림을 통해 하나하나 각 상태가 어떤 의미를 가지는지 나열해 보겠다.Running/Runnable(R)이름에서 쉽게 유추할 수 있듯이, 이 상태는 프로세스가 동작하거나, 동작할 준비가 되었다는 것을 의미한다. 동작하고 있다는 것은 쉽게 이해가 가는데 동작할 준비가 되었다는 것은 무슨 뜻일까?Runnable 상태의 프로세스는 runqueue에 들어가서 실행되기를 기다린다. 이것이 유저 스페이스에서 프로세스가 실행될 수 있는 유일한 상태이다. 스케줄러는 해당 runqueue를 확인한 후 CPU가 어떤 작업을 수행할지를 결정하게 된다.UnInterruptible Sleep(D)이 상태는 시그..
lsof, kill 등의 커맨드를 사용해서 프로세스를 조회하고 관리해보자.가끔씩, 리눅스에서 프로세스가 종료되었으나 창이 닫히지 않아 짜증이 나는 경우가 있다.이 경우, 프로세스 PID를 확인해서 이를 강제로 종료시켜주는 방법을 사용해 볼 수 있다. 이 글에서는 총 3가지의 방법을 소개한다.toptop command를 이용하면 현재 돌아가고 있는 프로세스에 대한 정보들을 쉽게 조회할 수 있다.top command는 프로세스의 ID이외에도 CPU, Memory 사용률 등의 정보를 확인할 수 있어 매우 유용하게 쓰일 수 있다. 맨 왼쪽의 PID를 이용해서, terminal에 아래 커맨드를 입력한다.kill -9 PID // kill -9 -PID -> PID를 가진 프로세스 그룹 전체를 종료한다.이때 kil..
주변에서 웹 개발 서버를 구축하는 것을 관찰해보면, 상당히 많은 분들이 Amazon 사의 AWS를 이용하고 있다는 것을 알 수 있다. 하지만 AWS의 경우 무료크레딧의 제한이 걸려 있기 때문에, 아주 간단한 어플을 실행하고 이를 테스트하고 싶을 때 AWS를 이용하려면 비용이 소액 발생하게 된다. 나처럼 가난한 개발자라면 아주 조그마한 지출에도 민감해지기 때문에, 어떻게든 무료를 찾아 떠나야 한다. 그 대안으로 구글 클라우드 플랫폼을 사용할 수 있다! 링크 : https://cloud.google.com/free/ 무료 등급 GCP - 무료 확장 평가판 및 항상 무료 | Google Cloud GCP 무료 등급은 12개월의 무료 체험 기간 동안 사용할 수 있는 $300의 크레딧과 항상 무료의 두 가지 방식..
'리버싱 핵심 원리'의 내용 및 이슈들과 해결책을 다룹니다. 실행 압축되거나 암호화된 파일을 패치할 때 자주 사용되는 인라인 패치(Inline Patch) 기법을 실습해 보자. 인라인 패치 인라인 코드 패치(Inline Code Patch) 혹은 줄여서 인라인 패치(Inline Patch)라고 하는 기법은 원하는 코드를 직접 수정하기 어려울 때 간단히 코드 케이브(Code Cave)라고 하는 패치 코드를 삽입한 후 실행해 프로그램을 패치시키는 기법이다. 주로 대상 프로그램이 실행 압축(혹은 암호화)되어 있어서 파일을 직접 수정하기 어려운 경우 많이 사용하는 기법이다. 위 그림처럼 전형적인 실행 압축(또는 암호화) 코드가 있다고 해 보자. EP(Entry Point)코드는 암호화된 OEP(Original ..
'리버싱 핵심 원리'의 내용 및 이슈들과 해결책을 다룹니다. UPack 패커를 이용하여 압축한 notepad.exe 파일의 EP(Entry Point)를 찾아 디버깅 해보자. OllyDbg 디버깅 에러 Stud_PE를 이용하여 EP의 VA를 알아낼 수 있다. RVA 값이 1018이고 ImageBase가 01000000이므로, 01001018이 실제 EP의 주소값이라는 것을 알 수 있다. 이제 OllyDbg를 실행하여 01001018 주소를 EP로 설정하면 된다! 디코딩 루프 EP부터 차근차근 디코딩을 해 보자. 처음 두 명령은 010011B0 주소에서 4 바이트를 읽어 EAX에 저장하는 명령이다. EAX는 0100739D 값을 가지는데, 이는 원본 notepad의 OEP(Original Entry Poi..
'리버싱 핵심 원리'의 내용 및 이슈들과 해결책을 다룹니다. UPack 패커를 이용한 notepad.exe의 PE 헤더 구조를 파헤쳐 보자. 준비물 UPack Stud_PE notepad.exe (32bit ver.) UPack의 PE 헤더 분석 헤더 겹쳐쓰기 이는 다른 패커에서도 많이 쓰이는 기법이다. 이는 MZ 헤더(IMAGE_DOS_HEADER)와 PE 헤더(IMAGE_NT_HEADERS)를 교묘하게 겹쳐쓰는 것이다. 헤더를 겹쳐씀으로 해서 헤더 공간을 절약할 수 있다. 부가적으로 복잡성을 증가시켜 분석을 어렵게 만드는 효과도 있다. Stud_PE를 이용해서 MZ 헤더를 살펴보자. ('Headers' 탭의 [Basic HEADERS tree view in hexeditor] 버튼) MZ 헤더(IMA..
'리버싱 핵심 원리'의 내용 및 이슈들과 해결책을 다룹니다. PE 파일에서 .reloc 섹션을 수동으로 제거하는 실습을 해 보자. .reloc 섹션 EXE 형식의 PE 파일에서 Base Reloaction Table 항목은 실행에 큰 영향을 끼치지 않는다(DLL, SYS 형식의 파일은 거의 필수!). VC++ 에서 생성된 PE 파일의 Relocation 섹션 이름은 '.reloc'이다. .reloc 섹션이 제거되면 PE 파일의 크기가 약간 줄어드는 효과가 있다. 이때, .reloc 섹션은 보통 마지막에 위치한다. reloc.exe '.reloc' 섹션 제거는 아래의 4 단계의 작업을 통해 이루어진다. .reloc 섹션 헤더 정리 .reloc 섹션 제거 IMAGE_FILE_HEADER 수정 IMAGE_OP..