본문 바로가기

Legacy/NONE

안철수의 컴퓨터 실력은 어느정도였을까?

 

 

선거철이 되면 이런식의 논란이 있기 마련입니다. 위 이야기는 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라는 의견도 있었습니다.