2월, 2020의 게시물 표시

[리버싱] 윈도우에서 아무것도 설치하지 않고 Hex Data 수정

이미지
이번 글은 저번 메모장 시간/날짜 표시 변경 ( Link )  과 연결되는 이야기를 해 보려 한다. 윈도우에서 16진수 데이터를 다룰 수 있는 도구는 없다. 맞는가? Debug.exe를 통해 도스시절 어셈블리 수정, 메모리 수정이 가능하다는 글을 봤기도 했고 검색도 했지만 사용법을 아직 모르겠어서 정리를 하지 않았다. 윈도우에서 기본으로 제공해 주는 메모장, 워드패드는 16진수를 지원하지 않는다. 정확히는 아스키코드 상(또는 유니코드상으로라도) 표시할 수 있는 문자만 표시한다. 가령, 0x77 등의 바이트는 출력하지 못하거나 공백으로 출력해 버린다는 소리이다. 그래서 16진수를 에디터처럼 다룰 수 없다고 알고있다. 그러나 우리의 윈도우 개발자는 더 발전된 커맨드라인 창, Windows PowerShell을 만들어냈고, 윈도우 7 이상부터는 기본적으로 깔려 있다.(윈도우 기본 파일이다) 그리고 나는 외국 포럼 등에서 가능한 방법을 찾아 내었다! 기본적으로 윈도우 파워쉘은 .Net이 주 축을 이루는 프로그램이다. 대부분의 명령어, 변수를 만들어 내는 것 등은 닷넷 오브젝트를 사용하고, 닷넷 함수를 사용한다. 심지어는 닷넷 특정 명령어에 한해 닷넷의 명령어를 직접 사용이 가능하다. 포럼에서 봤던 내용을 그대로 적어보겠다. 적은 명령어는 파란색이다. PS C:\Users\user > $bytes = [System.IO.File]::ReadAllBytes("C:\파일.exe") PS C:\Users\user > $bytes[0x오프셋] = 0x바이트 PS C:\Users\user > [System.IO.File]::WriteAllBytes("C:\파일.exe", $bytes) 일련의 과정을 통해 파일의 바이트를, 즉 hex data를 읽어 파일에 쓰는 것을 윈도우가 직접 허용한다. 엑세스의 문제는 파일 소유자나 파일의 쓰기 권한이 없을 때 일어나는, powersh

[C/WINAPI] 인터넷 파일 다운로드

인터넷에 있는 파일을 다운로드 받을 수 있는 코드를 짜 보았다. wininet.h 헤더에 있는 함수들로, 인터넷 검색을 통하여 예제들을 시험해 보며 짰다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #include  "Winfiledown.h" int  downloadFile( const   char   *  server,  const   char   *  filename) {     HINTERNET hinet, hurl;     DWORD  size , readsize;     TCHAR  * buffer;     FILE  *  wfp;     hinet  =  InternetOpen( "HTTPS" ,         INTERNET_OPEN_TYPE_DIRECT,          NULL ,          NULL ,          0 );      if  (hinet  = =   NULL )  return  GetLastError();     hurl  =  InternetOpenUrl(hinet,         server,          NULL ,          0 ,         INTERNET_FLAG_KEEP_CONNECTION,          0 );      if  (hurl  = =   NULL ) {         InternetCloseHandle(hinet);