일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- apphelp.dll
- Windows Kernel Driver
- 시스템해킹
- 해킹
- 포너블
- 윈도우 커널 드라이버
- Windows Kernel Debug
- Network Byte Order
- packet capture
- 윈도우 커널
- pcap packet
- 개발 환경 준비
- pcap packet capture
- IAT Hooking
- 개발하기
- windows kernel debugging
- C언어 패킷캡쳐
- 바이트 오더
- 네트워크 바이트 오더
- hacking
- vcruntime.dll
- arudino
- vcruntime140.dll
- Windows
- HackCTF
- Msvcrt.dll
- ucrtbase.dll
- Windows Kernel
- pwnable
- 윈도우 커널 디버깅
- Today
- Total
목록분류 전체보기 (118)
미친해커
이전 포트팅에서 정의한 함수를 분석해봤다면 기본적으로 Baud Rate가 115200으로 설정되는 것을 알수 있을 것이다. 하지만 다른 Baud Rate를 사용해야 할 일이 생길수도 있기 때문에 이번에는 Baud Rate를 원하는 값으로 설정하는 함수를 만들어보기로 한다. 이번에 사용되는 Windows API와 구조체는 다음과 같다. GetCommState function (winbase.h) - Win32 apps Retrieves the current control settings for a specified communications device. docs.microsoft.com SetCommState function (winbase.h) - Win32 apps Configures a commun..
기본적인 시리얼 포트와의 통신 방법은 다 알아봤다. 이제 배운 지식을 활용해 간단한 모듈을 만들어보는 것이다. 우선 첫번째로 시리얼 통신을 위해서는 시리얼 포트의 핸들이 필요하고 핸들을 얻기 위해서는 통신하고 싶은 시리얼 포트의 번호를 알아야한다. 즉 이번에는 시리얼 번호를 이용해 해당 시리얼 포트의 핸들을 반환해주는 함수를 만들어본다. 사용되는 Windows API와 구조체는 다음과 같다. CreateFileW function (fileapi.h) - Win32 apps Creates or opens a file or I/O device. The most commonly used I/O devices are as follows:\_file, file stream, directory, physical d..
사실 이 내용을 올려야 하나 말아야 하나 고민을 했지만 결국 번외로 올리기로 결정했다. 아마 지금까지 올린 코드만보고 컴파일 했을 때 정상적으로 출력되는 사람이 있는 한편 그렇지 않은 사람도 있을 것이다. 나는 이 블로그를 쓰기 전 처음에 미리 시도해봤을 때는 출력이 이상하게 되었다, 그래서 CommTimeouts이라는 것을 설정해줘야 한다는 글을 발견하였고 실제로 이것을 설정하니 오류가 해결되었다. 하지만 블로그를 쓰면서 다시 한번 테스트하니 해당 오류가 발생하지 않았다. 그래서 이건 간단하게 남기려고한다. #include #include int main(int argc, char *argv[]) { HANDLE hComm = CreateFileA("\\\\.\\COM3", GENERIC_READ | ..
데이터 쓰기까지 끝난다면 이제 확실하게 간단한 모듈을 만들 준비는 끝난다. 테스트를 위해 아두이노의 코드를 다음과 같이 변경했다. void setup() { Serial.begin(115200); } void loop() { if (Serial.available()) { char name[16] = { 0, }; Serial.readBytesUntil(0x00, name, 16); char buffer[32] = { 0, }; sprintf(buffer, "Hello %s!", name); Serial.println(buffer); } } 시리얼 포트로부터 아두이노가 메시지를 받고 그 앞에 Hello를 붙여서 PC로 전송해주는 코드이다. 이렇게 PC와 아두이노가 정상적으로 통신하는지를 확인할 수 있게된다..
이제는 데이터를 읽을 차례이다. Windows에서 Baud Rate는 기본적으로 9600으로 설정되는 모양이다. 하지만 나는 직접 115200을 설정해 사용할 생각이다. 우선 다음과 같은 코드를 아두이노에 업로드했다. void setup() { Serial.begin(115200); } void loop() { Serial.println("Hello World Arduino!"); delay(1000); } 간단하게 설명하자면 begin 함수를 Baud Rate를 설정하는 함수이다. 그리고 1초에 한번씩 "Hello World Arduino!"라는 문자열을 시리얼 포트로 보낸다. 우리는 이 데이터를 Windows에서 읽어 출력하면 성공이다. ReadFile function (fileapi.h) - Win..
저번에는 통신수단 Handle을 얻는 방법을 알게되었다. 시리얼 포트로 통신하는 거라면 Baud Rate를 설정해줘야 한다. 왜냐하면 통신하는 아두이노의 Baud Rate와 PC의 Baud Rate가 일치하지 않으면 제대로 통신이 이루어지지 않는다. 이번에도 열심히 구글 검색을 한 결과 2가지 함수를 알게 되었다. 그리고 이 글을 쓰는 지금 여자친구와 헤어졌습니다. Baud Rate를 설정하기 위해서는 DCB 구조체를 사용해야한다. MSDN에서는 이 구조체를 다음과 같이 정의하고 있다. DCB (winbase.h) - Win32 apps Defines the control setting for a serial communications device. docs.microsoft.com 직렬 통신 장치에 대..