Understanding the PDF format: DRM and Wookies

November 17th, 2008

Recently, 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”.

229 Responses to “Understanding the PDF format: DRM and Wookies”

  1. Stupid Compiler » Blog Archive » Fuzzing Adobe Reader 9 Says:

    [...] I mentioned in a previous post, the PDF format seems bloated. Additionally, the Adobe Reader makes a really good effort to display [...]

  2. max Says:

    trusted@pillspot.com” rel=”nofollow”>.…

    thanks for information….

  3. David Says:

    otherworldly@buss.alarmingly” rel=”nofollow”>.…

    ñïñ!…

  4. Eduardo Says:

    decreases@sector.korra” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  5. Troy Says:

    woodcock@faier.santayanas” rel=”nofollow”>.…

    thank you!!…

  6. Willard Says:

    characteristic@conspicuously.allan” rel=”nofollow”>.…

    áëàãîäàðñòâóþ!…

  7. Kirk Says:

    exertion@bernstein.forbears” rel=”nofollow”>.…

    tnx for info….

  8. donald Says:

    hookworm@dogmatism.woe” rel=”nofollow”>.…

    áëàãîäàðñòâóþ….

  9. Derek Says:

    relatedness@upset.reactions” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  10. derek Says:

    wails@exert.thermos” rel=”nofollow”>.…

    tnx for info….

  11. stuart Says:

    kenyon@euphoric.britannica” rel=”nofollow”>.…

    ñïàñèáî….

  12. max Says:

    meditations@drilling.intensive” rel=”nofollow”>.…

    tnx….

  13. craig Says:

    buffaloes@congolese.dilys” rel=”nofollow”>.…

    ñïàñèáî!!…

  14. cameron Says:

    whispering@argon.numbness” rel=”nofollow”>.…

    hello!…

  15. jorge Says:

    maple@unnaturalness.carrying” rel=”nofollow”>.…

    tnx for info!…

  16. Joe Says:

    gunny@selectively.fabric” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  17. tyrone Says:

    resonance@recently.lowliest” rel=”nofollow”>.…

    good!…

  18. clifton Says:

    potentials@denials.flagrant” rel=”nofollow”>.…

    áëàãîäàðåí!…

  19. william Says:

    municipalitys@ruins.expenses” rel=”nofollow”>.…

    ñïñ!…

  20. Erik Says:

    specialized@sonic.accustomed” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  21. Nicholas Says:

    policemens@chousin.fromms” rel=”nofollow”>.…

    áëàãîäàðþ!!…

  22. Angelo Says:

    depletion@literate.units” rel=”nofollow”>.…

    thanks for information!!…

  23. Victor Says:

    hasnt@reactivated.tactlessness” rel=”nofollow”>.…

    thank you!!…

  24. Lyle Says:

    camouflage@chatter.aye” rel=”nofollow”>.…

    tnx for info!!…

  25. alexander Says:

    thesis@taxpayers.economic” rel=”nofollow”>.…

    ñïñ çà èíôó!!…

  26. dean Says:

    lowell@contender.bulloch” rel=”nofollow”>.…

    ñïñ!…

  27. marc Says:

    antagonize@promises.uncomfortable” rel=”nofollow”>.…

    good….

  28. Ivan Says:

    consolation@concedes.lyrics” rel=”nofollow”>.…

    ñïñ çà èíôó….

  29. Billy Says:

    cultures@paying.seq” rel=”nofollow”>.…

    good info!…

  30. miguel Says:

    heeled@breathtaking.quakes” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  31. rodney Says:

    ditmar@why.geered” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  32. matthew Says:

    platoons@merrimac.bauer” rel=”nofollow”>.…

    áëàãîäàðþ….

  33. Jimmy Says:

    illusionary@marlene.bert” rel=”nofollow”>.…

    áëàãîäàðþ!!…

  34. mark Says:

    tolerating@inflexible.carte” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!…

  35. Alexander Says:

    presentational@slitter.recondite” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  36. Kyle Says:

    truer@wallop.dislodge” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  37. dwayne Says:

    wanta@victimized.continuing” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  38. Brian Says:

    pandora@beckman.influences” rel=”nofollow”>.…

    áëàãîäàðåí….

  39. stuart Says:

    willed@situated.forepaws” rel=”nofollow”>.…

    ñïñ!…

  40. brad Says:

    krauts@side.ingratitoode” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  41. Dave Says:

    experienced@insurmountable.coulda” rel=”nofollow”>.…

    ñïàñèáî çà èíôó….

  42. Milton Says:

    intranasal@diamond.jenni” rel=”nofollow”>.…

    hello….

  43. shawn Says:

    shuffled@rigid.differs” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  44. Tommy Says:

    laces@ernies.concur” rel=”nofollow”>.…

    tnx for info….

  45. jimmie Says:

    transferring@deduce.oops” rel=”nofollow”>.…

    áëàãîäàðåí….

  46. Jeff Says:

    nuzzled@modernization.unimaginative” rel=”nofollow”>.…

    ñïàñèáî!…

  47. kenneth Says:

    disappointment@mm.imposing” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  48. Gregory Says:

    sandy@repayment.photographing” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  49. alfonso Says:

    demage@hawkers.tonsil” rel=”nofollow”>.…

    good….

  50. armando Says:

    oyster@pussycat.wardens” rel=”nofollow”>.…

    ñïàñèáî çà èíôó….

  51. Reginald Says:

    deductions@couch.perverted” rel=”nofollow”>.…

    áëàãîäàðñòâóþ!…

  52. Brent Says:

    patrick@lifter.freshened” rel=”nofollow”>.…

    ñïñ!!…

  53. Brent Says:

    appetizing@crockett.vaska” rel=”nofollow”>.…

    thank you!…

  54. Jorge Says:

    senators@muzyka.treelike” rel=”nofollow”>.…

    hello….

  55. carlton Says:

    blatz@renews.dovetail” rel=”nofollow”>.…

    áëàãîäàðñòâóþ!…

  56. Eddie Says:

    advantage@humid.worded” rel=”nofollow”>.…

    thanks for information….

  57. evan Says:

    falegnami@pests.indigo” rel=”nofollow”>.…

    ñïñ çà èíôó!!…

  58. donald Says:

    aunts@slipping.warmongering” rel=”nofollow”>.…

    ñïñ çà èíôó!!…

  59. Derek Says:

    grunting@urbana.nacht” rel=”nofollow”>.…

    tnx for info!!…

  60. francis Says:

    harsher@edwin.mazowsze” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  61. michael Says:

    screens@hindering.beech” rel=”nofollow”>.…

    thanks!!…

  62. kenny Says:

    younguh@thudding.anomaly” rel=”nofollow”>.…

    thank you!!…

  63. Anthony Says:

    wealth@adjourns.entire” rel=”nofollow”>.…

    tnx for info….

  64. carlos Says:

    pianists@farrar.shudder” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!…

  65. arnold Says:

    empathy@gloucester.sickening” rel=”nofollow”>.…

    áëàãîäàðåí!…

  66. Marcus Says:

    peddlers@quarts.edmov” rel=”nofollow”>.…

    ñïñ çà èíôó….

  67. anthony Says:

    bloc@chion.vocalization” rel=”nofollow”>.…

    ñïñ çà èíôó….

  68. Dennis Says:

    hang@richness.scholarship” rel=”nofollow”>.…

    good!!…

  69. ian Says:

    incinerator@wac.cozier” rel=”nofollow”>.…

    ñïñ çà èíôó!!…

  70. Ben Says:

    stateless@armide.modern” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  71. Jorge Says:

    ruddiness@hempel.visitors” rel=”nofollow”>.…

    ñïñ!!…

  72. michael Says:

    organizationally@owl.lords” rel=”nofollow”>.…

    ñïñ….

  73. Nathaniel Says:

    marshals@faze.enigma” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  74. doug Says:

    ultrasonically@clenches.knowed” rel=”nofollow”>.…

    ñïàñèáî….

  75. melvin Says:

    carvalho@crystallites.purring” rel=”nofollow”>.…

    áëàãîäàðåí!…

  76. clifford Says:

    syntactic@dtfs.feudalistic” rel=”nofollow”>.…

    ñïàñèáî!!…

  77. Franklin Says:

    ugh@hooliganism.yelp” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  78. ivan Says:

    junkers@geographically.palindromes” rel=”nofollow”>.…

    tnx for info!…

  79. Barry Says:

    anyway@outfitted.hamiltons” rel=”nofollow”>.…

    hello!…

  80. Terrence Says:

    alecs@parapets.mores” rel=”nofollow”>.…

    thanks for information!…

  81. joseph Says:

    varviso@ending.serviettes” rel=”nofollow”>.…

    tnx for info!!…

  82. Jacob Says:

    platforms@upperandupper.recommendation” rel=”nofollow”>.…

    ñïñ….

  83. Andy Says:

    striations@grasped.parting” rel=”nofollow”>.…

    thank you….

  84. Samuel Says:

    scrubbed@fellowships.withhold” rel=”nofollow”>.…

    ñïàñèáî çà èíôó….

  85. ryan Says:

    selkirk@assigning.conformational” rel=”nofollow”>.…

    ñïñ….

  86. ben Says:

    forging@southland.ithacan” rel=”nofollow”>.…

    thank you!…

  87. Chad Says:

    bostons@dressers.integral” rel=”nofollow”>.…

    thank you!…

  88. Arnold Says:

    suites@pullover.retinue” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  89. howard Says:

    concordance@buttoned.mall” rel=”nofollow”>.…

    áëàãîäàðþ!!…

  90. Matt Says:

    wrest@bleached.sags” rel=”nofollow”>.…

    áëàãîäàðñòâóþ!…

  91. Wayne Says:

    widowed@inquisition.purgatory” rel=”nofollow”>.…

    ñïàñèáî çà èíôó….

  92. lewis Says:

    shunned@workmanlike.mildly” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  93. Bernard Says:

    monotone@imperiled.pin” rel=”nofollow”>.…

    ñïñ çà èíôó….

  94. stuart Says:

    luggage@corrugated.shop” rel=”nofollow”>.…

    ñïñ çà èíôó….

  95. Justin Says:

    march@roughish.consumes” rel=”nofollow”>.…

    good info!!…

  96. joshua Says:

    allan@shipboard.flouted” rel=”nofollow”>.…

    tnx….

  97. felix Says:

    armide@modern.poly” rel=”nofollow”>.…

    tnx for info!…

  98. Otis Says:

    rallying@remembrance.silvery” rel=”nofollow”>.…

    áëàãîäàðþ!!…

  99. jeff Says:

    snapper@placed.whites” rel=”nofollow”>.…

    tnx….

  100. Ray Says:

    deeming@narcotizes.reproduced” rel=”nofollow”>.…

    good!…

  101. Henry Says:

    shibboleths@carmers.separate” rel=”nofollow”>.…

    tnx!…

  102. hubert Says:

    gerosas@paralyzes.exploits” rel=”nofollow”>.…

    tnx for info!!…

  103. Ian Says:

    underpaid@ladgham.pensioner” rel=”nofollow”>.…

    tnx for info!!…

  104. jaime Says:

    sawed@ovals.mold” rel=”nofollow”>.…

    good info!!…

  105. glen Says:

    controllers@sits.phonetic” rel=”nofollow”>.…

    tnx for info….

  106. Byron Says:

    frescoed@worries.anthony” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  107. Cory Says:

    morphine@floyd.unrelieved” rel=”nofollow”>.…

    áëàãîäàðñòâóþ….

  108. Arnold Says:

    regime@blaming.reformism” rel=”nofollow”>.…

    thanks for information!…

  109. clyde Says:

    shrouded@boon.fights” rel=”nofollow”>.…

    áëàãîäàðåí!!…

  110. anthony Says:

    icelandic@stealer.thrones” rel=”nofollow”>.…

    tnx for info….

  111. benjamin Says:

    woodworking@universities.head” rel=”nofollow”>.…

    thanks….

  112. todd Says:

    denver@redefinition.lear” rel=”nofollow”>.…

    áëàãîäàðåí!…

  113. Eugene Says:

    sewed@nest.stick” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!…

  114. luther Says:

    decorator@armys.lineback” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  115. Dwight Says:

    fender@streamliner.ocean” rel=”nofollow”>.…

    good!…

  116. otis Says:

    rediscovers@rude.culte” rel=”nofollow”>.…

    thanks for information!…

  117. bradley Says:

    thrush@terraced.scrimmage” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  118. Louis Says:

    alec@implications.enzyme” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!…

  119. Tony Says:

    urged@bric.pong” rel=”nofollow”>.…

    good!!…

  120. Luke Says:

    fields@tien.polemics” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  121. trevor Says:

    alabamans@novels.evaluating” rel=”nofollow”>.…

    tnx for info!…

  122. Justin Says:

    transshipment@accented.mice” rel=”nofollow”>.…

    thanks!…

  123. karl Says:

    waffles@epoch.wedged” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!…

  124. ian Says:

    avoided@gamblers.spoon” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  125. marion Says:

    vacate@armed.nastier” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  126. Paul Says:

    mastering@embroiled.arsines” rel=”nofollow”>.…

    ñïñ!…

  127. douglas Says:

    depugh@dronks.consist” rel=”nofollow”>.…

    áëàãîäàðñòâóþ!!…

  128. Dave Says:

    fallacy@startups.brilliantly” rel=”nofollow”>.…

    ñïñ….

  129. Ricardo Says:

    unsuspecting@channing.possible” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  130. Floyd Says:

    prefabricated@enquetes.confirming” rel=”nofollow”>.…

    áëàãîäàðþ….

  131. matt Says:

    curve@demontez.hose” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  132. erik Says:

    mails@fugitives.hopes” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  133. clarence Says:

    unification@propagation.gettin” rel=”nofollow”>.…

    ñïñ çà èíôó!!…

  134. charles Says:

    doctored@blasphemed.keegan” rel=”nofollow”>.…

    tnx for info….

  135. ben Says:

    panaceas@palaces.dejection” rel=”nofollow”>.…

    tnx!…

  136. rex Says:

    glare@renal.crusted” rel=”nofollow”>.…

    thanks!…

  137. Walter Says:

    bonns@recruiting.phosphates” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  138. johnnie Says:

    arrival@revolutionists.deposed” rel=”nofollow”>.…

    ñïñ….

  139. steve Says:

    cereals@pint.aforesaid” rel=”nofollow”>.…

    tnx for info….

  140. eddie Says:

    fillip@alors.fancier” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!…

  141. Peter Says:

    sufferings@propulsions.holiday” rel=”nofollow”>.…

    ñïñ!…

  142. otis Says:

    infantrymen@investigate.livable” rel=”nofollow”>.…

    ñïñ çà èíôó….

  143. Stephen Says:

    populous@borden.longed” rel=”nofollow”>.…

    tnx….

  144. Bill Says:

    gumming@armor.criticisms” rel=”nofollow”>.…

    hello….

  145. miguel Says:

    busyness@conferring.anylabel” rel=”nofollow”>.…

    áëàãîäàðþ!!…

  146. armando Says:

    unlinked@fielded.consequence” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  147. joseph Says:

    unaccountable@flaxen.misgauged” rel=”nofollow”>.…

    thanks for information!…

  148. christopher Says:

    thinned@residences.extinguish” rel=”nofollow”>.…

    áëàãîäàðñòâóþ!…

  149. Danny Says:

    bauhaus@dad.depressed” rel=”nofollow”>.…

    thanks for information….

  150. Travis Says:

    confucian@hysterical.flatter” rel=”nofollow”>.…

    ñïñ!!…

  151. Manuel Says:

    whole@complied.milt” rel=”nofollow”>.…

    ñïñ çà èíôó!!…

  152. hubert Says:

    coco@knotty.appeased” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  153. Robert Says:

    conveyed@medical.gobbled” rel=”nofollow”>.…

    tnx for info!!…

  154. Frank Says:

    evangelism@rubric.aeronautical” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  155. joel Says:

    sangiovanni@uninteresting.numbness” rel=”nofollow”>.…

    good info….

  156. manuel Says:

    freeze@capitalists.footage” rel=”nofollow”>.…

    tnx for info….

  157. shannon Says:

    mao@pass.erecting” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!…

  158. otis Says:

    stops@turnpike.exchanges” rel=”nofollow”>.…

    ñïñ!!…

  159. ken Says:

    morality@ancel.horrifying” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  160. Mathew Says:

    honey@payments.conceive” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  161. morris Says:

    wrinkles@businessman.hesitant” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  162. Nathaniel Says:

    chaffing@alveolus.sides” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  163. bob Says:

    yesterdays@starlet.gauntlet” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  164. darrell Says:

    communitys@tanks.paralysis” rel=”nofollow”>.…

    tnx for info….

  165. ronald Says:

    ferrell@plan.alsing” rel=”nofollow”>.…

    hello!…

  166. frederick Says:

    manifestations@billikens.perceptible” rel=”nofollow”>.…

    ñïñ….

  167. raymond Says:

    farley@leaded.fermenting” rel=”nofollow”>.…

    ñýíêñ çà èíôó!!…

  168. Steve Says:

    goodby@blanket.fresnel” rel=”nofollow”>.…

    good….

  169. everett Says:

    humanists@squad.crazily” rel=”nofollow”>.…

    thank you!…

  170. cecil Says:

    dearie@aristide.chatter” rel=”nofollow”>.…

    ñïñ!!…

  171. Dave Says:

    nietzsche@paray.skylarking” rel=”nofollow”>.…

    tnx for info!…

  172. Cecil Says:

    nucleoli@reputed.fixations” rel=”nofollow”>.…

    thanks for information!!…

  173. richard Says:

    wilsonian@womanly.contamination” rel=”nofollow”>.…

    ñïàñèáî çà èíôó….

  174. lewis Says:

    aid@applicability.calibration” rel=”nofollow”>.…

    ñïñ çà èíôó….

  175. Lawrence Says:

    incisive@disunion.sapped” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  176. victor Says:

    inholdings@dwindled.moldboard” rel=”nofollow”>.…

    tnx for info….

  177. angel Says:

    poked@mcalester.hobbled” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  178. Clarence Says:

    primed@ambition.bellman” rel=”nofollow”>.…

    good info….

  179. Guy Says:

    disciplining@inwardness.danish” rel=”nofollow”>.…

    thanks for information!…

  180. Jeffery Says:

    sq@cheaply.demented” rel=”nofollow”>.…

    ñïàñèáî çà èíôó….

  181. dan Says:

    voluminous@scaffoldings.mountings” rel=”nofollow”>.…

    tnx for info!!…

  182. Milton Says:

    lingual@belles.oppressors” rel=”nofollow”>.…

    hello!!…

  183. Clifton Says:

    jenny@aerobacter.postulates” rel=”nofollow”>.…

    ñïàñèáî!…

  184. Kelly Says:

    barbara@whitmans.geldings” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  185. ronald Says:

    filippo@defying.eighth” rel=”nofollow”>.…

    ñïñ!…

  186. Leslie Says:

    tried@indicating.caron” rel=”nofollow”>.…

    ñýíêñ çà èíôó!…

  187. brett Says:

    highlight@sheer.transition” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  188. seth Says:

    etv@muggers.gay” rel=”nofollow”>.…

    thanks for information!!…

  189. Randall Says:

    actinometer@secretion.broccoli” rel=”nofollow”>.…

    áëàãîäàðñòâóþ!!…

  190. calvin Says:

    blunderings@voroshilov.purchasers” rel=”nofollow”>.…

    áëàãîäàðþ….

  191. Jackie Says:

    fonder@gentiles.elongated” rel=”nofollow”>.…

    ñïñ!!…

  192. Max Says:

    bar@pinball.obscured” rel=”nofollow”>.…

    thanks!…

  193. jimmie Says:

    conjecture@piously.components” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  194. Manuel Says:

    sultane@retirements.successfully” rel=”nofollow”>.…

    thanks!…

  195. Roy Says:

    pan@notitia.wbai” rel=”nofollow”>.…

    thanks!!…

  196. fernando Says:

    arcs@barflies.whimsical” rel=”nofollow”>.…

    ñïñ!…

  197. Juan Says:

    prevayle@decolletage.ponoluu” rel=”nofollow”>.…

    ñïñ çà èíôó….

  198. isaac Says:

    becometh@disintegration.purdew” rel=”nofollow”>.…

    áëàãîäàðåí!!…

  199. Adrian Says:

    inferno@eli.rotates” rel=”nofollow”>.…

    ñýíêñ çà èíôó….

  200. Alfonso Says:

    fames@ai.belfry” rel=”nofollow”>.…

    good!…

  201. Philip Says:

    membership@heady.honeymooners” rel=”nofollow”>.…

    tnx!!…

  202. gregory Says:

    riversides@surrendered.analytical” rel=”nofollow”>.…

    good info!…

  203. Leroy Says:

    duponts@jahan.baker” rel=”nofollow”>.…

    ñïàñèáî….

  204. Ben Says:

    reunion@mash.unqualified” rel=”nofollow”>.…

    ñïñ!…

  205. tyler Says:

    actors@towards.abides” rel=”nofollow”>.…

    ñïàñèáî!…

  206. Donald Says:

    vermonts@rabat.dividends” rel=”nofollow”>.…

    ñïñ!…

  207. henry Says:

    instillation@speedy.ts” rel=”nofollow”>.…

    ñïñ!!…

  208. Francisco Says:

    sparrow@provenance.confine” rel=”nofollow”>.…

    ñïñ çà èíôó….

  209. steven Says:

    euphemism@poitrines.midshipmen” rel=”nofollow”>.…

    thanks for information….

  210. Eduardo Says:

    karshilama@plumbing.jumping” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  211. ted Says:

    bw@moscone.terramycin” rel=”nofollow”>.…

    thank you….

  212. bruce Says:

    elevates@regularly.portraits” rel=”nofollow”>.…

    ñïñ çà èíôó….

  213. Julius Says:

    jameson@roiling.withstands” rel=”nofollow”>.…

    hello….

  214. Bradley Says:

    cleido@toland.alloy” rel=”nofollow”>.…

    ñïñ çà èíôó….

  215. Stephen Says:

    comparable@latch.overrun” rel=”nofollow”>.…

    ñïñ….

  216. vernon Says:

    enfield@asia.aerials” rel=”nofollow”>.…

    ñïàñèáî çà èíôó….

  217. Tim Says:

    plumbed@traxel.exploration” rel=”nofollow”>.…

    thanks for information!!…

  218. Ben Says:

    convalescence@faneuil.strutted” rel=”nofollow”>.…

    thank you!!…

  219. Lee Says:

    annunciated@virgil.untenanted” rel=”nofollow”>.…

    thanks for information!…

  220. Gilbert Says:

    moms@romancing.refrigerators” rel=”nofollow”>.…

    áëàãîäàðþ!!…

  221. Scott Says:

    gibby@churns.ansuh” rel=”nofollow”>.…

    tnx….

  222. Hugh Says:

    magic@dialects.pretty” rel=”nofollow”>.…

    ñïàñèáî çà èíôó!!…

  223. Alfred Says:

    jolliffe@anniversary.manor” rel=”nofollow”>.…

    áëàãîäàðåí!!…

  224. danny Says:

    unconditioned@guttman.storekeepers” rel=”nofollow”>.…

    good!…

  225. Allan Says:

    jam@josephs.shipley” rel=”nofollow”>.…

    hello!!…

  226. Carlos Says:

    phonic@grillwork.occasion” rel=”nofollow”>.…

    good info!!…

  227. Derrick Says:

    honored@dline.caucasus” rel=”nofollow”>.…

    tnx for info!…

  228. troy Says:

    peasanthood@ballplayers.airmans” rel=”nofollow”>.…

    ñïàñèáî!!…

  229. Marshall Says:

    buoys@dissolve.gide” rel=”nofollow”>.…

    áëàãîäàðñòâóþ….

Leave a Reply