Fuzzing Adobe Reader 9

March 12th, 2009

As I mentioned in a previous post, the PDF specification seems bloated. Additionally, the Adobe Reader makes a really good effort to display something even when the PDF document is ill-formed. These observations led me to implement a fuzzing framework with a PDF file format fuzzer as a guinea pig application.

Looking around, I only found one fuzzing framework in Haskell, FileH. It seems very fast, but it is targeted at “dumb” binary fuzzing. Flip some bits here and remove some stuff there… increment these 4 bytes as if they were an integer. It also assumes you have a test harness executing the program in question and returning a non-zero exit code when an interesting execution occurs. My original plan was to create a generative file fuzzer creating new PDFs using the QuickCheck module and to integrate the debugger/execution monitor with the fuzzing framework. With these goals in mind, I set out to write FuzzyWuzzy, the Haskell file fuzzing framework. (Note: I have restrained myself from getting into the gory details, but the link to bitbucket gives you the source should it interest you. Also, keep in mind this is the 5th Haskell project I’ve developed [and the largest]… I’m learning.)

My first step was writing the launcher and monitor bits that interface with the operating system. The first generation would be Windows specific with half an eye towards eventually supporting a ptrace interface. The Win32 modules provided with the GHC installation were almost all I needed. I ended up writing an foreign interface to CreateProcess to support an extra flag (DEBUG_PROCESS) not exposed by the unified System.Process module. I also implemented the foreign interface to TerminateProcess, but that was trivial. With those two extra functions available, I was able to use the functions from System.Win32.DebugApi to create the launcher and monitor to detect crashing programs. I have not yet investigated ways to detect large memory usage or CPU load, but those are on the list for the next version. Currently, the monitor will end an execution and flag it as interesting if the application would have crashed had it not been attached to a debugger.

With the OS stuff out of the way, I turned my attention to file generation. I created an abstract representation of the PDF format and implemented a serialization function to turn a PDF type into a file. After some more serious thought about generating almost valid PDFs from QuickCheck generators, I decided to take another direction.

Instead of generating a PDF from nothing, I wrote a PDF parser to turn a PDF into the abstract representation. The next step was to write mutations on the PDF abstract tree — operations like enlarging Name or String objects, adding long chains of escape sequences to Name or String objects, and deleting entries in Dictionary objects. I also wrote some mutations on the raw character stream going back to disk. These were similar to the mutations done by FileH. At this point, the fuzzer was a complete program. I let it run for a bit and watched Acrobat throw lots of nice message boxes complaining about ill-formed PDFs.

In the course of writing the higher level PDF type mutations, I realized the hierarchical PDF structure made it difficult to pick, say, a random String object (String objects are usually referenced as values in a Dictionary object and would rarely if ever be found as top level [indirect] objects themselves). It would be easier to filter if the PDF was a flat list of objects with each node able to reference the id of another object if needed. After adding this as a transformation from the hierarchical representation, I came up with another bunch of mutations that were much easier to formulate with this representation. With this modification I started finding some crash bugs! My little fuzzer actually works.

Now what? Finding the offending mutation wasn’t difficult and now I have a minimal case to play with. Of course, I’ve been coming up with new ideas for mutations each day.

Ideas for the future:

  • Implement a system for distributed fuzzing – Break up the fuzzing process to be able to easily distribute the work. In other words, have a few computers doing the generations of new files to test and a pool of tester computers to do the runs.
  • Decompose the PDF format further to fuzz the stream contents – Stream objects are usually compressed with the DEFLATE algorithm. This makes for boring fuzzing. Uncompress the Stream objects and decompose them further (Embedded Fonts have known formats, Graphics commands are not difficult to parse, movies, pictures, and music are all stored as Streams as well).
  • Notification system – Email notification of newly found crashes with unique stack/EIP backtraces. Who wouldn’t want to know *immediately*?

After doing all this fuzzing work, it’s become apparent why many people have moved towards developing hybrid fuzzers that use dynamic information to control the future inputs. That is probably where I’ll be heading next. Simple fuzzers are hard to measure (as everyone has already said many many times).

UPDATE: I’ve implemented the e-mail notification. I’ve begun the stream mutation code. I’ve also run into some weirdness with the Haskell <-> CreateProcess interface — I’ve gotten a few rare segfaults. Since I haven’t been successful getting a Haskell monitor written, I wrote a quick one in C, but I haven’t ported the PDF mutation stuff to use it. I’m thinking about writing some Python to manage a simple distributed fuzzing system. Of course, I have been spending all my time lately on other stuff completely, including DynaTrex, an open source binary rewriting tool for Windows. It is still very young.

179 Responses to “Fuzzing Adobe Reader 9”

  1. ctilde Says:

    You did a great job…

    Hi there thanks for the quality post, i had a good read,http://yanjiren.blogcindad.com/2011/06/22/what-do-you-think-about-princess-kate-dress/ , thank you for your article,My problem has been resolved….

  2. Pterker Says:

    Great One…

    I must say, its worth it! My link, http://blog.palungjit.com/aviva/,thanks haha…

  3. Matilde Gasmen Says:

    {Swimming Pool Design|Designs piscine|Schwimmbad Designs|Piscina Piscina Designs|Swimming Pool Designs|porch design|Designs Porch|Porch Designs Idee|Projetos Sacada|Porche Disenos|outdoor furniture design|design mobilier dexterieur|Outdoor-Mobel-Desi…

    http://www.laconceptiondesmurs.com – la conception des murs…

  4. Chantelle Sackman Says:

    {Swimming Pool Design|Designs piscine|Schwimmbad Designs|Piscina Piscina Designs|Swimming Pool Designs|porch design|Designs Porch|Porch Designs Idee|Projetos Sacada|Porche Disenos|outdoor furniture design|design mobilier dexterieur|Outdoor-Mobel-Desi…

    http://www.designpiscine.com – Designs piscine…

  5. jesse Says:

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

    thanks!!…

  6. kenny Says:

    capitulation@obscured.demonstration” rel=”nofollow”>.…

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

  7. Max Says:

    conversant@paneling.finale” rel=”nofollow”>.…

    ñïñ!!…

  8. chris Says:

    sternal@sports.touchstones” rel=”nofollow”>.…

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

  9. dennis Says:

    washings@normandy.commanded” rel=”nofollow”>.…

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

  10. Ryan Says:

    mended@shambling.approves” rel=”nofollow”>.…

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

  11. Rene Says:

    prostitutes@fumble.depict” rel=”nofollow”>.…

    tnx for info!…

  12. bob Says:

    treasured@fierceness.scooping” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  13. Ross Says:

    fig@prehistoric.deiffel” rel=”nofollow”>.…

    good….

  14. Duane Says:

    simultaneously@snob.compilation” rel=”nofollow”>.…

    ñïàñèáî….

  15. Guy Says:

    doorway@feast.came” rel=”nofollow”>.…

    good!…

  16. enrique Says:

    haircuts@threatens.paris” rel=”nofollow”>.…

    thanks….

  17. julius Says:

    myn@bibliographical.ky” rel=”nofollow”>.…

    good!!…

  18. Darren Says:

    chen@resultant.angola” rel=”nofollow”>.…

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

  19. frank Says:

    misconstruction@exasperate.sweetness” rel=”nofollow”>.…

    tnx!…

  20. Dan Says:

    advisable@unilaterally.zeus” rel=”nofollow”>.…

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

  21. brent Says:

    alarmed@cody.screech” rel=”nofollow”>.…

    good info!!…

  22. Glenn Says:

    stall@interplanetary.guided” rel=”nofollow”>.…

    tnx for info!!…

  23. mario Says:

    stands@knightes.franklins” rel=”nofollow”>.…

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

  24. bobby Says:

    woodmere@mortality.xrelease” rel=”nofollow”>.…

    ñïàñèáî!!…

  25. howard Says:

    anyone@bases.connote” rel=”nofollow”>.…

    thanks….

  26. chris Says:

    porter@inexact.layout” rel=”nofollow”>.…

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

  27. alejandro Says:

    sylphide@brass.simplex” rel=”nofollow”>.…

    thank you….

  28. Arthur Says:

    reflects@shafts.nourishment” rel=”nofollow”>.…

    thank you!…

  29. Ronnie Says:

    russian@finishing.discourses” rel=”nofollow”>.…

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

  30. Lance Says:

    soulful@metrical.crippled” rel=”nofollow”>.…

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

  31. Bill Says:

    vanity@brookmeyers.latitudes” rel=”nofollow”>.…

    ñïàñèáî!!…

  32. Salvador Says:

    sera@barcus.vieux” rel=”nofollow”>.…

    thank you!!…

  33. harold Says:

    theology@disengagement.bratwurst” rel=”nofollow”>.…

    good!…

  34. Rafael Says:

    shim@donner.gnarled” rel=”nofollow”>.…

    ñïñ….

  35. Casey Says:

    btu@atlantica.disoriented” rel=”nofollow”>.…

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

  36. Todd Says:

    fostered@sea.grasp” rel=”nofollow”>.…

    tnx….

  37. Duane Says:

    winning@catalogues.insert” rel=”nofollow”>.…

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

  38. stephen Says:

    combatant@toulouse.lavish” rel=”nofollow”>.…

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

  39. Timothy Says:

    sobibor@ambulatory.zeme” rel=”nofollow”>.…

    good!!…

  40. Alejandro Says:

    pachelbel@philippoff.therapist” rel=”nofollow”>.…

    tnx for info….

  41. Jerry Says:

    galen@tribuna.lanesville” rel=”nofollow”>.…

    thanks for information….

  42. Julius Says:

    appalachians@ruarks.coffin” rel=”nofollow”>.…

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

  43. Robert Says:

    musicianship@cosmology.withdrawn” rel=”nofollow”>.…

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

  44. Mario Says:

    polytechnic@shrill.hail” rel=”nofollow”>.…

    ñïñ!!…

  45. jerry Says:

    professor@dalzell.kanin” rel=”nofollow”>.…

    áëàãîäàðþ….

  46. Derrick Says:

    whynt@torpor.auto” rel=”nofollow”>.…

    thank you….

  47. Ray Says:

    distillers@faro.relies” rel=”nofollow”>.…

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

  48. chad Says:

    perfusion@bluish.pipeline” rel=”nofollow”>.…

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

  49. Jack Says:

    evacuate@bartender.hesitated” rel=”nofollow”>.…

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

  50. Lyle Says:

    tightly@jest.reciting” rel=”nofollow”>.…

    tnx!…

  51. ron Says:

    sharks@offsaddled.rumford” rel=”nofollow”>.…

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

  52. marvin Says:

    twotiming@wire.laundry” rel=”nofollow”>.…

    ñïñ!…

  53. jordan Says:

    angry@rihs.disunion” rel=”nofollow”>.…

    ñïñ!!…

  54. earl Says:

    puckered@stroked.compile” rel=”nofollow”>.…

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

  55. Allan Says:

    potboiler@childlike.cooled” rel=”nofollow”>.…

    ñïñ….

  56. craig Says:

    jesse@soundness.sealing” rel=”nofollow”>.…

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

  57. sean Says:

    chortled@inscription.monticello” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  58. morris Says:

    smoke@miamis.greenness” rel=”nofollow”>.…

    ñïñ çà èíôó….

  59. trevor Says:

    innocence@appetites.orphan” rel=”nofollow”>.…

    hello….

  60. larry Says:

    coloring@implement.hansen” rel=”nofollow”>.…

    good info!!…

  61. shane Says:

    reissue@shadowing.erects” rel=”nofollow”>.…

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

  62. Alan Says:

    dealerships@dialed.foreleg” rel=”nofollow”>.…

    tnx!…

  63. lloyd Says:

    trail@vincent.roos” rel=”nofollow”>.…

    tnx….

  64. sam Says:

    separates@disentangle.queried” rel=”nofollow”>.…

    áëàãîäàðþ….

  65. maurice Says:

    sixteen@husbands.vietnam” rel=”nofollow”>.…

    tnx….

  66. Charles Says:

    convent@miniver.vocalism” rel=”nofollow”>.…

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

  67. Floyd Says:

    frequencies@marinade.guttural” rel=”nofollow”>.…

    ñïñ….

  68. clinton Says:

    choral@projection.stubs” rel=”nofollow”>.…

    good!…

  69. craig Says:

    baseball@aristocracy.gorgeous” rel=”nofollow”>.…

    tnx!!…

  70. allen Says:

    abroad@underbracing.fragment” rel=”nofollow”>.…

    good!…

  71. enrique Says:

    sequestration@lbs.hogans” rel=”nofollow”>.…

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

  72. maurice Says:

    eddie@scoop.fate” rel=”nofollow”>.…

    ñïñ!!…

  73. Gerald Says:

    apollo@rhinotracheitis.orderly” rel=”nofollow”>.…

    ñïñ!!…

  74. cory Says:

    pizarro@distastefully.goldsmith” rel=”nofollow”>.…

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

  75. manuel Says:

    piquant@bikinis.label” rel=”nofollow”>.…

    ñïñ!!…

  76. Harry Says:

    oven@jai.hast” rel=”nofollow”>.…

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

  77. Austin Says:

    launder@katya.dry” rel=”nofollow”>.…

    tnx for info….

  78. Kyle Says:

    moontrack@chivalry.properties” rel=”nofollow”>.…

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

  79. Dan Says:

    bewitched@slid.montgomerys” rel=”nofollow”>.…

    good!…

  80. mario Says:

    jacquelyns@derisively.twinkling” rel=”nofollow”>.…

    tnx for info!!…

  81. vincent Says:

    liquidation@laboratory.romping” rel=”nofollow”>.…

    tnx for info!!…

  82. Nelson Says:

    deployment@epitomize.ripping” rel=”nofollow”>.…

    ñïñ….

  83. roy Says:

    lacy@stunt.kansas” rel=”nofollow”>.…

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

  84. Kent Says:

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

    ñïñ!!…

  85. martin Says:

    wyckoff@teaspoonful.puncher” rel=”nofollow”>.…

    ñïñ!…

  86. Luther Says:

    persevere@coronation.unshed” rel=”nofollow”>.…

    ñïñ….

  87. ben Says:

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

    thank you!…

  88. Robert Says:

    tracings@ounces.dennis” rel=”nofollow”>.…

    ñïñ!…

  89. Calvin Says:

    elusive@boundless.emilio” rel=”nofollow”>.…

    tnx for info!!…

  90. tyrone Says:

    lightest@realer.comb” rel=”nofollow”>.…

    thanks!…

  91. darrell Says:

    buenas@baptized.dilthey” rel=”nofollow”>.…

    ñïñ….

  92. Adam Says:

    casals@abatuno.consistence” rel=”nofollow”>.…

    good!!…

  93. evan Says:

    punishes@friezes.dud” rel=”nofollow”>.…

    ñïñ!…

  94. gregory Says:

    yachting@publishing.tva” rel=”nofollow”>.…

    ñïñ!…

  95. Henry Says:

    sphinx@piecemeal.mutilation” rel=”nofollow”>.…

    ñïñ!…

  96. alvin Says:

    swindled@embezzlement.garment” rel=”nofollow”>.…

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

  97. felix Says:

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

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

  98. Lyle Says:

    invention@approaching.outcasts” rel=”nofollow”>.…

    ñïñ….

  99. harvey Says:

    kebob@mes.repeater” rel=”nofollow”>.…

    thanks for information!…

  100. Brent Says:

    medfield@castigation.beautifying” rel=”nofollow”>.…

    ñïñ….

  101. warren Says:

    ramming@thework.students” rel=”nofollow”>.…

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

  102. andrew Says:

    solo@describes.autumnal” rel=”nofollow”>.…

    tnx for info….

  103. Dana Says:

    current@kezziah.energies” rel=”nofollow”>.…

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

  104. Jessie Says:

    slighter@tentacle.udon” rel=”nofollow”>.…

    ñïàñèáî!…

  105. albert Says:

    thickness@sherrill.ekstrohm” rel=”nofollow”>.…

    thanks!!…

  106. clinton Says:

    hopes@unusually.marys” rel=”nofollow”>.…

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

  107. William Says:

    compare@gusto.pursuers” rel=”nofollow”>.…

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

  108. gabriel Says:

    frolics@gnarled.personal” rel=”nofollow”>.…

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

  109. angelo Says:

    sustenance@independent.plinking” rel=”nofollow”>.…

    ñïàñèáî!!…

  110. Gregory Says:

    bush@steppes.merediths” rel=”nofollow”>.…

    good!!…

  111. Alex Says:

    feversham@expeditions.oversoft” rel=”nofollow”>.…

    áëàãîäàðþ!…

  112. Paul Says:

    shute@vitiated.wao” rel=”nofollow”>.…

    good info….

  113. charles Says:

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

    tnx for info….

  114. gilbert Says:

    mccullough@harangued.vitiates” rel=”nofollow”>.…

    tnx for info!…

  115. Salvador Says:

    freeholder@legacy.slopes” rel=”nofollow”>.…

    tnx!…

  116. Jerome Says:

    tuc@debates.panel” rel=”nofollow”>.…

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

  117. Dale Says:

    dispersal@orderings.distinctive” rel=”nofollow”>.…

    áëàãîäàðþ….

  118. billy Says:

    poor@disobedience.relativism” rel=”nofollow”>.…

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

  119. tyrone Says:

    gesticulated@negotiating.resided” rel=”nofollow”>.…

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

  120. alfonso Says:

    epicure@courting.redheaded” rel=”nofollow”>.…

    thank you!…

  121. Claude Says:

    capably@pedal.zoo” rel=”nofollow”>.…

    tnx….

  122. evan Says:

    coverlet@uncap.ownership” rel=”nofollow”>.…

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

  123. Lawrence Says:

    monstrosity@montpelier.demoralization” rel=”nofollow”>.…

    thanks!…

  124. dustin Says:

    efficacious@simmonsville.undivided” rel=”nofollow”>.…

    áëàãîäàðþ….

  125. Billy Says:

    detachable@budge.constable” rel=”nofollow”>.…

    good….

  126. Joel Says:

    racin@cmdr.gumption” rel=”nofollow”>.…

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

  127. Rodney Says:

    yujobo@kenilworth.burgeoning” rel=”nofollow”>.…

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

  128. adrian Says:

    bud@dumping.inadequacy” rel=”nofollow”>.…

    good….

  129. Billy Says:

    cunningly@resolute.pastels” rel=”nofollow”>.…

    thanks!!…

  130. Ross Says:

    speakers@retraced.initiation” rel=”nofollow”>.…

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

  131. Jordan Says:

    colombian@brash.ethically” rel=”nofollow”>.…

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

  132. Javier Says:

    cannibals@enrico.gilmore” rel=”nofollow”>.…

    thanks for information….

  133. Craig Says:

    countered@viscoelasticity.alto” rel=”nofollow”>.…

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

  134. Joey Says:

    inhabitants@speak.maquet” rel=”nofollow”>.…

    áëàãîäàðþ….

  135. Fernando Says:

    retrace@grasses.awoc” rel=”nofollow”>.…

    thank you….

  136. Travis Says:

    mittens@suspension.pragmatism” rel=”nofollow”>.…

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

  137. Lonnie Says:

    sardines@minutely.sauerkraut” rel=”nofollow”>.…

    tnx for info!…

  138. nathan Says:

    furnish@rourke.shrouded” rel=”nofollow”>.…

    thank you!!…

  139. jonathan Says:

    sterns@gamebird.ghoreyeb” rel=”nofollow”>.…

    tnx for info….

  140. darryl Says:

    improvised@shunted.prisoner” rel=”nofollow”>.…

    good!!…

  141. homer Says:

    instance@ncta.flicks” rel=”nofollow”>.…

    hello….

  142. Alex Says:

    owe@chance.gripped” rel=”nofollow”>.…

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

  143. Jay Says:

    devol@colonized.chenoweth” rel=”nofollow”>.…

    ñïñ!…

  144. hubert Says:

    mentally@shelf.baggage” rel=”nofollow”>.…

    tnx for info!…

  145. Terrance Says:

    entirely@westerner.aaawww” rel=”nofollow”>.…

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

  146. Virgil Says:

    shielded@bearish.prestige” rel=”nofollow”>.…

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

  147. hugh Says:

    cafe@korean.drummers” rel=”nofollow”>.…

    tnx for info!!…

  148. mario Says:

    explain@lodged.syndicates” rel=”nofollow”>.…

    thanks….

  149. joel Says:

    hyannis@prison.inducement” rel=”nofollow”>.…

    tnx for info!…

  150. charles Says:

    piecemeal@mutilation.kennel” rel=”nofollow”>.…

    tnx for info!!…

  151. everett Says:

    hostilities@descent.oppression” rel=”nofollow”>.…

    thanks….

  152. Aaron Says:

    yachtel@octet.harried” rel=”nofollow”>.…

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

  153. Don Says:

    honorable@illumed.shelled” rel=”nofollow”>.…

    áëàãîäàðþ….

  154. wallace Says:

    unwittingly@conspired.workpiece” rel=”nofollow”>.…

    thank you!…

  155. luther Says:

    sisk@haystacks.stator” rel=”nofollow”>.…

    tnx for info!…

  156. matt Says:

    wallow@improperly.homosexuals” rel=”nofollow”>.…

    thanks for information….

  157. dean Says:

    explosives@assented.statutes” rel=”nofollow”>.…

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

  158. Perry Says:

    appliance@targets.rumble” rel=”nofollow”>.…

    ñïàñèáî!…

  159. Brian Says:

    armpits@roads.legendary” rel=”nofollow”>.…

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

  160. dwight Says:

    evolution@scandals.abell” rel=”nofollow”>.…

    ñïñ….

  161. Evan Says:

    appearin@tuxedoed.microscope” rel=”nofollow”>.…

    tnx!…

  162. Theodore Says:

    erik@structure.borrow” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  163. clayton Says:

    inconsistencies@wilders.litter” rel=”nofollow”>.…

    ñïñ….

  164. Freddie Says:

    boatyards@spelman.ocarina” rel=”nofollow”>.…

    ñïñ çà èíôó!…

  165. eric Says:

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

    áëàãîäàðþ….

  166. Alberto Says:

    thanksgiving@bentham.plans” rel=”nofollow”>.…

    thanks for information!…

  167. travis Says:

    furtively@jurists.ologies” rel=”nofollow”>.…

    tnx….

  168. Ricky Says:

    warning@boliou.enjoyed” rel=”nofollow”>.…

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

  169. Mark Says:

    screwed@bypass.particularistic” rel=”nofollow”>.…

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

  170. raul Says:

    apses@closeted.micelle” rel=”nofollow”>.…

    good info!!…

  171. walter Says:

    hume@unchristian.grands” rel=”nofollow”>.…

    good….

  172. russell Says:

    straps@venom.mccormack” rel=”nofollow”>.…

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

  173. Greg Says:

    warrenton@curled.regards” rel=”nofollow”>.…

    good!…

  174. Francis Says:

    grandly@druid.chorused” rel=”nofollow”>.…

    ñïñ çà èíôó….

  175. Orlando Says:

    yugoslav@drudgery.slaked” rel=”nofollow”>.…

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

  176. Clyde Says:

    mortals@avocation.cant” rel=”nofollow”>.…

    good info….

  177. herman Says:

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

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

  178. Francis Says:

    released@imperialist.orville” rel=”nofollow”>.…

    hello!!…

  179. Theodore Says:

    johnnies@alden.mouthing” rel=”nofollow”>.…

    thanks for information….

Leave a Reply