선거철이 되면 이런식의 논란이 있기 마련입니다. 위 이야기는 MLBPARK에서 어떤 한 사람(이라고 하지만 그냥 안철수 까려는 알바)가 쓴 글인데 대충 V3는 기술력이 없고 대단한게 아니다. 라는게 요지입니다.

 

당연하지만(?) 리플전쟁이 일어났는데요, 저도 궁금하긴 하더군요. 대단하다고는 하는데 왜 대단한지는 구체적으로 알지는 못하니깐요. 대략적으로 의사가 이중생활로 V3를 만들었다 정도로 아는 경우가 상당수고요.

 

그런데 오늘 흥미로운 글이 하나 있네요 그래서 허락을 받고 가져왔습니다.

 

 

 


 




모 시퍼런 사이트에 우문이 올라와서 썰을.. 풀려다가 그냥 기회가 되어 다른 이야기 해 보고자 합니다.

(이 회원은 컴퓨터 조립에 야동 잘 찾으면 컴퓨터 잘 하는줄 아는 모양입니다.)


저는 안철수씨의 정치적 신념이나 사고는 아직 제대로 파악한 바가 없습니다.

이 부분은 저도 책을 읽어보고 시간을 가지고 판단해야 하니 이야기 하지 않겠고..

그의 컴퓨터 실력에 대해 논해보고자 합니다. 이 게시판은 수게가 아니라 공개 게시판이니 정치댓글은 사절입니다.


당시 90년대.. 즉 제가 아장아장 기어다니던 시절에는 컴퓨터 성능도 좋지 않고 환경또한 척박했습니다.

안철수씨가 만든 첫번째 백신은 (c)brain을 치료하는 백신으로.. 어셈블리어로 되어있습니다.


지금 컴공 다니시는 분들께 물어보겠습니다. 어셈블리어는 무엇입니까?

어셈블리어는 기계를 알아야만 쓸 수 있는 언어입니다. C언어와는 레벨이 다릅니다.


C언어는 해당 기계의 특성을 파악하면 좋지만, 전체적인 특성을 몰라도 기계 독립성 덕분에 코딩할 수 있습니다.

(물론 모든 시스템이 다 그렇다는건 아닙니다.)


하지만 어셈블리어는 그런거 없습니다. 세세한 레지스터 정보까지도, 성능을 위해선 하드웨어 특성도 다 알아야 합니다.

어셈블리어로 코딩하면 하드웨어를 모를 것 같나요? 그걸 하는 사람들은 훨씬 세세한 특성을 꿰는 사람들입니다.


내친김에 그 때의 소스를 다시 한번 봅시다. 길어서 머리아플테니 핵심적인 부분만..


....

 system_infected:

         pop  ds
         Print  mess1
         push ds
         xor  ax, ax                ; ds = 0000
         mov  ds, ax
         mov  ax, new_off           ; recover changed interrupt
         mov  old_off, ax           ;                    vector
         mov  ax, new_seg
         mov  old_seg, ax

         mov  ax, m_save            ; current memory size + 7 KB
         add  ax, 07
         mov  mem_size, ax          ; write the changed size

......

혹시나 전체 내용을 보고싶다면 여기를 클릭하세요..


뭔 소스인가 모르겠다는 분들 많으실겁니다. 일단 이 백신은 (c)brain 바이러스 한놈만 때려잡기 위해 나온 백신 코드의 일부분입니다.

바이러스 패턴 분석을 일일히 하드코딩을 하고 있습니다. current memory size + 7KB가 brain 바이러스의 특징입니다.

따라서 구조 자체는 꽤 단순한 편입니다만은.....


20대에 의대 생활을 하던 비전공자가 저런 프로그래밍 하려면 준비할게 많아서 힘든 척박한 환경인 시대에 저정도 수준의 코드를 짰다는 것은 그냥.. 저 사람은 괴물이에요 괴물. 적어도 이쪽 분야에서는 더이상 토를 달 것이 없어요..


맥아피의 scan/clean에 비해서 속도상의 이점도 있었고, 따라서 V3는 PC통신 상에서 매우 잘나가는 백신이 되었지요..


물론 안철수씨가 이후 안철수컴퓨터바이러스연구소(現 안철수연구소)를 세우시고 나서는 그가 프로그래밍을 직접 하지는 않았겠지만, 한 시대를 풍미했던 아주 훌륭한 프로그래머이자 컴퓨터 잘하는 사람이었던건 틀림없어 보입니다.

 

 

리플1

 

저 소스는 당시 16비트 x86 컴퓨터를 대상으로 쓰여진 어셈블리어로 작성된 프로그램입니다.
32비트 환경과 달리 16비트 환경은 세그먼트 메모리(segment memory model)라는 아주 복잡한 메모리 모델을 썼습니다.

지금은 평면 메모리(flat memory model)라 해서 한 프로그램이 4GB를 갖고있다고 생각하고 가상주소로 침범의 걱정 없이 안전한 프로그래밍이 가능했으나.. 16비트때는 그런거 없었습니다. 포인터도 far, near 두 종류가 있었구요..

게다가 백신은 바이러스를 잡기 위해 시스템을 건드는 영역이고.. 잡기위해선 바이러스의 패턴을 분석을 해야 하는데
그게 어디 쉬운 과정은 아니지요.. 당시에는 더했을테고..

그리고 어셈블리어 그 자체는 어렵지 않습니다. 그냥 명령 + 오퍼렌드면 끝나기 때문에 굉장히 단순합니다. 하지만 명령 하나하나가 기능성이 매우 low-level하고, 추상화가 되어있지 않으며, 생각해야 할 부분이 많기 때문에 어렵다고 하는 것이죠. 가령 초등학교 5학년 어휘 수준으로 세익스피어의 작품같은 대작을 만든다고 생각해본다면? 이해가 가실겁니다.

 

 

리플2

 

언어 자체가 어렵다기 보다는... 환경이 엄청 빈약하고 하드웨어적인 지식이 많이 필요합니다
방직기 대신 손으로 꼬아서 옷감을 만든다고 생각하시면 될듯 -_-;
당연히 알아보기도 매우 힘들어서 -_-; (작성하는것도;) 보통은 프로그램의 매우 일부분에만 적용하는 정도죠
저걸로 프로그램 하나를 전부 짜려면
코드만 봐도 머리속에 cpu의 동작과정이 전부 연상이 될 정도의 숙련도가 필요합니다

 

리플3

 

삽 한자루만 들고서 집을 짓는 난이도라고 생각하시면 됩니다.

 

리플4

 

간단히 이야기해서.

JAVA,C# = 반제품가지고 조립만 하면 됨.
C, C++ = 벽돌은 제공.
ASM = 시멘트만 제공.

입니다.

 

 

리플5, 프로그래머

 

그냥 기계어를 영어로 1:1로 바꿔다 적어놓은 게 어셈블리입니다. 좀 읽기 쉬운 기계어 정도죠.
한줄한줄의 난이도 자체는 어렵지 않지만 다른 프로그래밍 언어들이 대강 적은대로 맞춰서 프로그램을 만들어주는거라면 어셈블리는 직접 죄다 만드는거라 훨씬 작성할 분량도, 생각할것도 많기 때문에 재대로 다루는 건 또 다른 문제입니다....는 컴공 기준이고 비전공자가 할 만한 언어는 전혀 아닙니다. 일단 이걸로 뭘 재대로 만드는 난이도 자체만 두고 보자면 기계어 다음이라고 할 수 있죠.


 

리플6

 

프로그래밍에 대한 지식이 매우 높았을 뿐더러, 창의적이기도 한.. 한마디로 비범한 사람이란 얘깁니다.

아니.. 애초에 프로그래밍에 대한 제대로된 지식이 없으면 어셈 자체를 손댈수가 없습니다.
전공자도 저렇게 잘 못짜는 경우가 태반일텐데.. 비전공자가 그 프로그래밍 하기 어려운 시대에 저런걸 해냈다는게 대단하다는 겁니다.



MLBPARK쪽의 리플 몇개 가져왔습니다.


당시의 바이러스를 생각해보자면, 백신개발자에게 있어서 가장 큰 문제는 DB의 업데이트였습니다. 특히, 누구 말마따나. 당시의 백신이 쉽다고 하면, 바이러스 개발은 더욱 쉬웠던 문제이죠. 문제는 V1 V2 V3는 어셈블러로 제작이 되었습니다. (세상에 기계어 다음으로 어려운 언어죠 불친절하기는 세계 두번째입니다만. 지금도 코딩잘하는 사람이 만들라고 하면 세계에서 둘째가긴 어려운 언어입니다.) V3+ 부터는 C 입니다만.

이 어셈블러로 만들어진 결과 V계통은 정말인지 근성의 산물입니다. 물론 노턴의 경우도 그랬지만 말입니다. 특히, 한국은 위에서 언급을 했던 변종바이러스가 특히, 해킹에 꿈꾸던 중고딩들의 예루살렘 바이러스 변종버전이 범람해서 공식적으로는 50개 실질적인 실패작들을 포함하면 계산이 안되던 시절이였거든요.

노턴은 한국에 대해서 그다지 알려진바도 없고 해서 당시에 바이러스 검색률이 낮았습니다. 오히려 MS-DOS시절에 믿을 수 있었던건 오랜동안 한국에서 경험을 해온 안철수였죠. 특히, 외산바이러스 유입률이 상대적으로 낮던 시기와 해외 바이러스 표본을 수집해서 DB화 했던것은 특히 대단했습니다.

지금 안랩 홈페이지의 바이러스 DB의 경우는 대충 기록되어있습니다만. 2000년대 이전의 바이러스의 경우는 해당 루틴의 분석과 어떤 바이러스인지 기록에 남겨둡니다. 특히, DB 업데이트 이후에 붙어나오는 것에 대해서는 정말이지... 아직도 두고두고 남겨두고 싶은게 어떤 섹터와 루틴으로 공격을하고 HEX Code 몇번 섹터에 어떤 방식으로 자기복제후 용량증가까지 기록해두는 장인정신이 느껴지는 백신이였죠.

게다가 V3+부터는 .com으로 램상주가 가능하게 되어서 바이러스 감염에 대한 실시간 경고 및 루틴의 유사성을 통한 바이러스 유추도 가능하게 되었습니다. 님이 쉽다고 말할 수준은 아니예요. 가증스럽네요.

 


 

다른 의견으로는 당시의 프로그래머의 10명중 한명이었을 거라는 의견도 있었고, 신 다음의 영역인 Guru라는 의견도 있었습니다.

 

신고
Posted by Yurion Yurion


저작권 & 공지사항

Yurion.net의 글의 저작권은 Yurion에게 있습니다. 블로그 내용에 관한 무단 복제 및 배포, 스크랩, 복사, 캡쳐, 펌질등의 행동을 원칙적으로 금하며 특히 네이버 블로그와 카페의 펌질에 대해서는 강력하게 제제할 것입니다. 오직 링크만 허용됩니다. 이미지와 기타 프로그램의 저작권자가 명시된 자료는 해당 저작권자에게 모든 권리가 있습니다. 그 외의 사항은 공지사항을 참조하시길 바랍니다.


댓글을 달아 주세요

  1. 그 당시 환경을 고려하자면 적어도 무능력하다는 소리 들을 수준은 아니라고 생각했는데.. 실제로도 그랬나보군요.

  2. 만두곰돌 2012.09.24 17:03 신고  수정/삭제 댓글쓰기 댓글주소

    그... 음... 난 저 사람들이 좀 오바한다고 느낌.
    유리온은 내 경력 알잖아.
    어셈블리어가 어려운건 사실이야. 사실인데
    그 당시 분위기로는 또 그렇게 어렵다고 느끼는 분위기도 아니었고...
    그러니까 쉽게 말해서 'JAVA, C보다 어렵다' 인거지, 당시 그 개떡같은 프로그래밍 환경을 생각하면 오히려 ASM으로 접근하는게 차라리 쉬운 상황이었거든.

    물론 그렇다고 해서 안철수의 노력을 깍아내리려는게 아니라
    내가 적어도 저 사람들에 비해서 프로그래밍 경력은 훨씬 길잖아. 그리고 90년대 초반부터 나는 성과를 내던 사람이었잖아. 그런 입장에서 저 사람들의 말은 솔직히 좀 오바라는 느낌이 들어. 엠팍 특유의... 좀 그런 느낌?

    단순히 괴물...이라는 표현 보다는, 의대생의 빠듯한 시간을 쪼개서 접근할 만한 그런 언어는 아니었음에도 불구하고 그런 작품을 만들었다는게 대단한거지.

    • DJ™ 2012.09.24 18:17 신고  수정/삭제 댓글주소

      제가 그 괴물이라고 글 쓴 사람입니다만.. 제가 안철수씨를 괴물이라 표현한건 자기 전공만해도 할 것이 빠듯할텐데.. (더군다나 의대라면) 취미로 기계어를 배워서 저런 프로그램을 내놨다는게 대단하다는 것입니다. 지금 이건 (c)brain 소스의 극히 일부일 뿐이구요.. V3 본버전으로 보면 눈물나게 길더라구요... 전공자도 어찌보면 왠만큼의 실력자가 아니고서야 하기 어려울텐데.. 그걸 취미삼아서 공부하던 비전공자가 했으니 더이상 붙일 수 있는건 괴물이라는 칭호 뿐이지요 -_-;

    • 이건 맞는거 같네요. 일반인 레벨은 아니라는거...

      저 리플단 사람들 중에는 프로그래머들도 있...
      그리고 저기 아래 퍼온글을 홍팍이 아니고 기글하드웨어에요.
      http://gigglehd.com/zbxe/8475576#38

  3. 어셈블리어로 뭘했느냐가 문제지 어셈블리어 자체는 세계에서 가장 쉬운언어입니다.

    고급언어로 갈수록 오히려 어려워집니다.

    씨멘트로는 돌밖에 만들수없으나 벽돌로는 집을짓고, 인테리어 잔재로는 작품을 만들수 있기 때문이죠

    제가 13년전에 어셈블리어를 많이 했었는데요..

    어셈블리어로 기계를 컨트롤하는 것도 아니고 겨우 파일 스캔해서 패턴매칭중 하나인 백신이

    어렵다는건 이해가 안가네요^^

    • 답변은 제가 할 필요가 없을거 같은 중복이라 윗 리플에 나와있는 것을 그대로 쓰겠습니다.

      ----------------
      게다가 백신은 바이러스를 잡기 위해 시스템을 건드는 영역이고.. 잡기위해선 바이러스의 패턴을 분석을 해야 하는데
      그게 어디 쉬운 과정은 아니지요.. 당시에는 더했을테고..

      그리고 어셈블리어 그 자체는 어렵지 않습니다. 그냥 명령 + 오퍼렌드면 끝나기 때문에 굉장히 단순합니다. 하지만 명령 하나하나가 기능성이 매우 low-level하고, 추상화가 되어있지 않으며, 생각해야 할 부분이 많기 때문에 어렵다고 하는 것이죠. 가령 초등학교 5학년 어휘 수준으로 세익스피어의 작품같은 대작을 만든다고 생각해본다면? 이해가 가실겁니다.

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

      그리고 90년대 초에 백신개발이 쉽다는 소리는 이해가 안가네요. 파일스캔하고 패턴매칭은 쉽죠. 그런데 모듈을 사와서 만들건가요? 좀 이해가 안가네요.

    • badend 2012.09.25 08:44 신고  수정/삭제 댓글주소

      당시의 대부분의 백신 모듈 자체가 스트링 매칭 알고리즘을 진행해주는 엔진이었습니다.

      그리고 어셈블리어로 개발하더라도, 어짜피 외우고 하는게 아니라 레퍼런스를 참조하기때문에 절차적으로 복사 붙여넣기 잘하면 누구나 잘합니다.

  4. 물론, 복잡한것을 하기는 "어렵"습니다.

    어셈블리어로 복합한것을 하기 어려운것은, 노가다가 너무 많아서 입니다.

    정말 귀찮고 할게 많아서이지 어렵다는 난이도 자체가 어렵지 않습니다.

    저급언어로 갈수록 할게 많고, 남이 만든 코드를 읽기 힘들고

    고급언어로 갈수록 할게 적고, 남이 만든 코드가 읽기 쉬워지죠

    대시넹 고급언어로는 좀더 복잡도가 높은 세계로 들어갈수가 있습니다.

    대표적인 최고 상위에 있는 고급언어(c->자바->파이썬->매트랩)매트랩으로는 열역학분석, 머신러닝 등의 고난이도 작업을 할 수 가있죠.

    통계작업을 할수 잇는 고급언어 R이라든지 SAS등은 보통 석사급이상들이 쓰게됩니다.

    고급언어로 갈수록 좀 더 많은 것을 할 수 있기에 오히려 난이도 자체는 고급언어가 높고

    저급언어는 말 그대로 그냥...노가다죠

    • 볼스 2012.09.25 01:12 신고  수정/삭제 댓글주소

      갑자기 흥미가 생겨서 덧글 남겨요;

      저는 학생때만 프로그램 조금 배우고, 지금은 개발하고는 거리가 먼~ 일을 하는데요.

      어셈블러도 MCU를 (8051 이나 PIC 8비트 계열) 좀 배우면서 간략하게 배우긴 했습니다.
      그 외에 C나 JAVA도 배우긴 했지만... (지금은 뭐 만들라고 하면 못 만들죠~ ㅎㅎ;;)

      말씀하신 고급언어들은 사실 이름만 조금 들어봤지 모릅니다.
      제가 아는 수준이라고는... 대부분 많이 사용하는 기본 기능에 대한 함수들이 구현되어 있어서 그것을 가져와서 사용하면 된다고 알고 있습니다.
      그것만로도 단순 프로그램 정도는 구현 가능한 것으로 알고있고, 좀더 난이도가 높아진다면 역시 어렵겠지만요.

      하지만 어셈의 경우는 노가다 작업도 있겠지만, 기본 제공되는 그런 함수같은 것들이 전혀 없어서...
      단순히 분기나 반복 하는것 부터 시작해서 하나하나 직접 구현을 해야 하잖아요?
      그럼 프로그램 구조에 대해서도 알아야 할 테고, 어셈이면 그 하드웨어의 레지스터 구조도 다 파악해야 하는게 더 힘들지 않나요?

      저는 처음부터 MCU를 어셈블리언어로 시작해서 그 당시 상당히 단순한 기능조차 몇 백줄 작성한 것이 C로는 아주 쉽게 구현이 가능해서 더 쉽다고 느겼거든요. ^^;

      백신에 대해서는 전혀 모르지만...
      암튼 결론은... 저도 어셈이 더 어렵지 않을까 하는 의견이였습니다~

      P.S. 제가 잘못 알고있는 부분이 있으면 과감하게 질타해 주세요~

  5. 당시 철수형님은 낮에는 의사로 살고, 밤에 서너시간만 코딩했다는 것..

    그리고 저 형님 컴공 출신이 아니라는 것을 생각하면...


    guru급 인정입니다...... ㅎㄷㄷ

  6. 그렇게 쉬웠으면 누구나 백신만들어서 안랩같은 보안업체의 기반을 닦았겠지요.
    하물며 전공자라면 더 쉬웠겠네요.

    실제로 하지도 않으면서 남의 성과를 폄하하려고만하는거보면 참 답답.

  7. 문제는 그렇다고 해서 지금의 V3가 좋은 백신은 아니라는거..

  8. v3가 못만든건 아니지만 적어도 잘만들었다고 하기도 좀 애매한 그런 백신이죠(...)
    바이로봇이 선전되길 바랬지만 그것도 관심을 안두게 되어 버렸고...

    암튼 안철수가 석사나 박사까지 과정을 거쳤을 때 알게 된 컴공과나 실력있는 프로그래머를 알게 되어 만들었을 가능성이 큰것으로 보입니다.

    프로그래밍 실력이 베이스로 깔려있을 수 있겠지만, 비장한 머리로 바이러스 분석하는 방법을 알게되어 어셈블리 코딩은 다른 3자가 짰을 수 있는 것이죠.

    진실은 어떨지 모르겠지만... 제 생각은 컴퓨터 실력보다, 백신을 누구의 도움을 받든 일단 만들었다는 것에 의미를 두어야 할거 같습니다.

    뭐... 요즘은 주식, 정치에 맛을 점점 들이고 있는 모습이 맘에 안든다는 것이(....)

    왠지 안철수 한사람이 만든거 같은 그런 분위기의 글이 기준이 되어 진행 된거에 의아하여 글 남깁니다~! (아님 제가 글이 긴게 귀찮아 대충 봐서 그렇게 보였을수도...)

    • 저 시절은 연구소 체제가 아니고 좀 애매했던 리즈시절의 이야기지만, 프로그래밍에 대해서는 누구에게 배웠다는 기사를 본 적은 있네요.

      주식은 맛을 들린게 아니고, 증권하는 사람들이 그걸 이용하는거지 전부다 뿌렸죠. 직원에게 재단에게.

      안철수를 바라보는 시선이 뭔 정치인A를 바라보는 시선이 많은데 그런 시선으로 바라보면 제대로 못보는겁니다.

  9. 저런 사람들때문에 전여옥이 국회의원이 될수 있는게 아닐까요?
    괜찮으면 매장하고... 매장하다보니 남은 사람 뽑고.

  10. 한참 된 글 그냥 지나가다 봤는데....
    어이가 없네요 픽~
    여기저기 주어들은게 있어서 얇은 지식으로 말 막쓰지 마시죠....
    개발자들이 보면 님.. 인격까지 보입니다.
    백신이 가장 쉽다고요? ㅡㅡ; 여기 블로그질 하는 것보단 1,000,000 어렵다는 것은 제가 보장하죠.
    그 옛날에 그 컴퓨터 가지고 코드하시던 분들이 진정한 개발자입니다.
    지금 개발자들은 그에 비하면 그냥 코더들이죠... 뭘좀 아시고 글좀 쓰세요.. 거슬리네요!!!