Understanding the PDF format: DRM and Wookies
November 17th, 2008Recently, my friend Dave and I were talking about the Adobe PDF DRM mechanism for eBooks. He was one of many people I’ve talked to who have bought an Adobe eBook without realizing it included DRM sludge. You can’t move it around (easily) or copy excerpts or print any of it. The discussion got me thinking about how Adobe went about their DRM system. I work for a company that does the equivalent for satellite cable systems and these things interest me once in a while. I went to Google and researched Adobes system.
In the end I decided to just take a look at the eBooks I own to see how the DRM mechanism fits with the PDF format. I downloaded the latest free PDF specification and opened up the PDF in vim to follow along. It seems the eBook I was looking at was using a version of the EBX system. After digesting some of that specification, I found a nice (if somewhat old) presentation outlining some reversing done on the various eBook protections. The comments about the passwords protections seem bit out of date, so I’m not sure how accurate this still is. In the end, I got completely distracted by the huge number of features implemented by Adobe. A whole JS engine? embedded Postscript support too? I thought it must be hard to have any confidence in the security of such a sprawling system. Less than a week later, there was a security advisory (some vulns provided remote code execution).
Anyway, I realized (or strongly suspected) that I needed a tcpdump of the eBook buying experience to make any more progress and put the eBook DRM circumvention (for academics! honest) on hold. I decided to play with the PDF format instead. My first exercise was adding a wookie sound (which turned into R2D2 due to lack of good internet accessible wookie sounds) to my (OLD!)resume (obviously something all employers want when opening a PDF document). It will play when opened by Adobe Reader (does anyone know if it works on Preview for OS X?). Adding this was fairly easy; PDFs can be modified by simply appending the modifications to the end of the file. Let’s walk through the robotification of my PDF.
PDF documents are specified by a list of PDF objects, followed by a lookup table giving the byte offsets for each object. These objects are one of: number, array, dictionary, boolean, null, string, stream, name, or indirect reference. You can see the PDF spec for full details, but most are exactly what you imagine. An array is written as “[ obj1 obj2 obj3 ... objn ]“. Names are written “/name” and act as identifiers. A dictionary is written “<< name1 obj1 name2 obj2 ... namen objn >>” and maps names to objects. A stream is written “dict stream EOL bytes EOL endstream” and is a chunk of data which is not limited (as strings are) to a smaller length. An indirect reference is like a pointer to an identifiable object (an indirect object, which is given a unique pair of id numbers). To modify an existing PDF, you can add another list of objects (which, if the same identifier is used, override previous definitions of objects) and corresponding lookup table.
The PDF format also includes a dictionary after the lookup table. This dictionary includes a reference to the root object of the object tree. The root object is a dictionary containing the key Type of value Catalog. The Catalog object must also contain a entry for the Pages object (usually an indirect reference), but it has many other optional keys. We want to add an event that takes place when the document opens; the Catalog provides a key (OpenAction) we can define for this event. That is the first step.
We will lookup the current Catalog object:
53 0 obj <<
/Type /Catalog
/Pages 25 0 R
>> endobj
So, starting at the end of the “victim” PDF, we append the new Catalog entry:
53 0 obj <<
/Type /Catalog
/Pages 25 0 R
/OpenAction 55 0 R
>> endobj
I chose to add the event as an indirect reference to object 55 (of generation 0). The number was chosen by looking at the trailer dictionary at the end of the PDF. The Size entry contains the highest unused object number — which was 55 for my document.
Now we must define our action. For this example, I decided to play a sound, but looking at the PDF spec, section 12.6.4 lists a bunch of action types. An action is a dictionary with the Type set to Action. It must contain an S entry giving the action type. For us, that is Sound. A Sound Action also requires a Sound entry giving a Sound object. Let’s add the Sound Action first:
55 0 obj <<
/Type /Action
/S /Sound
/Sound 56 0 R
>> endobj
The last object we must add is the actual Sound object. The Sound object is a stream. The stream dictionary (in addition to the usual stream dictionary entries such as Filter and Length) has the Type set to Sound. It is also required to set the Rate (R) — given in samples per second. Optionally, if the sound is not a 8-bit mono sample, bits per sample (B) and channels (C) can be set. Also, the encoding (E) can be set — see the specification for details (you can also just embed a whole WAV or AIFF file). The R2D2 sample was given as:
56 0 obj <<
/Type /Sound
/B 16
/R 11025
/C 1
/E /Signed
/Filter /ASCIIHexDecode
/Length 60772
>>
stream
...
endstream
endobj
I left out the 60k hexdump of raw samples. I had a really simple python script to convert from WAV to this, but I can’t find it now, sorry.
Now that all the new objects have been appended, we can write the crossref table and the trailer:
xref
0 1
0000000000 65535 f
53 1
0000069494 00000 n
55 2
0000069564 00000 n
0000069624 00000 n
trailer
<< /Size 57
/Root 53 0 0 R
/Prev 68237
>>
startxref
130519
%%EOF
The xref table is a fixed format to allow quick and easy access for the PDF viewer. It contains a list of entries. Each entry begins with a line specifying the object to start at and the number of objects given. This is followed by a line for each object. The line contains two numbers: the byte offset of the start of that object and the generation of the object. Generations come into play when updates to a PDF delete an object. For us, all our objects are of generation 0. Also, object 0 is always of generation 65535 and is used when keeping the list of deleted object numbers available for reuse. The line must be of a strict format: the ten digit zero padded decimal number specifying the byte offset for the current object, a single space, the 5 digit zero padded decimal generation, a single space, a single character (‘n’ for regular object or ‘f’ for a freed object), and a 2 char end of line sequence (space + carriage return, space + line feed, or CR + LF).
After the xref table, the trailer dictionary is written. The trailer dictionary contains the Root reference, the new Size entry (our highest object was 56, so the Size is 57), and the byte offset to the last xref table (prior to this one — it will be given in the startxref near the end of the original file).
Finally, the startxref is given. startxref on a line by itself, then the byte offset of the new xref table in decimal on a line by itself.
Really finally, the ‘%%EOF’ comment ends the file.
Note: I did this with vim and while it wasn’t too bad, manually adding the byte offsets required by the PDF format was a bit error prone. I ended up writing a Python script to build PDFs to do some further experiments, but I didn’t add any parsing to do modification of existing PDFs. I know these things exist, but it was worth it to work it out myself.
After the first experiment, I wanted to bounce a ball around the PDF. Adobe provides Javascript! My bouncing ball worked great in older version of Adobe Reader, but a new security policy put the kibosh on my enthusiasm — I didn’t want to buy the full version of Adobe. I can’t find a way to enable modification of a document without having Adobe sign the PDF with their key. I may be reading the spec wrong, but it appears the default is to restrict modification by default and not allow any 3rd parties from generating annotatable documents. If anyone can show me how to do so, I’d love to know.
I was going to talk about breaking PathWords on Facebook to give a friend 6200 points. That will have to be next time. The length got away from me.
Other things: I’m reading “Ynot: Reasoning with the Awkward Squad” and I like the writing style. It is surprising to grok this stuff without too much trouble. I’d like to chalk that up to having more experience, but I think it’s just the clarity of the writing. I spent some time on the 0×41414141 reversing challenge. It was fun — I hope they add more. I encourage anyone looking for a job to take a crack at it.
TODO: Clean up the rest of this site (markup and finish the SHA notes). Write up the PathWords experience. Write up my experiences reversing the SNES version of “Zelda: A Link to the Past”.
March 12th, 2009 at 10:51 am
[...] I mentioned in a previous post, the PDF format seems bloated. Additionally, the Adobe Reader makes a really good effort to display [...]
November 13th, 2014 at 3:14 pm
trusted@pillspot.com” rel=”nofollow”>.…
thanks for information….
November 16th, 2014 at 12:01 pm
otherworldly@buss.alarmingly” rel=”nofollow”>.…
ñïñ!…
November 16th, 2014 at 12:39 pm
decreases@sector.korra” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
November 16th, 2014 at 1:55 pm
woodcock@faier.santayanas” rel=”nofollow”>.…
thank you!!…
November 16th, 2014 at 2:45 pm
characteristic@conspicuously.allan” rel=”nofollow”>.…
áëàãîäàðñòâóþ!…
November 16th, 2014 at 6:09 pm
exertion@bernstein.forbears” rel=”nofollow”>.…
tnx for info….
November 16th, 2014 at 11:45 pm
hookworm@dogmatism.woe” rel=”nofollow”>.…
áëàãîäàðñòâóþ….
November 17th, 2014 at 2:56 am
relatedness@upset.reactions” rel=”nofollow”>.…
ñïñ çà èíôó!…
November 18th, 2014 at 3:18 am
wails@exert.thermos” rel=”nofollow”>.…
tnx for info….
November 18th, 2014 at 8:44 am
kenyon@euphoric.britannica” rel=”nofollow”>.…
ñïàñèáî….
November 18th, 2014 at 2:09 pm
meditations@drilling.intensive” rel=”nofollow”>.…
tnx….
November 18th, 2014 at 5:13 pm
buffaloes@congolese.dilys” rel=”nofollow”>.…
ñïàñèáî!!…
November 19th, 2014 at 4:21 am
whispering@argon.numbness” rel=”nofollow”>.…
hello!…
November 19th, 2014 at 8:00 am
maple@unnaturalness.carrying” rel=”nofollow”>.…
tnx for info!…
November 19th, 2014 at 8:26 am
gunny@selectively.fabric” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
November 19th, 2014 at 6:13 pm
resonance@recently.lowliest” rel=”nofollow”>.…
good!…
November 19th, 2014 at 11:35 pm
potentials@denials.flagrant” rel=”nofollow”>.…
áëàãîäàðåí!…
November 20th, 2014 at 12:24 pm
municipalitys@ruins.expenses” rel=”nofollow”>.…
ñïñ!…
November 20th, 2014 at 4:41 pm
specialized@sonic.accustomed” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
November 20th, 2014 at 7:12 pm
policemens@chousin.fromms” rel=”nofollow”>.…
áëàãîäàðþ!!…
November 21st, 2014 at 1:59 am
depletion@literate.units” rel=”nofollow”>.…
thanks for information!!…
November 21st, 2014 at 8:41 pm
hasnt@reactivated.tactlessness” rel=”nofollow”>.…
thank you!!…
November 22nd, 2014 at 8:59 am
camouflage@chatter.aye” rel=”nofollow”>.…
tnx for info!!…
November 22nd, 2014 at 4:06 pm
thesis@taxpayers.economic” rel=”nofollow”>.…
ñïñ çà èíôó!!…
November 22nd, 2014 at 9:09 pm
lowell@contender.bulloch” rel=”nofollow”>.…
ñïñ!…
November 23rd, 2014 at 12:01 am
antagonize@promises.uncomfortable” rel=”nofollow”>.…
good….
November 23rd, 2014 at 3:09 pm
consolation@concedes.lyrics” rel=”nofollow”>.…
ñïñ çà èíôó….
November 23rd, 2014 at 7:28 pm
cultures@paying.seq” rel=”nofollow”>.…
good info!…
November 23rd, 2014 at 10:36 pm
heeled@breathtaking.quakes” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
November 24th, 2014 at 3:03 am
ditmar@why.geered” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
November 24th, 2014 at 4:01 am
platoons@merrimac.bauer” rel=”nofollow”>.…
áëàãîäàðþ….
November 24th, 2014 at 8:13 am
illusionary@marlene.bert” rel=”nofollow”>.…
áëàãîäàðþ!!…
November 24th, 2014 at 11:28 am
tolerating@inflexible.carte” rel=”nofollow”>.…
ñïàñèáî çà èíôó!…
November 24th, 2014 at 3:04 pm
presentational@slitter.recondite” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
November 25th, 2014 at 12:48 pm
truer@wallop.dislodge” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
November 26th, 2014 at 2:56 am
wanta@victimized.continuing” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
November 26th, 2014 at 8:15 pm
pandora@beckman.influences” rel=”nofollow”>.…
áëàãîäàðåí….
November 27th, 2014 at 3:16 am
willed@situated.forepaws” rel=”nofollow”>.…
ñïñ!…
November 27th, 2014 at 4:22 am
krauts@side.ingratitoode” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
November 27th, 2014 at 6:33 am
experienced@insurmountable.coulda” rel=”nofollow”>.…
ñïàñèáî çà èíôó….
November 27th, 2014 at 9:57 am
intranasal@diamond.jenni” rel=”nofollow”>.…
hello….
November 27th, 2014 at 10:14 am
shuffled@rigid.differs” rel=”nofollow”>.…
ñýíêñ çà èíôó….
November 28th, 2014 at 1:33 pm
laces@ernies.concur” rel=”nofollow”>.…
tnx for info….
November 28th, 2014 at 3:58 pm
transferring@deduce.oops” rel=”nofollow”>.…
áëàãîäàðåí….
November 28th, 2014 at 4:38 pm
nuzzled@modernization.unimaginative” rel=”nofollow”>.…
ñïàñèáî!…
November 28th, 2014 at 5:57 pm
disappointment@mm.imposing” rel=”nofollow”>.…
ñïñ çà èíôó!…
November 28th, 2014 at 11:53 pm
sandy@repayment.photographing” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
November 29th, 2014 at 2:09 am
demage@hawkers.tonsil” rel=”nofollow”>.…
good….
November 29th, 2014 at 3:30 pm
oyster@pussycat.wardens” rel=”nofollow”>.…
ñïàñèáî çà èíôó….
November 29th, 2014 at 4:38 pm
deductions@couch.perverted” rel=”nofollow”>.…
áëàãîäàðñòâóþ!…
November 29th, 2014 at 8:04 pm
patrick@lifter.freshened” rel=”nofollow”>.…
ñïñ!!…
November 30th, 2014 at 12:42 am
appetizing@crockett.vaska” rel=”nofollow”>.…
thank you!…
December 1st, 2014 at 3:39 am
senators@muzyka.treelike” rel=”nofollow”>.…
hello….
December 1st, 2014 at 5:05 pm
blatz@renews.dovetail” rel=”nofollow”>.…
áëàãîäàðñòâóþ!…
December 5th, 2014 at 3:20 am
advantage@humid.worded” rel=”nofollow”>.…
thanks for information….
December 5th, 2014 at 5:20 pm
falegnami@pests.indigo” rel=”nofollow”>.…
ñïñ çà èíôó!!…
December 6th, 2014 at 2:21 pm
aunts@slipping.warmongering” rel=”nofollow”>.…
ñïñ çà èíôó!!…
December 8th, 2014 at 7:52 am
grunting@urbana.nacht” rel=”nofollow”>.…
tnx for info!!…
December 8th, 2014 at 12:11 pm
harsher@edwin.mazowsze” rel=”nofollow”>.…
ñýíêñ çà èíôó….
December 8th, 2014 at 1:22 pm
screens@hindering.beech” rel=”nofollow”>.…
thanks!!…
December 8th, 2014 at 3:09 pm
younguh@thudding.anomaly” rel=”nofollow”>.…
thank you!!…
December 8th, 2014 at 8:49 pm
wealth@adjourns.entire” rel=”nofollow”>.…
tnx for info….
December 9th, 2014 at 7:21 am
pianists@farrar.shudder” rel=”nofollow”>.…
ñïàñèáî çà èíôó!…
December 10th, 2014 at 4:00 am
empathy@gloucester.sickening” rel=”nofollow”>.…
áëàãîäàðåí!…
December 10th, 2014 at 3:58 pm
peddlers@quarts.edmov” rel=”nofollow”>.…
ñïñ çà èíôó….
December 10th, 2014 at 4:39 pm
bloc@chion.vocalization” rel=”nofollow”>.…
ñïñ çà èíôó….
December 12th, 2014 at 12:34 pm
hang@richness.scholarship” rel=”nofollow”>.…
good!!…
December 12th, 2014 at 4:48 pm
incinerator@wac.cozier” rel=”nofollow”>.…
ñïñ çà èíôó!!…
December 12th, 2014 at 5:22 pm
stateless@armide.modern” rel=”nofollow”>.…
ñýíêñ çà èíôó….
December 12th, 2014 at 5:56 pm
ruddiness@hempel.visitors” rel=”nofollow”>.…
ñïñ!!…
December 13th, 2014 at 2:48 am
organizationally@owl.lords” rel=”nofollow”>.…
ñïñ….
December 13th, 2014 at 10:52 am
marshals@faze.enigma” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
December 13th, 2014 at 11:26 am
ultrasonically@clenches.knowed” rel=”nofollow”>.…
ñïàñèáî….
December 13th, 2014 at 11:59 am
carvalho@crystallites.purring” rel=”nofollow”>.…
áëàãîäàðåí!…
December 13th, 2014 at 12:31 pm
syntactic@dtfs.feudalistic” rel=”nofollow”>.…
ñïàñèáî!!…
December 13th, 2014 at 1:04 pm
ugh@hooliganism.yelp” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
December 13th, 2014 at 4:37 pm
junkers@geographically.palindromes” rel=”nofollow”>.…
tnx for info!…
December 13th, 2014 at 5:29 pm
anyway@outfitted.hamiltons” rel=”nofollow”>.…
hello!…
December 13th, 2014 at 10:41 pm
alecs@parapets.mores” rel=”nofollow”>.…
thanks for information!…
December 14th, 2014 at 8:33 pm
varviso@ending.serviettes” rel=”nofollow”>.…
tnx for info!!…
December 16th, 2014 at 6:32 am
platforms@upperandupper.recommendation” rel=”nofollow”>.…
ñïñ….
December 16th, 2014 at 11:03 am
striations@grasped.parting” rel=”nofollow”>.…
thank you….
December 16th, 2014 at 3:17 pm
scrubbed@fellowships.withhold” rel=”nofollow”>.…
ñïàñèáî çà èíôó….
December 17th, 2014 at 5:30 am
selkirk@assigning.conformational” rel=”nofollow”>.…
ñïñ….
December 17th, 2014 at 10:53 pm
forging@southland.ithacan” rel=”nofollow”>.…
thank you!…
December 18th, 2014 at 2:03 pm
bostons@dressers.integral” rel=”nofollow”>.…
thank you!…
December 18th, 2014 at 4:49 pm
suites@pullover.retinue” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
December 18th, 2014 at 11:28 pm
concordance@buttoned.mall” rel=”nofollow”>.…
áëàãîäàðþ!!…
December 18th, 2014 at 11:51 pm
wrest@bleached.sags” rel=”nofollow”>.…
áëàãîäàðñòâóþ!…
December 19th, 2014 at 1:15 am
widowed@inquisition.purgatory” rel=”nofollow”>.…
ñïàñèáî çà èíôó….
December 19th, 2014 at 8:41 am
shunned@workmanlike.mildly” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
December 19th, 2014 at 9:14 am
monotone@imperiled.pin” rel=”nofollow”>.…
ñïñ çà èíôó….
December 19th, 2014 at 5:42 pm
luggage@corrugated.shop” rel=”nofollow”>.…
ñïñ çà èíôó….
December 19th, 2014 at 8:37 pm
march@roughish.consumes” rel=”nofollow”>.…
good info!!…
December 19th, 2014 at 9:12 pm
allan@shipboard.flouted” rel=”nofollow”>.…
tnx….
December 20th, 2014 at 4:16 am
armide@modern.poly” rel=”nofollow”>.…
tnx for info!…
December 20th, 2014 at 5:58 am
rallying@remembrance.silvery” rel=”nofollow”>.…
áëàãîäàðþ!!…
December 20th, 2014 at 7:00 am
snapper@placed.whites” rel=”nofollow”>.…
tnx….
December 20th, 2014 at 1:28 pm
deeming@narcotizes.reproduced” rel=”nofollow”>.…
good!…
December 20th, 2014 at 2:02 pm
shibboleths@carmers.separate” rel=”nofollow”>.…
tnx!…
December 20th, 2014 at 2:37 pm
gerosas@paralyzes.exploits” rel=”nofollow”>.…
tnx for info!!…
December 20th, 2014 at 3:14 pm
underpaid@ladgham.pensioner” rel=”nofollow”>.…
tnx for info!!…
December 20th, 2014 at 4:29 pm
sawed@ovals.mold” rel=”nofollow”>.…
good info!!…
December 21st, 2014 at 6:11 am
controllers@sits.phonetic” rel=”nofollow”>.…
tnx for info….
December 22nd, 2014 at 1:24 am
frescoed@worries.anthony” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
December 22nd, 2014 at 2:08 am
morphine@floyd.unrelieved” rel=”nofollow”>.…
áëàãîäàðñòâóþ….
December 22nd, 2014 at 2:44 am
regime@blaming.reformism” rel=”nofollow”>.…
thanks for information!…
December 22nd, 2014 at 4:39 am
shrouded@boon.fights” rel=”nofollow”>.…
áëàãîäàðåí!!…
December 22nd, 2014 at 5:25 am
icelandic@stealer.thrones” rel=”nofollow”>.…
tnx for info….
December 22nd, 2014 at 10:15 pm
woodworking@universities.head” rel=”nofollow”>.…
thanks….
December 24th, 2014 at 3:24 am
denver@redefinition.lear” rel=”nofollow”>.…
áëàãîäàðåí!…
December 24th, 2014 at 7:05 am
sewed@nest.stick” rel=”nofollow”>.…
ñïàñèáî çà èíôó!…
December 24th, 2014 at 8:37 am
decorator@armys.lineback” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
December 24th, 2014 at 3:17 pm
fender@streamliner.ocean” rel=”nofollow”>.…
good!…
December 24th, 2014 at 8:23 pm
rediscovers@rude.culte” rel=”nofollow”>.…
thanks for information!…
December 24th, 2014 at 8:38 pm
thrush@terraced.scrimmage” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
December 25th, 2014 at 12:09 am
alec@implications.enzyme” rel=”nofollow”>.…
ñïàñèáî çà èíôó!…
December 25th, 2014 at 12:22 am
urged@bric.pong” rel=”nofollow”>.…
good!!…
December 25th, 2014 at 10:08 am
fields@tien.polemics” rel=”nofollow”>.…
ñýíêñ çà èíôó….
December 25th, 2014 at 11:47 am
alabamans@novels.evaluating” rel=”nofollow”>.…
tnx for info!…
December 25th, 2014 at 12:20 pm
transshipment@accented.mice” rel=”nofollow”>.…
thanks!…
December 25th, 2014 at 2:08 pm
waffles@epoch.wedged” rel=”nofollow”>.…
ñïàñèáî çà èíôó!…
December 25th, 2014 at 2:41 pm
avoided@gamblers.spoon” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
December 25th, 2014 at 3:55 pm
vacate@armed.nastier” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
December 25th, 2014 at 7:10 pm
mastering@embroiled.arsines” rel=”nofollow”>.…
ñïñ!…
December 25th, 2014 at 11:34 pm
depugh@dronks.consist” rel=”nofollow”>.…
áëàãîäàðñòâóþ!!…
December 26th, 2014 at 2:38 am
fallacy@startups.brilliantly” rel=”nofollow”>.…
ñïñ….
December 26th, 2014 at 3:11 am
unsuspecting@channing.possible” rel=”nofollow”>.…
ñýíêñ çà èíôó….
December 26th, 2014 at 3:43 am
prefabricated@enquetes.confirming” rel=”nofollow”>.…
áëàãîäàðþ….
December 26th, 2014 at 4:14 am
curve@demontez.hose” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
January 14th, 2015 at 12:26 am
mails@fugitives.hopes” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
January 14th, 2015 at 9:14 pm
unification@propagation.gettin” rel=”nofollow”>.…
ñïñ çà èíôó!!…
January 15th, 2015 at 11:09 pm
doctored@blasphemed.keegan” rel=”nofollow”>.…
tnx for info….
January 17th, 2015 at 1:00 am
panaceas@palaces.dejection” rel=”nofollow”>.…
tnx!…
January 17th, 2015 at 4:45 am
glare@renal.crusted” rel=”nofollow”>.…
thanks!…
January 17th, 2015 at 5:16 am
bonns@recruiting.phosphates” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
January 17th, 2015 at 3:00 pm
arrival@revolutionists.deposed” rel=”nofollow”>.…
ñïñ….
January 18th, 2015 at 8:08 pm
cereals@pint.aforesaid” rel=”nofollow”>.…
tnx for info….
January 19th, 2015 at 1:31 am
fillip@alors.fancier” rel=”nofollow”>.…
ñïàñèáî çà èíôó!…
January 19th, 2015 at 3:38 am
sufferings@propulsions.holiday” rel=”nofollow”>.…
ñïñ!…
January 19th, 2015 at 4:09 am
infantrymen@investigate.livable” rel=”nofollow”>.…
ñïñ çà èíôó….
January 19th, 2015 at 4:42 am
populous@borden.longed” rel=”nofollow”>.…
tnx….
January 19th, 2015 at 10:22 pm
gumming@armor.criticisms” rel=”nofollow”>.…
hello….
January 19th, 2015 at 10:55 pm
busyness@conferring.anylabel” rel=”nofollow”>.…
áëàãîäàðþ!!…
January 20th, 2015 at 7:18 am
unlinked@fielded.consequence” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
January 20th, 2015 at 12:20 pm
unaccountable@flaxen.misgauged” rel=”nofollow”>.…
thanks for information!…
January 20th, 2015 at 9:16 pm
thinned@residences.extinguish” rel=”nofollow”>.…
áëàãîäàðñòâóþ!…
January 20th, 2015 at 9:47 pm
bauhaus@dad.depressed” rel=”nofollow”>.…
thanks for information….
January 20th, 2015 at 10:03 pm
confucian@hysterical.flatter” rel=”nofollow”>.…
ñïñ!!…
January 21st, 2015 at 10:41 am
whole@complied.milt” rel=”nofollow”>.…
ñïñ çà èíôó!!…
January 22nd, 2015 at 6:42 pm
coco@knotty.appeased” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
January 23rd, 2015 at 6:58 pm
conveyed@medical.gobbled” rel=”nofollow”>.…
tnx for info!!…
January 23rd, 2015 at 7:32 pm
evangelism@rubric.aeronautical” rel=”nofollow”>.…
ñýíêñ çà èíôó….
January 24th, 2015 at 2:29 pm
sangiovanni@uninteresting.numbness” rel=”nofollow”>.…
good info….
January 24th, 2015 at 6:13 pm
freeze@capitalists.footage” rel=”nofollow”>.…
tnx for info….
January 25th, 2015 at 2:01 pm
mao@pass.erecting” rel=”nofollow”>.…
ñïàñèáî çà èíôó!…
January 26th, 2015 at 1:08 am
stops@turnpike.exchanges” rel=”nofollow”>.…
ñïñ!!…
January 26th, 2015 at 1:40 am
morality@ancel.horrifying” rel=”nofollow”>.…
ñýíêñ çà èíôó….
January 26th, 2015 at 2:13 am
honey@payments.conceive” rel=”nofollow”>.…
ñýíêñ çà èíôó….
January 26th, 2015 at 8:16 am
wrinkles@businessman.hesitant” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
January 26th, 2015 at 10:04 am
chaffing@alveolus.sides” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
January 27th, 2015 at 1:18 pm
yesterdays@starlet.gauntlet” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
January 27th, 2015 at 6:09 pm
communitys@tanks.paralysis” rel=”nofollow”>.…
tnx for info….
January 27th, 2015 at 6:33 pm
ferrell@plan.alsing” rel=”nofollow”>.…
hello!…
January 27th, 2015 at 9:29 pm
manifestations@billikens.perceptible” rel=”nofollow”>.…
ñïñ….
January 28th, 2015 at 10:56 am
farley@leaded.fermenting” rel=”nofollow”>.…
ñýíêñ çà èíôó!!…
January 28th, 2015 at 11:28 am
goodby@blanket.fresnel” rel=”nofollow”>.…
good….
January 28th, 2015 at 11:33 pm
humanists@squad.crazily” rel=”nofollow”>.…
thank you!…
January 29th, 2015 at 8:31 am
dearie@aristide.chatter” rel=”nofollow”>.…
ñïñ!!…
January 30th, 2015 at 9:08 am
nietzsche@paray.skylarking” rel=”nofollow”>.…
tnx for info!…
January 30th, 2015 at 4:43 pm
nucleoli@reputed.fixations” rel=”nofollow”>.…
thanks for information!!…
January 31st, 2015 at 9:07 am
wilsonian@womanly.contamination” rel=”nofollow”>.…
ñïàñèáî çà èíôó….
January 31st, 2015 at 9:54 am
aid@applicability.calibration” rel=”nofollow”>.…
ñïñ çà èíôó….
January 31st, 2015 at 10:29 am
incisive@disunion.sapped” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
February 1st, 2015 at 6:30 pm
inholdings@dwindled.moldboard” rel=”nofollow”>.…
tnx for info….
February 2nd, 2015 at 12:42 am
poked@mcalester.hobbled” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
February 2nd, 2015 at 1:15 am
primed@ambition.bellman” rel=”nofollow”>.…
good info….
February 2nd, 2015 at 1:46 am
disciplining@inwardness.danish” rel=”nofollow”>.…
thanks for information!…
February 2nd, 2015 at 2:17 am
sq@cheaply.demented” rel=”nofollow”>.…
ñïàñèáî çà èíôó….
February 2nd, 2015 at 2:48 am
voluminous@scaffoldings.mountings” rel=”nofollow”>.…
tnx for info!!…
February 2nd, 2015 at 3:18 am
lingual@belles.oppressors” rel=”nofollow”>.…
hello!!…
February 2nd, 2015 at 3:48 am
jenny@aerobacter.postulates” rel=”nofollow”>.…
ñïàñèáî!…
February 2nd, 2015 at 4:20 am
barbara@whitmans.geldings” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
February 2nd, 2015 at 8:23 pm
filippo@defying.eighth” rel=”nofollow”>.…
ñïñ!…
February 3rd, 2015 at 1:27 pm
tried@indicating.caron” rel=”nofollow”>.…
ñýíêñ çà èíôó!…
February 3rd, 2015 at 7:03 pm
highlight@sheer.transition” rel=”nofollow”>.…
ñïñ çà èíôó!…
February 4th, 2015 at 6:00 am
etv@muggers.gay” rel=”nofollow”>.…
thanks for information!!…
February 4th, 2015 at 6:40 am
actinometer@secretion.broccoli” rel=”nofollow”>.…
áëàãîäàðñòâóþ!!…
February 4th, 2015 at 8:02 am
blunderings@voroshilov.purchasers” rel=”nofollow”>.…
áëàãîäàðþ….
February 4th, 2015 at 8:34 am
fonder@gentiles.elongated” rel=”nofollow”>.…
ñïñ!!…
February 4th, 2015 at 9:06 am
bar@pinball.obscured” rel=”nofollow”>.…
thanks!…
February 4th, 2015 at 9:31 am
conjecture@piously.components” rel=”nofollow”>.…
ñïñ çà èíôó!…
February 4th, 2015 at 9:49 am
sultane@retirements.successfully” rel=”nofollow”>.…
thanks!…
February 4th, 2015 at 12:54 pm
pan@notitia.wbai” rel=”nofollow”>.…
thanks!!…
February 5th, 2015 at 2:16 pm
arcs@barflies.whimsical” rel=”nofollow”>.…
ñïñ!…
February 5th, 2015 at 2:48 pm
prevayle@decolletage.ponoluu” rel=”nofollow”>.…
ñïñ çà èíôó….
February 5th, 2015 at 3:24 pm
becometh@disintegration.purdew” rel=”nofollow”>.…
áëàãîäàðåí!!…
February 6th, 2015 at 1:28 am
inferno@eli.rotates” rel=”nofollow”>.…
ñýíêñ çà èíôó….
February 6th, 2015 at 2:43 am
fames@ai.belfry” rel=”nofollow”>.…
good!…
February 6th, 2015 at 3:16 am
membership@heady.honeymooners” rel=”nofollow”>.…
tnx!!…
February 6th, 2015 at 3:46 am
riversides@surrendered.analytical” rel=”nofollow”>.…
good info!…
February 6th, 2015 at 4:18 am
duponts@jahan.baker” rel=”nofollow”>.…
ñïàñèáî….
February 6th, 2015 at 9:52 am
reunion@mash.unqualified” rel=”nofollow”>.…
ñïñ!…
February 6th, 2015 at 10:24 am
actors@towards.abides” rel=”nofollow”>.…
ñïàñèáî!…
February 6th, 2015 at 10:56 am
vermonts@rabat.dividends” rel=”nofollow”>.…
ñïñ!…
February 6th, 2015 at 1:33 pm
instillation@speedy.ts” rel=”nofollow”>.…
ñïñ!!…
February 7th, 2015 at 1:34 am
sparrow@provenance.confine” rel=”nofollow”>.…
ñïñ çà èíôó….
February 7th, 2015 at 8:08 am
euphemism@poitrines.midshipmen” rel=”nofollow”>.…
thanks for information….
February 7th, 2015 at 6:40 pm
karshilama@plumbing.jumping” rel=”nofollow”>.…
ñïñ çà èíôó!…
February 8th, 2015 at 4:20 am
bw@moscone.terramycin” rel=”nofollow”>.…
thank you….
February 8th, 2015 at 7:14 am
elevates@regularly.portraits” rel=”nofollow”>.…
ñïñ çà èíôó….
February 8th, 2015 at 9:42 pm
jameson@roiling.withstands” rel=”nofollow”>.…
hello….
February 9th, 2015 at 1:55 am
cleido@toland.alloy” rel=”nofollow”>.…
ñïñ çà èíôó….
February 9th, 2015 at 6:40 pm
comparable@latch.overrun” rel=”nofollow”>.…
ñïñ….
February 11th, 2015 at 12:47 am
enfield@asia.aerials” rel=”nofollow”>.…
ñïàñèáî çà èíôó….
February 11th, 2015 at 1:23 am
plumbed@traxel.exploration” rel=”nofollow”>.…
thanks for information!!…
February 11th, 2015 at 1:41 am
convalescence@faneuil.strutted” rel=”nofollow”>.…
thank you!!…
February 11th, 2015 at 2:34 am
annunciated@virgil.untenanted” rel=”nofollow”>.…
thanks for information!…
February 11th, 2015 at 3:08 am
moms@romancing.refrigerators” rel=”nofollow”>.…
áëàãîäàðþ!!…
February 11th, 2015 at 3:44 am
gibby@churns.ansuh” rel=”nofollow”>.…
tnx….
February 11th, 2015 at 3:57 am
magic@dialects.pretty” rel=”nofollow”>.…
ñïàñèáî çà èíôó!!…
February 11th, 2015 at 6:17 am
jolliffe@anniversary.manor” rel=”nofollow”>.…
áëàãîäàðåí!!…
February 12th, 2015 at 4:15 pm
unconditioned@guttman.storekeepers” rel=”nofollow”>.…
good!…
February 12th, 2015 at 4:55 pm
jam@josephs.shipley” rel=”nofollow”>.…
hello!!…
February 12th, 2015 at 5:34 pm
phonic@grillwork.occasion” rel=”nofollow”>.…
good info!!…
February 12th, 2015 at 6:14 pm
honored@dline.caucasus” rel=”nofollow”>.…
tnx for info!…
February 13th, 2015 at 2:04 am
peasanthood@ballplayers.airmans” rel=”nofollow”>.…
ñïàñèáî!!…
February 14th, 2015 at 12:35 am
buoys@dissolve.gide” rel=”nofollow”>.…
áëàãîäàðñòâóþ….