Programming

  • C :: typedef으로 함수 포인터를…

    Dll Injection으로 Brute Force를 하려고 공부하던 차에 함수 포인터를 활용하는 방법을 알게 되었습니다. 일반적으로 C 언어는 절차 지향 언어, 함수 지향 언어라고 알려져 있어서 C++의 클래스 구현이 안 된다고 배웁니다만, 이 함수 포인터를 이용하면 충분히 클래스를 구현할 수 있을 것 같습니다. 실제로 커널 등의 여러 소프트웨어에서 이 방법을 쓰는 것 같구요. 함수 포인터를 선언하려면 우선…

  • DLL Injection 은 어떻게 이루어지는가? – DLL? 그게 뭐야?

    루트킷을 비롯하여 바이러스, 악성코드 등 여러 분야에 두루 쓰이는 기법이 DLL Injection입니다. 윈도우즈 OS에 한정되어 적용되는 것이지만, 윈도우즈 자체의 점유율이 높은 이유로 아주 효과적으로 공격자가 원하는 작업을 수행할 수 있는 방법이죠. 최근 루트킷에 대해 공부하면서 이 DLL Injection이 어떻게 이루어지는 알게 된 것을 정리해봅니다. DLL? 그게 뭐야? DLL은 윈도우즈 OS에서 사용되는 동적 연결 라이브러리 실행…

  • C :: null 포인터, null 문자, 정수 0에 관한 이야기

    지난 어셈블리어 기말고사에서 재미있는 문제들이 나왔습니다. C 라이브러리의 strlen 함수와 strcpy 함수를 구현하라는 문제였지요. strcat 함수와 관련된 문제도 나왔구요. (이런 문제 좋아좋아^^) 문자열 함수다 보니 문자열의 종료 처리를 해야할 필요가 있었지요. 아시겠지만, C에서 문자열의 끝은 ‘\0’ 입니다. null 문자라고 읽지요. 이걸 어셈블리어로 처리하려면 어떤 값인지를 알아야 했습니다. 여기서 시작된 선배와의 대화가 null 포인터, null 문자,…

  • C :: srand(time(null)) 과 usleep() 함수

    요즘 동아리에서 C 스터디를 하고 있습니다. 리눅스 프로그래밍, 윈도우즈 프로그래밍, 루트킷 탐지 프로그램 프로젝트를 하기 위한 선행학습이지요. 복습도 되구요. 우선, 로또 게임 시뮬레이션을 만들었는데, 주석을 포함하여 217줄이 나오더군요. 그 코드 중에서 번호를 무작위로 섞는 함수 부분에 대해 얘기하고자 합니다. 자, 그러면 코드부터 볼까요? 배열에 저장된 45개의 번호를 무작위로 서로 맞바꾸는 알고리즘입니다. 알고리즘 자체는 쉽죠? Swap…

  • imagEmail, changelog 2009. 2. 28 ~ 3. 15

    2009-03-15———-– ‘gdk_draw_line’는 gtk_example의 chapter5 참조. 2009-03-11———-– *builder, *windowMain, *dialogSave, *textInputID 전역으로 정의.– buttonSave_clicked_cb: *emailID에 *testInputID의 문자열을 저장. 2009-03-09———-– v0.9.0 개발 시작.– windowMain, dialogSave GUI 구현.– GtkBuilder을 사용하면 libglade가 필요없음.– ‘gtk-builder-convert’로 xml 파일을 생성하여 GtkBuilder로 적용.– buttonSave_clicked_cb: dialogSave를 띄움. 2009-03-02———-– 간략한 설계 구성. imagEmail_design_20090302.odg 참조. 2009-02-28———-+ imagEmail 기획.  + 기능    – email 주소를 이미지로 만든다. …

  • imagEmail, GUI 구현

    GTK+와 Glade 3로 구현한 GUI입니다. 이제 여기에 C 코드로 알고리즘만 얹어 놓으면 됩니다. windowMain windowMain은 이름 그대로 메인 화면입니다. 오른쪽의 드롭다운 버튼으로 이메일의 서버종류를 선택할 수 있습니다. 우측 상단의 x 버튼으로 프로그램을 종료합니다. dialogSave dialogSave는 파일을 저장할 때 나오는 대화상자입니다. 아직 100% 구현되지 않았는데, 다 구현되면 “저장”, “취소” 버튼 위에 이메일 이미지가 어떻게 나오는지 보여줄…

  • imagEmail, 간략한 기획

    비주얼 베이직으로 만들었던 hisAlpha Image를 C 언어를 이용하여 리눅스용으로 다시 만들려고 합니다.  리눅스용이라고는 하나, 윈도우나 OS X용으로도 쉽게 포팅될 듯합니다. hiaAlpha Image는 일종의 프로토타입인 것이죠. 사실, 강분도 님의 권유가 아니었으면 그냥 묻혔을겁니다. ㅋ 아래는 간략한 기획입니다. 기능 이메일 주소를 이미지로 만듬. 15종의 메일서버 지원. 개발환경 환경: 리눅스 (Ubuntu 8.10, i386) 언어 및 툴킷 : C,…

  • C :: 0xE0 == 224 ?

    어느 한 분이 게시판에 질문을 올리셨습니다. 소코반 소스중에 일부분입니다. int ch; ch = getch(); //키 입력 if( ch==0xE0 ) { //실행 } 0xE0 은 십진수로 224입니다. 그러면 ch==224 랑 같으면 실행 된다는 말인가요 ㅡ.ㅡ? 『혼자 연구하는 C/C++』에 나오는 한 예제에 대한 질문이었습니다. C에서는 문자형으로 char가 사용됩니다. char는 1byte 자료형으로 -128~127의 값을 가집니다. 그럼 여기서부터 문제가…

  • C :: 1byte씩 메모리 읽기

    Shinnara 님이 알려주신 1byte씩 메모리를 읽는 방법입니다. 스택이나 정적메모리 영역 등에 이용할 수 있겠네요. unsigned char에 대해서는 거들떠 보지도 않았는데 이번 기회로 참 유용하다는 걸 알게되었습니다. ptr = (unsigned char *) &fNumber; 이 부분에 대해서는 지난 글에서 설명했었지요. 차이라고는 unsigned * 대신에 unsigned char *을 사용함으로써 4byte가 아닌 1byte씩 끊어 읽을 수 있다는 것입니다. 아래…