전체
NDIS 드라이버를 통한 무선 데이터 도청
리눅스의 aircrack-ng 시리즈는 정말 유명하다. 하지만 그런 툴만 찾아 쓰는것은 프로그래머로써의 수치이다. 간단하게나마 직접 개발해보았다. 랜카드를 모니터모드로 전환 후 NDIS 필터 드라이버를 통해 특정 채널에서 오가는 2계층 프레임을 원본 그대로 볼 수 있다. 단점이 있다면, 랜카드 제조사에서 모니터모드를 지원하지 않을 수 있다는 점이다. 흔히, 윈도우에서는 무선 해킹이 힘들다는 이야기가 있는데 보다시피 드라이버 레벨에서 충분히 가능하며 리눅스에서의 air뭐시기도 결국 하드웨어 드라이버를 사용하기때문에 어떻게 보면 상황이 같다. 둘째로, 랜카드가 모니터 모드를 지원하지 않으면 불가능하다는 잘못된 이야기가 오가는데 NDIS 버전6에서는 여러 인터페이스를 지원해주지만 모니터모드에 해당하는 기능은 ..
Winmm을 통한 사운드 입출력장치 얻어오기
#include #include #include #include int main() { IMMDeviceEnumerator* pEnumerator; IMMDeviceCollection* pCollection; unsigned int n, i; IMMDevice* device; IPropertyStore* store; PROPVARIANT varName; _wsetlocale(LC_ALL, L"korean"); /*정상적인 유니코드 출력을 위한 로케일 명시*/ CoInitialize(NULL); /*COM 사용을 위한 초기화. 윈속의 WSAStartup과 같은 개념*/ /*IMM 열거자를 얻어온다*/ CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX..
libvpx를 통한 인코딩 예제
극단적으로 간단하게만 작성해본다. 유용하지 않은 예제일 수도 있다. #include #include "./vpx_version.h" #include "vpx/vpx_codec.h" #include "vpx/vpx_image.h" #include "vpx/vpx_integer.h" #include "vpx/vpx_encoder.h" #include "vpx/vpx_decoder.h" #include "vpx_ports/msvc.h" #include "vp9/vp9_iface_common.h" #include "vp9/vp9_cx_iface.h" int main() { vpx_codec_iface_t* vpx; vpx_image_t* vpximg; vpx_codec_ctx_t codec; vpx_codec_..
libvpx 빌드하기 (파일 첨부 되어있음)
MPEG의 H.264 정말 너무 좋다. 왠만한 하드웨어 가속은 다 받을 수 있고, 화질도 좋고, 용량도 작고, 스트리밍에도 최적이다. 일반 사용자에게는 말이다. 문제는 개발 할 때 이다. 이놈들을 사용하기 위해 대중적으로 사용되는 라이브러리는 FFMPEG이며 이는 GPL이 걸려있다. 내 소스를 공개해야한다. 더 큰 문제는 이 H.264 라는 규격 자체가 특허가 걸려있어 로열티를 지불 해야 한다. 최근 AOM 결성으로 그를 의식한 MPEG는 웹 서비스에 대해서만 로열티 지불을 면제 해주고있다. VP8, VP9 등의 코덱은 구글이 인수한 코덱을 기반으로 개량된 코덱이다. 구글이 통크게 모두 제약없는 오픈소스로 풀어버렸다. 이 코덱들은 비교적 최신 코덱이라 하드웨어 가속을 빋지 못할 수도 있다. 인텔 i3, ..
OpenSSL을 통한 소수 생성 (랜덤)
#include /*openssl의 bn에서 bio를 참조하고 bio에서는 윈속을 참조함. 이거 추가 안하면 링크에러남.*/ #pragma comment(lib, "ws2_32.lib") #include "openssl/bn.h" /*openssl의 빅넘버 관련 헤더*/ /*openssl의 스태틱 빌드된거 찾아보면 라이브러리 받아서 사용 할 수 있다.*/ #pragma comment (lib, "libcrypto_static.lib") /*여담 : 윈도우즈에서 openssl 소스 받아다가 빌드 하려면 온갖 생쇼를 해야한다. 이미 누군가 빌드해둔 스태틱 버전 받아다 그냥 쓰는게 정신 건강에 이롭다.*/ /** @brief [콘솔 전용]16바이트 단위로 개행하며 16진 값을 프린트 한다. @param buf..
무선랜 인터페이스 얻어오기
#include #include /*wlanapi.h 를 include 하기 전에 windows.h 를 include 해주자. wlanapi.h 에서 일부 매크로 상수를 windows.h 에서 끌어다 사용하기 때문에 이 조치가 없다면 정상적인 함수 선언이 들어가지 않게된다.*/ #include #include #pragma comment(lib, "wlanapi.lib") int main() { HANDLE hClient; DWORD CurVer; DWORD Err; PWLAN_INTERFACE_INFO_LIST pInterfaceList = NULL; int i; char buffer[256]; Err = WlanOpenHandle(2, 0 , &CurVer, &hClient); if (Err != E..
DirectX 스크린 캡쳐 (DXGI 캡쳐 예제)
GDI를 사용한 화면 덤프는 끔찍하게 느리다. 그래서 그래픽카드의 도움을 받기로 했다. #include #include #include #include #include #pragma comment (lib, "d3d11.lib") #pragma comment (lib, "dxgi.lib") /** @brief 텍스쳐 생성함수 */ ID3D11Texture2D* CreateTexture(ID3D11Device* d3d11, int width, int height, DXGI_FORMAT colorformat) { D3D11_TEXTURE2D_DESC td; ID3D11Texture2D* OutputTexVal; if (!d3d11) return NULL; memset(&td, 0, sizeof(td)); t..
다이렉트X를 통한 그래픽카드 이름 얻어오기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include #include #include int main() { int i; IDXGIFactory1* pFactory; IDXGIAdapter1* pAdapter; DXGI_ADAPTER_DESC AdapterDesc; /*IDXGIFactory2의 UUID 를 사용해 팩토리 객체를 생성한다.*/ CreateDXGIFactory1(__uuidof(IDXGIFactory2), (void**)&pFactory ); i = 0; /*얻어낼 디바이스의 인덱스로 사용할 것*/ while( pFactory->EnumAdapters1(i, &pAdapter) == (HRESULT)S_OK ) { pAdapter-..