[프린터 드라이버] 프린터 관련용어 정리
2004/08/24 08:56
CPS (Character Per Second)
도트 프린터나 잉크젯 프린터와 같은 저속의 프린터에서 초 당 인쇄되는 글자 수.

LPM (Line Per Minute)
라인 단위의 출력 프린터에서 분 당 출력되는 라인의 수.

PPM (Page Per Minute)
레이저 프린터와 같은 페이지 단위의 출력에서 분 당 인쇄되어 나오는 페이지 수.

DPI (Dots Per Inch)
1인치(약 2.54 cm)당 인쇄되는 점의 수를 가리키는 해상도 단위로, DPI 값이 높을수록 이미지의 품질이 좋다. 예를 들어, DPI가 720이면 인치 당 인쇄되는 점은 720개이다. 프린터 해상도는 150 DPI에서 1440 DPI(고해상도 모델일 경우)이고 스캐너는 300 DPI 이상이다.
▶ 좀더 자세히 보기

픽셀
픽셀은 화면을 구성하는 가장 작은 점. 보통 도트라고 한다. 픽셀의 수가 많을수록 화면에서 이미지가 더욱 정교하게 표현된다. VGA의 표준은 640 x 480 픽셀이고, SVGA의 표준은 800 x 600 픽셀.

LPI (Line Per Inch)
인치 당 선 수(LPI)는 하프톤 스크린 의 1인치 당 인쇄되는 선 수로서 인쇄에 사용된다. 신문의 해상도는 60 LPI이고 잡지의 해상도는 133 - 175 LPI이며, 고해상도 출력물에는 200 LPI 이상을 사용.

RIP (Raster Image Processor)
RIP는 벡터 그래픽, 텍스트 또는 그 두 개를 비트맵 이미지로 변환하기 위한 마이크로 프로세서가 포함된 컴퓨터 칩과 소프트웨어로 이루어진 장치를 말한다. 포스트스크립트 프린터에서 포스트스크립트 언어를 해석하는 부분이며 RIP가 프린터에 통합되어 있으면 하드웨어 RIP라고 하며, 컴퓨터에 통합되어 있으면 소프트웨어 RIP라고 하는데, 하드웨어 RIP는 이미지 데이터를 프린터로 읽어 들이는 반면, 소프트웨어 RIP는 컴퓨터에서 이미지를 만든다. RIP는 페이지 상의 각 도트를 칠하는지의 유무에 의해서 구별되며 결과의 도트 패턴에 의해서 최초로 그려진 벡터 그래픽 및 같은 텍스트가 재생된다. 모두 포스트스크립트 프린터에서 사용된다.

GDI (Graphic Device Interface)
프린터에서의 GDI는 프린팅 이미지를 PC에서 생성시켜 프린터에서 출력하는 차세대 기술을 말한다. GDI는 물리적인 인쇄를 제외한 대부분의 프린터 작업을 PC에서 소프트웨어로 처리하기 때문에 프린터 컨트롤러와 메모리 등을 최소화할 수 있어 프린터 생산원가를 크게 절감시킬 수 있다. 그러나 GDI는 프린터로 방대한 데이터를 전송하기 때문에 USB나 1394 등 차세대 인터페이스를 채용하지 않으면 심각한 병목현상이 발생하고 A3용지 등 대형 출력물이나 분당 30장 이상의 고속 출력이 필요한 고성능 프린터에는 적용하기 어려운 것으로 평가되고 있다.

Duplex
양면 인쇄. 흔히 볼 수 있는 프린터는 모두 단면 인쇄다. 하지만 고가의 프린터 중에는 양면 인쇄 기능이 있는 것도 있다. 양면 인쇄 시에는 출력된 용지가 밖으로 바로 배출되지 않고, 내부에서 한 번 더 프린트를 한 후에 밖으로 나온다.

병렬 포트
프린터와 컴퓨터 간의 인터페이스는 주로 병렬 포트를 이용한다. 보다 빠른 병렬 포트의 동작을 위해 EPP(Enhanced Parallel Port)나 ECP(Extended Capabilities Port) 등의 접속 방법이 사용되고 있는데 이들의 데이터 전달 속도는 EPP 방식이 2 MB/초, ECP가 2.4 MB/초 정도이다.

PDL (Page Description Language)
'Page Description Language'의 약자로 페이지 기술언어. 컴퓨터에서 인쇄 명령을 내리면 응용 프로그램은 문서의 내용을 프린터 드라이버로 전하고, 프린터 드라이버는 이를 명령어를 통해 프린터가 이해할 수 있는 내용으로 변환한다. 프린터마다 사용하는 PDL이 다르지만, 보통 HP 사의 PCL이나 어도비 사의 포스트스크립트가 가장 많이 사용된다. 이렇게 변환된 데이터는 인터페이스를 통해 프린터의 제어보드로 전달된 후 프린트된다.

PCL (Printer Control Language)
PCL이란 HP가 주도하고 있는 새로운 프린터 기술. PCL은 휴렛팩커드가 지난 84년 레이저프린터와 PC본체간 통신을 제어하기 위한 특수언어로 개발한 것이 시초. 최초의 PCL기능은 프린터가 명령어를 해석하고 인쇄할 특정문자를 선택한 후 문자간격과 크기를 조정하여 인쇄하는 초보기능으로 10여 차례 업그레이드를 거치면서 벡터그래픽과 페이지 출력기능, 활자 다운로드기능 등 다양한 부가 기능이 추가됐다. 96년 확정된 PCL6는 객체지향형 프로그래밍 기법을 적용, 모듈식 아키텍처 설계와 글꼴 합성기술 등이 추가돼 복잡한 그래픽을 신속하게 인쇄하며 네트워크 성능을 향상시켰다.

PostScript (포스트스크립트)
포스트스크립트(PostScript)는 미국 1982년 아도브시스템사를 설립한 존 워녹과 찰스 게슈틱이 개발한 페이지 기술언어. 포스트스크립트는 컴퓨터그래픽스와 DTP를 데스크탑 컴퓨터 영역으로 끌어내리는데 결정적인 역할을 했으며 문자나 그래픽을 수학적 함수로 표현하는 것이 특징이다. 포스트스크립트는 고품위 인쇄품질을 지원하고 특별한 기종에 의존하지 않아 하드웨어에 대해 유연한 구조를 갖고 있기 때문에 대부분의 출력용 프린터가 포스트스크립트를 지원하며, 확대 축소가 자유롭고 미려한 출력품질을 낼 수 있다. 문자의 회전, 확대, 축소 등을 지원하기 때문에 이미지, 그래픽, 텍스트 등을 고품질로 인쇄할 수 있으며, 프린터나 PC에 내장되어 있는 포스트스크립트 해석기를 통해 출력된다. 포스트스크립트는 소프트웨어 회사에 프린터와 관계된 SW를 변화시킬 필요가 없다는 장점을 제공했고 컴퓨터 그래픽스와 DTP분야에 일대 혁신을 불러일으켰으며 매킨토시가 전자출판과 2차원 이미지 프로세싱 분야에서 성장할 수 있는 기회를 마련했다.

CMY
CMY는 프린터와 기타 주변장치에서 컬러를 합성하는 방법으로, 빛의 삼원색인 청록(C), 진홍(M), 노랑(Y)을 혼합하여 모든 컬러를 표현하는 방식. 그러나 이 세 컬러만 사용해서는 검정을 완벽하게 표현할 수 없기 때문에, CMYK의 경우처럼 검정잉크를 추가해야 한다.

CMYK
프린터와 기타 주변 장치에서 컬러를 합성하는 방법으로, 빛의 삼원색인 청록(C), 진홍(M), 노랑(Y)에 검정을 더한 네 가지 컬러의 잉크를 혼합하 여 이미지의 컬러를 표현하는 방식. 이론상으로는 청록(C), 진홍(M), 노랑(Y)을 혼합하여 모든 컬러를 나타낼 수 있어야 하지만, 실제로는 순수한 검정색을 표현하지 못하므로 검정 잉크를 추가하여 표현한 방식이다.

ColorSync
Apple Computer사의 Macintosh 모델에서 사용할 수 있는 컬러 관리 기능. 이 기능을 사용하여 원본 컬러와 화면상의 컬러가 출력물에서 정확하게 일치시킬 수 있다. ColorSync 기능을 충분히 활용하려면 스캐너, 모니터, 프린터 등이 ColorSync 기능과 완벽하게 호환되어야 한다. 현재 2 버전까지 출시.

DTP (Desktop Publishing)
PC에서 출판 작 업을 하는 것. 즉, PC에서 문자를 입력하고 페이지를 편집하고 배치하는 것인데, PC의 기능이 점점 향상되면서 텍스트와 결합된 이미지 레이아웃 작업을 PC에서도 쉽게 할 수 있게 되었으며, DTP 전용 소프트웨어도 많이 출시되어 있다. 현재 PC 기반의 DTP는 출판 및 인쇄 업계에서 많은 비중을 차지하고 있다.

DTP 소프트웨어
전자 출판(Desktop Publishing)용 소프트웨어를 말하며, 일반적인 워드프로세서 소프트웨어보다 다양한 레이아웃 기능들을 제공한다. 텍스트가 많은 복잡한 레이아웃으로 이미지를 가져오는 기능뿐만 아니라 색 분해와 같은 컬러출력에 필수적인 기능들도 지원한다. 대표적인 컬러인쇄 소프트웨어로는 Adobe PageMaker와 Quark Express 등이 있다.

PICT
PICT는 Macintosh 운영체제에서 이미지를 저장하는데 사용하는 그래픽 표준으로, 페인트 방식이나 드로우 방식의 이미지 데이터를 모두 처리할 수 있으며, 풀컬러로 된 데이터도 쉽게 처리할 수 있다. Macintosh 운영 체제의 그래픽 표준으로 사용되기 때문에 이미지를 만든 그래픽 프로그램에 상관없이, Macintosh에서는 이 형식을 읽고 재현할 수 있다. PICT 파일은 또한 Macintosh에서 배경화면 이미지 형식으로 사용된다.

RGB
컬러를 합성하여 화면에 나타내는 방법으로, 빛의 삼원색인 빨강(R), 녹색(G), 파랑(B)을 혼합하여 모든 컬러를 표현한다. RGB의 각 컬러에는 8비트 씩 할당되어 총 24비트 컬러(16,777,216컬러)를 표현할 수 있다. 모니터에서 컬러를 합성하는 방법은 프린터와 다르므로 컬러의 음영도 서로 다르게 표현된다. 따라서 프린터로 자연스러운 컬러를 출력하기 위해 화면 컬러에 대한 컬러 관리가 필요하다.

감마
이미지의 중간 톤을 조정하는 기능으로, 이미지에서 밝은 영역이나 그림자 부분에는 영향을 주지 않고 중간 톤을 조정할 수 있다. 감마 기능을 사용하면 스크린 캘리브레이션의 결과가 달라지므로, 감마를 조정한 후에는 반드시 모니터 화면을 캘리브레이션 해야 한다.

계조
자연스러운 컬러 계조는 밝은 부분부터 어두운 부분까지 부드럽게 이어진다. 그러나 실제로 컴퓨터에서는 한정된 수의 계조 단계에 따라 컬러 데이터를 처리 한다. 따라서 각 RGB 컬러는 1,024단계의 계조 즉, 총 1,073,741,824가지의 컬러를 표현할 수 있다. 컬러 계조 값이 높을수록 이미지는 더 정밀하게 표현되지만, 데이터가 커지기 때문에 그만큼 메모리가 많이 사용된다.

그레이스케일
그래픽 데이터를 표현하는 방법이다. 컬러 그래픽 데이터는 색상, 명도, 대비를 기준으로 처리된다. 그레이스케일 데이터는 명도를 기준으로 처리되며 일반적으로 하나의 픽셀은 8 Bit(256단계의 계조)로 표현된다.

망점 처리
중간 색조를 표현하는 방식이다. 점들을 불규칙적으로 배열하거나 일정한 유형으로 배치하여 중간 컬러 계조를 나타내게 되는데, 그래픽 프리젠테이션이나 넓은 단색 영역이 있는 문서를 인쇄하는데 유용하게 사용할 수 있다.

모니터 화면 캘리브레이션
모니터 제조업체 와 모델에 따라 감마설정과 명도대비가 다르기 때문에 화면상에서도 각기 다르게 나타난다. 이 때, 스크린 캘리브레이션을 사용하여 화면을 조절하면 최적의 명도로 이미지를 화면에 나타낼 수 있다. 조정 작업을 할 때는 화면을 보면서 직접 할 수 있다.

색 분해
원본 이미지가 청록(C), 진홍(M), 노랑(Y), 검정(K)의 네 가지 컬러로 분해되어 있는 사진이나 그림을 인쇄하는 단계. 네 가지 컬러마다 개별적인 색 판이 만들어지며 그 위에 해당 컬러의 잉크가 인쇄되어, 원본 이미지의 컬러와 가장 유사한 컬러를 재현해 낸다.

색상 순도
색상의 선명성. 예를 들어, 갈색은 순도가 낮은 빨강이고, 태극기에 표현된 빨강은 순도가 아주 높은 빨강인데, 컬러의 색상 값이 양의 값이면 선명성이 높고, 음의 값이면 선명성이 약하며 선명성이 약해질수록 회색에 가까워진다. 이미지의 색상 순도는 프린터 드라이버에서 청록(C), 진홍 (M), 노랑(Y)의 값을 다르게 설정하여 조절할 수 있다.

인쇄 해상도
컬러 잉크젯 프린터는 잉크 입자를 인쇄 용지에 분사하는 방식으로 인쇄한다. 이 때, 인쇄 해상도란 인쇄 용지 1인치 당 분사되는 잉크 입자의 수를 말한다. 예를 들어, 해상도가 1440DPI이면 인쇄 용지 1인치 당 분사되는 잉크 입자의 수는 1440개이다. 잉크 입자가 많이 분사될 수록 이미지는 더 정밀하게 인쇄되지만, 인쇄 속도는 느려지게 된다.

중간색조 처리
컬러 계조를 표현하는 방법으로, 점들이 모여 이미지를 표현. 진한 컬러는 많은 수의 점들이 모여 표현되고 흐린 컬러는 그보다 적은 수의 점들로 표현된다. 흩뿌리기나 망점 처리 방식으로 사용.

흩뿌리기
중간 색조를 나타내는 방법으로, 점들을 불규칙적으로 배열하여 중간 컬러 계조를 표현하는 방식. 각 색상의 점과 점 주변의 색상을 혼합하여 자연스러운 컬러를 만들어 내는 방법이며, 이 방법을 사용하면 정교한 중간색조를 만들거나 멋있는 컬러로 인쇄할 수 있다. 특히, 세밀한 그래픽이나 사진을 인쇄할 때 가장 효과적이다.

Contrast
이미지에서 어두운 부분에 대한 빛의 밝기 비율로, Contrast를 올리면 빛이 비치는 곳은 더 밝아지고, 어두운 곳은 더 어두워진다. 반대로 Contrast를 낮추면 밝은 부분과 어두운 부분의 차이가 줄어든다. 이 기능은 밝은 부분과 어두운 부분의 차이를 두드러지게 하거나 미세하게 할 때 사용된다.

ICM (Image Color Matching - 이미지 컬러 매칭)
Microsoft사에서 제공하는 Windows용 컬러 관리 소프트웨어. 화면상에 원본 이미지를 나타낸 다음, 화면 컬러를 편집하여 프린터로 출력하는 이미지의 컬러와 일치시킨다.

그레이스케일
흰색에서 회색으로, 그리고 검은색으로 점진적으로 변경되는 회색조 단계를 이르는 용어. 검정 잉크로만 인쇄할 때 컬러를 표현하기 위해 사용됨.

버퍼 (Buffer)
인쇄 작업에서, 데이터가 인쇄되기 전에 임시로 저장되는 프린터의 메모리.

스풀 (Spool)
인쇄 작업의 첫째 단계로서, 프린터 드라이버에서 인쇄 데이터를 프린터가 이해할 수 있는 코드로 변환하는 작업. 이 데이터는 프린터로 바로 보내지거나 인쇄 서버로 보내진다.

인쇄 대기열
다른 작업을 수행중인 네트워크 프린터로 인쇄 작업을 보내면, 이전 작업을 모두 처리할 때까지 새로 보낸 작업을 대기열이나 인쇄 대기열에 저장합니다.

GLYPH
글자의 시각적 단위. 알파벳은 한캐릭(바이트)로 한글자를 나타내지만 동양권(far eastern)은 두 캐릭으로 한글자를 나타낸다. 하지만 glyph는 캐릭(바이트수)수로 나타내는 것이 아니고 표현되는 그림을 말한다.
표준 glyph, 복합 glyph등 있다.

출처 : http://h50177.www5.hp.com/support/C4530A/howto/35948.html
2004/08/24 08:56 2004/08/24 08:56
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다


SoftIce를 이용한 간단한 Serial Crack
2004/08/22 22:09
시리얼 입력 예제 프로그램 작성

이 글의 주제가 SoftIce를 이용하여 간단한 Reverse Engineering을 해보자(나쁘게 이야기 하면 Crack 이기도 하고 ^^;)인데 그러기 위해서는 Serial 입력을 요구하는 프로그램이 있어야 겠다.
그래서 다른 프로그램을 이용하는것 보다는 간단하게 API로 CrackMe란 예제를 만들어 봤다.
이 프로그램을 실행을 시키면 위와 같은 화면이 나온다. 다른 Serial 등록 프로그램과 아주 똑같지는 않지만 비슷하게 구성하였다. 이 프로그램에서는 Serial Number를 입력하고 '확인'을 누르면 프로그램내에 있는 Serial Number와 비교하여 같으면 Success 라는 메세지 박스를 띄우고 종료한다. 만약 틀리게 되면 Fail이라는 대화상자를 띄우고 무한 반복을 하도록 하였다.
소스코드를 보면 알겠지만 Serial Number는 '1234abcd'로 되어 있다. 그러므로 Serial Nuber를 '1234abcd'라고 입력하고 '확인'을 누르면 Success라는 대화상자를 띄울것이다. 테스트 보기 바란다. 또한 GetDlgItem을 사용하여 입력된 Serial Number를 얻어온다는 사실과 2개의 Serial Number를 lstrcmp를 사용하여 비교 한다는걸 기억해두자.
자 그럼 우리는 Serial Number 인 '1234abcd'와 프로그램의 전반적인 흐름을 모른다는 가정하에 CrackMe란 테스트 프로그램을 Crack 이란 것을 해보자. 다시 한번 이야기하지만 우리는 그것이 MFC로 짜여 졌는지 두 Serial을 lstcmp를 사용하여 비교하는지 아무것도 모르고 아는건 오로지 Serial Number를 입력하라는 것밖에 모른다.
사실 먼저 약간의 어셈블러 지식, SoftIce의 사용법, STACK등에 관련된 지식이 필요하다.
하지만 이런한 지식이 없다해도 두려워 말자. 따라하다 보면 쉽게 할수 있다. (않되더라도 나를 원망하지 않기를...)

예제프로그램 : 다운받기

BreakPoint 설정하기

먼저 CrackMe를 실행시킨다. 그럼 위의 화면과 같이 사용자의 입력을 기다리며 대기할것이다.
이때 CTRL+D를 눌러 SoftIce를 띄우자. 그래서 CrackMe란 프로그램 내부에 BreakPoint를 설정해야 할것이다.
BreakPoint를 어떻게 설정할수 있을까?
답은 SoftIce 명령어중 bpx라는데에 있다.
BPX [address] [IF expression] [DO "command1;command2;..."]
ex) bpx 80023455 if eax>1ff do "db ds:dx"
0x80023455 주소에 BreakPoint를 설정하여 프로그램이 실행시키면 0x80023455 주소를 실행하게 되면 if문 이하 조건, 즉 eax가 0x1ff보다 큰지 작은지를 검사해서 크면 브레이크가 걸리면서 ds:dx의 내용을 출력한다.

이 'bpx'라는 명령어로 어떻게 BreakPoint를 설정할까?
API로 프로그래밍을 해본 사람이라면 맨위의 화면에서 Serial Number를 입력하는 Control이 EditBox라는 것을 알것이며 이 EditBox에 있는 값을 얻어오기 위해서는 GetDlgItemText 또는 GetWindowText라는 명령어를 사용하여야 한다는것도 알것이다.(모르겠다면 당장 API책을 한권 사서 보기 바란다. 관심이 있다면...)
그러면 CrackMe란 프로그램에서 이 함수들(GetDlgItemText, GetWindowText)을 호출할때 BreakPoint를 설정하면 우리는 CrackMe란 프로그램의 내부를 볼수 있을것이다. 비록 C언어가 아니고 어셈블러 이긴하지만 내부를 볼수 있다는게 어디인가?
GetDlgItemText, GetWindowText 의 주소를 알아야 하지만 일단 무식하게 'bpx GetDlgItemText'를 입력해보자. 아마도 에러가 날것이다. 왜냐하면 GetDlgItemText라는 함수는 내부적으로는 다시 Ansi용인 GetDlgItemTextA와 Unicode용인 GetDlgItemTextW로 나뉜다. -W는 Unicode를 지원하기위해 추가된 함수이다. 그러므로 우리는 'bpx GetDlgItemTextA' 'bpx GetDlgItemTextW' 를 입력해야 한다. 이번에는 에러가 나지 않았을것이다.
'bl'을 입력해보면 BreakPoint가 걸려 있는걸 볼수있다. 이처럼 SoftIce는 Symbol을 통해 함수의 주소를 알지않아도 우리는 윈도우 API 함수에 BreakPoint를 설정할수 있도록 해준다. 이 얼마나 멋진 도구인가.
이제부터는 힘든여정이 시작된다. Crack이란게 커피자판기에서 커피 뽑든 간단한 문제가 아니다. 거의 대부분이 노가다에 가까운 작업을 통해야만이 얻을수 있는 작업이다.
그럼 이제 다시 CTRL+D를 눌러 CrackMe란 프로그램으로 되돌아 가서 Serial Number로 대충 아무 숫자나 글씨를 넣고 '확인'을 눌러보자.
BreakPoint가 걸리는가? 만약 걸리지 않는다면 다시 처음부터 차근차근 다시 해보길 바란다.
아래 그림 오른쪽 아래에 보면 user32!.text+00044438 보일것이다. 이 부분은 현재 BreakPoint가 걸린 위치를 말한다. 즉 현재는 GetDlgItemTextA 함수내부인 커널모드인것이다.

BreakPoint 설정하기

자 그럼 이제부터는 F10(step over)을 눌러 단계 단계 짚어보자.
그런데 GetDlgItemText는 우리가 굳이 분석할 필요가 없다. 다만 이곳에서 리턴해서 되돌아가는 곳만 알면 된다.
그러면 'p ret'를 입력하자. 이 명령은 프로그램이 실행되다 'RET'이란 명령을 만나면 다시 BreakPoint가 걸린다.
'p ret'를 사용하여 아래화면의 오른쪽 아래가 CrackMe!.text+02BB로 바뀐것을 볼수 있을것이다. 이때가 CrackMe란 프로그램에서 GetDlgItemText를 호출하고 결과값을 받고 리턴된 시점이다. (코드 위를 보면 Call USER32!GetDlgItemTextA 라는게 보일것이다. )
입력된 Serial Number를 얻어왔으니 남은건 2개의 Serial Number를 비교하는 부분이 있을것이다. 우리는 이 부분을 살펴보고 수정한다면 우리가 원하는 바를 얻을수 있을것이다.

다시 F10을 눌러 코드를 분석해 보자.
먼저 ecx, edx에 ebp에 있는 각각의 값을 넣어 call kernel32!lstrcmp 호출한다. 그런다음에 test eax,eax를 실행한다음 jnz(zero flag가 0이 아니면, 즉 test eax,eax 결과 0이면 zero flag가 1이 된다)를 하여 xor eax를 통해 eax를 0을 만들고 jnz를 하지 않으면 eax에 1을 넣고 jmp 0x4012f2로 jump를 한다. jump를 하는곳에서는 stack을 정리하고 ret 한 다음 바로 Fail이란 대화상자를 띄운다. 뭔가 느낌이 오는가?
가정을 해보자. ecx,edx에 각각의 Serial Number를 담고 비교하는 함수(lstrcmp)를 호출한다면 분명 exc,edx 중 한곳에는 내가 입력한 값이 들어 있을것이다. 그렇다면 다른 한쪽은 진짜 Serial Number라는 이야기가 된다. 이제 알겠는가?
그렇다면 우리의 가정을 증명해보자.
자 다시 CrackMe를 실행하고 CTRL+D를 눌러 SoftIce를 실행하고 'p ret'를 수행하여 전과같은 위치에 오도록하자. 화면 4 처럼 push edx 까지 F10을 눌러 진행시켜보자. 그런 다음 'wd.0 ecx'와 'wd.1 edx'를 입력해보자.
내가 입력한 Serial Number와 진짜 Serial Number가 시원하게 보인다. 결국 우리에 가정이 맞았다는 이야기다.

조금더 진행 해보도록 하자. F10을 눌러 test까지 진행하도록 하여두고 이곳에서 Register를 임의로 조작하여 jnz가 되지 않도록 하자.
SoftIce에서 r을 눌러 상단에 있는 register로 zero flag로 커서를 옮긴후 INSERT 키를 눌러 zero flag가 setting 되도록하자(아래의 화면)
자 그런다음 F10을 눌러보자. jnz를 수행하지 않고 그 다음 명령어인 mov eax,1을 명령어를 실행하는가? 그럼 g를 눌러 프로그램을 계속 수행시켜보자.
Success라는 대화상자가 표시되는가?


자 성공이다. 여러분은 내가 예제로 만든 프로그램의 Serial Number를 훔쳐봤을뿐 아니라 Serial Number의 확인 부분을 임으로 조작하여 Success 대화상자를 띄웠다.
사실 예제 프로그램의 Serial Number를 알아내는 것이 너무도 간단하였지만 실제에 있어서는 지루하고 오래 걸리는 일이다. 뿐만 아니라 어셈블러를 분석한다는건은 그리 만만한 일이 아니다.
여러분이 할일이 또 하나 있다. 다운 받은 예제 프로그램을 디버깅 해보라. 브레이크 포인터를 걸어서 Disassembly 버튼을 눌러 SoftIce에서 나오는 코드와 비교해보자. 아마도 똑같지는 않더라도 유사한 코드가 나올것이다.
간단한 for문이나 if문, switch문등을 작성하여 그것들을 Disassembly해보면 많은 도움이 될것이다.
아래는 예제프로그램을 비주얼 스튜디오에서 Disassemble해본 화면이다.
2004/08/22 22:09 2004/08/22 22:09
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다


해커스랩 레벨별 공략법
2004/08/20 16:58
레벨0 -> 레벨1
문제
누군가 우리 시스템에 백도어를 설치하여 두었다. 여러분은 이 백도어를 악용하여 레벨0를 통과한다.
힌트
디바이스도 아닌것이 디바이스 드라이버 무리속에..
풀이
백도어(back door)란 해커가 시스템을 해킹한 후(해킹과정에는 보통 Local attack과 Remote attack이 있다. Local attack이란 해커가 해킹을 하려고 하는 시스템에 계정이 있는 경우 시스템 자체의 버그를 이용하여 해킹하는 방법이고, Remote attack이란 계정인 없는 경우 Protocol상의 문제점이나, 해킹하려고 하는 시스템의 여러가지 인터넷 서비스 설정 버그, 또는 다른 여러 방법을 동원하여 일단 대상 시스템에 침투하는 과정을 말한다.) 다음번에 다시 대상 시스템에 들어가기위해 복잡한 해킹 과정을 거치지 않고 쉽게 해킹할 수 있도록 대상시스템에 만들어 놓은 일종의 개구멍이라 할 수 있다.
일단 해당 백도어가 디바이스 무리속에 있기 때문에 유닉스의 파일시스템에서 디바이스 디렉토리인 /dev로 가서 숨겨진 백도어를 찾도록 한다.
[bluesky@bluestar bluesky]$telnet drill.hackerslab.org
login:level0
password:guest
.....
[level0@drill level0]$ pwd
/home/level0
[level0@drill level0]$ whoami
level0
[level0@drill level0]$ id
uid=2000(level0) gid=2000(level0) groups=2000(level0),9999(hackerszone)
[level0@drill level0]$ cd /dev
[level0@drill /dev]$

이제 숨겨진 백도어를 find 명령을 이용하여 찾아보자(다음레벨로 올라가기 위한 백도어이기 때문에 이 백도어의 user는 level1일 것이다. 현재위치(.)에서 user가 level1이고 group이 level0인 화일을 찾아서 화면상에 보여준다. 결과를 화일로 저장하고 싶은 경우는 find . -user level1 -group level0 -print > file와 같이 해준다.
[level0@drill /dev]$ find . -user level1 -group level0 -print
./.hi

[level0@drill /dev]$ ls -l .hi
-rwsr-x--- 1 level1 level0 12900 Aug 10 15:15 .hi
[level0@drill /dev]$ ./.hi
[level0@drill /dev]$ id
uid=2000(level0) gid=2000(level0) euid=2001(level1) groups=2000(level0),9999(hackerszone)
[level0@drill /dev]$ whoami
level1
[level0@drill /dev]$pass
---------------------------------------------------------------------
[ LEVEL 1 ]
---------------------------------------------------------------------
패스워드 : xxxxxxxx
---------------------------------------------------------------------


▶ 그외 레벨1부터14까지의 과정 보기


출저 : 모름, 아시는분 연락바람
2004/08/20 16:58 2004/08/20 16:58
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • Longhorn 2004/09/18 18:00  댓글주소  수정/삭제  댓글쓰기
    좋군요. 예전에 얼마 까지 깼는데, 그것도 잘 기억이 안나네요.^^ 보고 참고 하겠습니다.
  • 홍가이버 2004/09/19 08:45  댓글주소  수정/삭제  댓글쓰기
    저도 한참 하다..지금 시들해져서..^^..처음에는 정말 재밌었죠?

  • 디바이스 드라이버를 개발하려면...
    2004/08/20 16:44
    OS의 전반적인 구조 파악

    ◈ 윈도우 2000/XP 커널
    - 윈도우 2000 개론
    - 윈도우 2000 커널 구조
    · Object 관리자, 프로세서와 쓰레드, 가상메모리 관리
    - I/O 서브시스템, Kernel Model I/O 처리 과정
    - 하드웨어 기초

    ◈ 윈도우 2000/XP 드라이버 개발도구
    - 디바이스 드라이버 개발도구

    가상메모리 관리 및 커널 자료구조 분석

    ◈ 가상 메모리 관리 및 선점레벨(IRQLs)
    ◈ 디바이스 드라이버의 종류와 구조
    - 디바이스 드라이버의 분류 및 전체구조
    - 디바이스 드라이버와 커널자료구조
    ◈ 커널 자료구조 분석(1)
    - Driver Object
    - DPC Object
    - Device Extension
    - IRP
    ◈ 간단한 커널 드라이버 작성 및 디버깅
    ◈ 커널 자료구조 분석(2)
    - Interrupt Objects
    - DPC Objects
    - Dispatcher Object
    ◈ 타이머
    - 빌트인(Built-In)타이머
    - 커스텀(CustomDPC)타이머
    ◈ 하드웨어 입출력(HAL)
    - Get PCI Configuration
    - HalTranslateBusAddress
    ◈ IRP Queueing vs Cancel, StartIO 처리기
    - Kernel Device Queue에 대한 이해
    - Queue와 IRP Cancel과의 동기화
    - IoStartPacket vs IoStartNextPacket
    ◈ StartIO를 이용 IRP 생성 및 전달
    - Model
    - IRP Completion Routine과 IRP Stack
    - System Thread 와 태스크스위칭
    - Busmaster DMA vs Slave DMA
    - Layered Model과 필터링

    디바이스 드라이버 프로그래밍

    ◈ 사용자 프로그램과 메모리 매핑을 통한 공유
    - 사용자측의 메모리를 이용한 커널과의 공유
    - 커널측의 메모리를 이용한 사용자와의 공유
    ◈ USB PnP 드라이버
    - Standart Control Pipe사용
    - Bulk In/Out Pipe사용
    ◈ PCI PnP 드라이버

    디바이스 드라이버

    ◈ 윈도우 2000 Virtual Serial Device Driver
    ◈ 윈도우 2000 파일 시스템 감시 Driver
    ◈ 윈도우 2000 USB Modem Device Driver
    ◈ 윈도우 2000 램디스크 Device Driver
    ◈ 윈도우 2000 API 감시 Device Driver
    ◈ 윈도우 2000 디스크 감시 Device Driver
    ◈ 윈도우 2000 시리얼 감시 Device Driver
    ◈ 윈도우 2000 Touch Screen Device Driver
    ◈ 윈도우 2000 디스플레이 감시 Device Driver
    2004/08/20 16:44 2004/08/20 16:44
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다