그림 01. ZAV_InducA 실행화면 #1


그림 01. ZAV_InducA 실행화면 #2



대략 2년 전이군요...

델파이 라이브러리를 감염시키는 바이러스(Win32/Induc.A)에 대해서 포스팅을 한 적이 있습니다.

2009/08/23 - [Security/Virus / Malcode] - 델파이 라이브러리 감염 바이러스 Win32.induc.a

그 당시 연습삼아서 치료용 백신을 만들었는데~

부끄럽지만(*-_-*) 정보 공유 차원에서 살포시 공개를 해봅니다~~

그 바이러스 자체가 워낙에 특별한게(?) 없던 탓에... 백신 역시 특별한 것은 없습니다.


디스크의 파일을 하나씩 하나씩 스캔하면서~~

바이러스 코드가 있는지 확인을 하고, 있는 경우는 '치료대상' 으로 추가... 없으면 패스...

'치료대상' 파일에 대해서는 바이러스 코드를 제거하고, 바이러스 코드를 호출하는 명령어를 무력화...

뭐... 요런 동작입니다. ( 심플하게... 기본 원리 구현에 충실한~? )


악성코드/바이러스를 어떻게 감지하는지...? 어떻게 치료하는지...?

요런 질문에 아주~~~~ 조금이나마 도움이 될까 싶어 ㅋ 소스도 공개를 해봅니다.
( 사실 상용화된 백신 제품의 경우는 더욱 고난도의 검사/치료 방법이 사용되는거죠... )

지극히 개인적인 취향으로 C++ Builder 로 작업을 했기에~ Visual C++ 에서는 컴파일이 안됩니다.ㅋ

컴파일은 안된다고 하더라도~ 대략 코드를 보면 원리는 알 수 있을테니깐요~ : )

---------------------------------------------------------------------------

[ 실행파일 ]


[ 소스코드 ]


---------------------------------------------------------------------------

ps.. 좀 더 깊숙하고... 복잡한 소스를 원하신다면~~ ClamAV 소스를 추천해드립니다. ㅋㅋ



YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. BlogIcon SGH 2013.05.20 19:58 신고  댓글주소  수정/삭제  댓글쓰기

    C++로 GUI구현 가능해요?

    • BlogIcon XeroNic(HS) 2013.05.21 10:28 신고  댓글주소  수정/삭제

      네~ 뭐...ㅎ 가능합니다.
      Visual C++ 이라면 MFC 를 이용하거나~~
      C++ Builder 라면 VCL 을 이용하거나 하면~~
      조금 더 손쉽게 UI 구현이 가능합니다.

  2. Minutes 2013.11.02 17:00  댓글주소  수정/삭제  댓글쓰기

    오오오,,,혹시 혼자서 직접 만드신 건가요?

  3. 질문 2014.05.08 22:10  댓글주소  수정/삭제  댓글쓰기

    HANDLE hFile = CreateFile(ustrFile.t_str(), FILE_ALL_ACCESS, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    이부분에서 오류가 2개가 나오는데 어떻게 해야 하나요 ㅠㅠㅠㅠ
    c++ builder xe6 으로 돌린 결과 입니다.. 해결좀 해주세요 ㅠㅠ

    • BlogIcon XeroNic(HS) 2014.05.09 00:08 신고  댓글주소  수정/삭제

      해당 부분에서 오류가 날만한 건 CreateFile 의 첫번째 인자 정도일 것 같은데요...
      프로젝트에서 유니코드를 기본으로 사용하는 경우는 ustrFile.c_str() 를 해주셔야 될겁니다.. ^^;;;

      실제로 제 소스코드에서는...

      HANDLE hFile = CreateFileW(ustrFile.c_str(), FILE_GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

      이런식으로 W 함수를 명시적으로 사용했고~ c_str() 을 사용했습니다.

  4. 질문 2014.05.09 16:26  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다. ㅠㅠㅠㅠ

  5. 질문 2014.05.09 16:36  댓글주소  수정/삭제  댓글쓰기

    바꿧더니

    OutputDebugString(DbgMsg.t_str());
    NameThreadForDebugging("ScanThread";);

    이거 두 부분에서 오류가 나요 ㅠㅠ

  6. 질문 2014.05.09 16:36  댓글주소  수정/삭제  댓글쓰기

    저기 이모티콘은 괄호에요 ;; 이상하게 나오네요

  7. 질문 2014.05.09 18:17  댓글주소  수정/삭제  댓글쓰기

    좀있다가 집에 가서 알려드릴게요. 그런데 그 소스 파일을 보내주시면 안되나요? ㅎㅎ;;
    좀 무리인가요?

  8. BlogIcon 김기범 2014.06.22 09:59  댓글주소  수정/삭제  댓글쓰기

    이프로그램 사고싶네요

    • BlogIcon XeroNic(HS) 2014.07.03 17:42 신고  댓글주소  수정/삭제

      음..? 연습용으로 만든거라 별거 없습니다...^^;;;;
      Win32/Induc.A 전용으로 만들어진거라 다른 바이러스는 감지못하구요..
      흔히 알려진 다른 제품과는 비교할 수 없을 정도로 부족합니다..^^;;;

  9. 질문 2014.12.26 09:16  댓글주소  수정/삭제  댓글쓰기

    안드로이드 백신을 개발하고 있는데요.
    위에 올린 소스는.. 약간 HTML 같아서... 소스를 봐도 어떻게 했는지 잘 짐작이 안가는데요..
    악성코드를 어떻게 감지하죠?.. 저 같은 경우에는 악성코드명을 DB에 저장해서 지정된 경로에 그 악성코드명이 검출되면 악성코드+1 이런식으로 하려고했거든요.. 감지 방법에 대해서 자세히 설명좀 부탁드릴게요.ㅜㅜㅜ

    그리고 치료방법은 그냥 생각조차 못하겠네요..하하하 ㅋㅋㅋㅋ

    개발 도구는 DB , 안드로이드 두개만으로도 가능한가요?.. 웹서버용 PHP, JSP같은 것도 필요한가요..?

    • BlogIcon XeroNic(HS) 2014.12.26 14:48 신고  댓글주소  수정/삭제

      악성코드 감지 방법은 선택하기 나름입니다.
      언급하신 것처럼 '특정위치에 특정이름의 파일' 이라는
      외형적인 요소를 감지 조건으로 사용할 수도 있고...
      악성코드 파일을 직접 분석해서 '파일 내부의 특정 패턴' 을
      감지 조건으로 사용할 수도 있습니다.
      이 포스팅에 올려둔 백신에서 사용한 방법은 두번째 방법이구요..

      개발도구에 대한 질문은...
      어떤 부분을 궁금해하시는 건지 제대로 파악을 못해서...
      답변드리기가 어렵네요.. ^^;;

  10. 질문 2014.12.26 18:41  댓글주소  수정/삭제  댓글쓰기

    악성코드 분석방법이 궁금한겁니다.. 악성코드의 이름을 어떻게알죠?... 2진수아닌가요?

    • BlogIcon XeroNic(HS) 2014.12.29 13:07 신고  댓글주소  수정/삭제

      악성코드 분석은...
      디스어셈블러, 디버거 등의 도구로 코드 분석을 하거나..
      직접 실행시켜서 실제 행위등을 분석하구요..

      악성코드 이름의 경우...
      다른 백신 프로그램에서 진단하는 경우엔 그 이름을 사용하기도 하고...
      새로 발견된 악성코드의 경우 업체마다 정해둔 명명법에 따라..
      이름을 정하기도 합니다.
      ( 명명법에 대한건 인터넷 검색을 하시면 확인할 수 있습니다. )