c# pdf library free : Modify pdf metadata application software utility azure windows wpf visual studio thesis_v1.61-part219

1.2 PDF architecture
PDF is one of page description languages (PDL), which is a group of formats used to 
describe the appearance of a printed page in higher level than a simple output bitmap. The 
PDF format consists of 3 separate technologies:
• PostScript: is a PDL language a subset of which is used in PDF to generate the 
graphics and layout of the document. 
• Font-Embedding system: embedding fonts into the document allows documents to be 
transferred across platforms or systems with ease.
• Storage system: a structured system which groups all the elements, compresses the 
data as needed and combines them into a single file.
Adobe PostScript is a PDL language, but unlike PDF, it is considered a fully fledged 
programming language. It has distinct disadvantages compared to PDF when it comes to 
viewing documents – most importantly the fact that as an interpretive programming 
language with an implicit global state, any instructions related to a given page in a PostScript 
file can change the appearance of any of the following pages. That means that in order to 
view a page with a PostScript viewer all previous pages need to be processed sequentially 
before displaying target page. Ordinarily, PDF code is generated from a source PostScript file 
by collecting and tokenizing the output graphical commands, gathering any related files, 
fonts or graphics and then compressing everything into a single file. 
1.3 PDF file structure
The internal framework of a basic PDF file is constructed of following four main elements:
• A simple one line header indicating which version of the PDF specification was used 
to  build the file.
• Body that contains all the objects that make up the file.
• Cross-reference table that contains all links to the indirect objects in the file.
• A trailer that indicates the location of the cross-reference table and few additional 
special objects within the body of the file.
11
Modify pdf metadata - add, remove, update PDF metadata in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Allow C# Developers to Read, Add, Edit, Update and Delete PDF Metadata
remove metadata from pdf; add metadata to pdf file
Modify pdf metadata - VB.NET PDF metadata library: add, remove, update PDF metadata in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Enable VB.NET Users to Read, Write, Edit, Delete and Update PDF Document Metadata
batch edit pdf metadata; pdf xmp metadata editor
Figure 1.1: Basic structure of a PDF file
1.3.1 File header
The first line of a PDF document is always a header of a form %PDF-1.X, where X is a 
number between 0 and 7. The header indicates the file is indeed a PDF document and also 
the version used to build it. However, beginning with PDF 1.4, if present,  the Version entry 
found in the document's catalog dictionary will be used to determine the version to which 
the file conforms, instead of the header. If the document contains binary data (most PDF files 
do), the header line is followed by a comment line of at least 4 characters. This is to ensure 
correct behavior of file transfer applications that try to determine whether they should treat 
the file content as text or binary data.
1.3.2 File body
The body of a PDF file consists of  a series of indirect objects such as fonts, images, 
bookmarks and so on. The objects are called indirect, because they are labeled (they can be 
referred to by other objects). Beginning with PDF 1.5, the body can also include object 
streams, where each stream contains a sequence of indirect objects. There are eight types of 
objects: booleans, numeric objects, strings, names, arrays, dictionaries, streams and null.
1.3.2.1 Boolean objects 
Boolean objects in PDF documents are keywords true and false, where each represents their 
respective logical value.
12
How to C#: Modify Image Metadata (tag)
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB.NET Tiff, VB.NET Imaging, VB.NET OCR, VB How to C#: Modify Image Metadata (tag).
acrobat pdf additional metadata; analyze pdf metadata
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
VB.NET PDF - How to Modify PDF Document Page in VB.NET. VB.NET Guide for Processing PDF Document Page and Sorting PDF Pages Order.
read pdf metadata; pdf metadata reader
1.3.2.2 Numeric objects
There are two subtypes of numeric objects – integer and real. An integer is written as one or 
more decimal digits, optionally preceded by a sign (ie. 5616, +9, -59). The value is interpreted 
as a signed integer and converted into integer object. Similarly, a real number is written as 
one or more decimal digits with a period (leading, trailing or embedded), optionally with a 
sign (ie. 22.7, -8.95 +.005). Such value is interpreted as a real number and converted into real 
object. The range and precision of these numbers depend on the machine the reader is 
running.
1.3.2.3 String objects
String objects are made of a series of zero or more bytes, which can be written in two 
different ways. Literal strings are written as one or more characters enclosed in parentheses. 
The string can contain any characters with three exceptions – unbalanced left parenthesis, 
unbalanced right parenthesis and the backslash. A balanced pair of parenthesis can be 
present within a string. The backslash character represents an escape character. The character 
following the backslash determines it's interpretation:
\n
Line feed
\r
Carriage return
\t
Horizontal tab
\b
Backspace
\f
Form feed
\(
Left parenthesis
\)
Right parenthesis
\\
Backslash
\ddd Character code ddd (one, two or three octal digits)
The \ddd sequence is used for representing outside the printable ASCII character  set  (ie. 
(\053) is a single character string – a plus sign). A backslash character at the end of a line 
indicates that the string continues on the following line. In this case, the PDF reader ignores 
the string and the following end-of-line marker and treats the string as if it wasn't split. For 
instance, the following two strings are the same:
(Hello world!)
(Hello \
World!)
Hexadecimal strings are written as a sequence of pairs of hexadecimal digits encoded as 
ASCII characters, enclosed in angle brackets. Each pair then represents one byte of the string. 
When the number of hexadecimal digits within a string is odd, it is automatically assumed 
the last digit is a 0 (ie. <901FA> is a 3 byte string with hexadecimal values 90 1F A0). This 
form is useful for including binary data within a PDF file. Special characters line feed, 
carriage return, form feed, horizontal tab and space are ignored.
13
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete Metadata. C# PDF - Modify PDF File and Page Using C#.
endnote pdf metadata; read pdf metadata online
C# Raster - Modify Image Palette in C#.NET
in PDF, C#.NET edit PDF bookmark, C#.NET edit PDF metadata, C#.NET VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET C# Raster - Modify Image Palette in C#.NET.
edit pdf metadata; add metadata to pdf
1.3.2.4 Name objects
Introduced in PDF 1.2, name objects are defined by a sequence of any characters (with the 
exception of null). Within PDF documents, the sequence is preceded by a solidus sign (/), 
which is not a part of the name, but indicates that following characters represent a name. The 
sequence is unique to each object, meaning that two objects with identical sequences of 
characters in fact represent the same object. It also doesn't have any internal structure, the 
characters are not considered to be  individual elements. Any regular characters in a name 
are written as themselves or by using it's 2-digit hexadecimal code, preceded by a number 
sign (#). Non-regular characters (and number sign itself) are always represented by a number 
sign followed by their 2-digit hexadecimal code. Examples of name syntax and 
corresponding result is following:
/Hello
Hello
/C#23
C#
/A#42
AB
1.3.2.5 Array objects
Array objects are one dimensional, sequential collections of objects, written as sequence of 
objects enclosed in square brackets. PDF arrays are heterogeneous, meaning they can contain 
any combination of objects, including other arrays (ie. [/Hello  (World)  123.45]). 
1.3.2.6 Dictionary objects
Dictionary objects are associative tables consist of pairs of objects. Each entry consists of a 
key (first element) and a value (second element). The key is always a name object, but the 
value can be any object, including another dictionary. Because they collect and bind together 
the attributes of more complex objects (ie. font or a page of the document), dictionary objects 
are the cornerstone of any PDF document. They are written as a sequence key-value entries 
enclosed in double angle brackets (<< >>). Following is an example of a dictionary object:
<<  /Type Hello
/Subtype World
/SampleItem 12.125
/Subdictionary  <<  /SubItem1 false
/SubItem2 (a string)
<<
<<
Entries can contain null values (null object) and such entries are treated as if they don't exist. 
It is common to include Type and Subtype entries for more complex objects, in order to 
describe what kind of object the dictionary identifies. 
14
How to C#: Modify Image Bit Depth
text in PDF, C#.NET edit PDF bookmark, C#.NET edit PDF metadata, C#.NET VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel How to C#: Modify Image Bit Depth.
pdf metadata online; pdf remove metadata
How to C#: Overview of Using XImage.Raster
See this C# guide to learn how to use RasterEdge XImage SDK for .NET to edit the image file Metadata, Color Palette and modify the compression method.
add metadata to pdf programmatically; batch update pdf metadata
1.3.2.7 Stream objects
A stream object is a sequence of bytes, which may be of unlimited length. Stream objects 
have the following format:
dictionary
stream
x bytes
endstream
The stream always begins with a dictionary, which specifies length of the data that make up 
the stream (this is to retain the ability to differentiate streams beginning with line feed), 
followed by the keyword stream and end-of-line marker – either line feed or carriage return 
and line feed. Next come the sequence of zero or more bytes that are the contents of the 
stream, followed by another end-of-line marker and the keyword endstream. Beginning with 
PDF 1.2 the data may also be contained in an external file. In this case, the dictionary 
specifies the file and any bytes between the keywords stream and endstream are ignored.
Stream dictionaries may contain several different entries. Entry Length, which 
indicates the length of the data to be streamed, is mandatory. Optional entries are Filter, 
DecodeParms, F, Ffilter, FdecodeParms, DL. The significance of the values in dictionary entries is 
following:
• Length: specifies the number of bytes between the keywords stream and endstream, 
excluding the end-of-line marker just before endstream.
• Filter: specifies the name of the filter that should be used to process the stream data. It 
is possible to use an array of filters – they will be applied in the specified order.
• DecodeParms: the value is either a dictionary or an array of dictionaries. The 
dictionary contains parameters to be used by the filter specified in Filter entry. In case 
of multiple filters, an array of dictionaries is used, where each filter has one entry 
(null entry is used for filters that have no parameters).
• F: specifies the file containing the stream data. If this entry is present, all bytes 
between stream and endstream keyword shall be ignored.
• FFilter: specifies the name of a filter used to decode the data in external file. Array of 
names is used for more filters.
• FdecodeParms: specifies the parameter dictionary to be used by the filter from FFilter 
entry. An array of dictionaries is used for more filters.
• DL: introduced in PDF 1.5, the entry represents how many bytes are in the decoded 
stream. However, this value is not reliable, because for many stream filters it is not 
possible to determine it precisely.
15
How to C#: Modify Color and Contrast
How to C#: Modify Color and Contrast. Overview for How to Modify Color and Contrast. Overview. By two. Steps to Modify Color and Contrast.
adding metadata to pdf; pdf metadata viewer online
VB.NET PDF Library SDK to view, edit, convert, process PDF file
NET developers can redact, delete, view and save PDF metadata. added to a specific location on PDF file page addition, you can easily create, modify, and delete
extract pdf metadata; remove metadata from pdf
1.3.2.8 Null object
The null object, denoted by the keyword null,  is unequal in type to any other object. Indirect 
object references to any nonexistent object are the same as null object. When specified as a 
value within a dictionary object, the value should be treated as if it doesn't exist.
1.3.3 Cross-reference table
The cross-reference table consists of links to all the indirect objects in a PDF file. Each line of 
the table specifies the location of a single object within the body of the document. The objects 
can be accessed randomly, which means that it isn't necessary to read the entire file when 
attempting to locate a particular object. Beginning with PDF 1.5 the cross-reference 
information (or part of it) may also be contained in cross-reference streams. 
The table consists of one or more cross-reference sections. Initially, the table has a 
single section and each time the file is incrementally updated one new section is created. The 
cross-reference section begins with a line containing the keyword xref, followed by one or 
more cross-reference subsections. If a file has never been incrementally updated it contains a 
single subsection numbered 0. The advantage of using the subsection structure is that a new 
cross-reference section can simply be added when we delete or add new objects.
The subsections begin with a line of a form 'X Y', where X is a number of the first 
object in the subsection and Y is the number of entries in the subsection. This line is then 
followed by the cross-reference entries, one on each line, each 20 bytes long. There are two 
types of entries: one indicating objects that are in use and another for deleted objects. Both 
entry types have similar formats: 
[10-digit number] [5-digit number] [f or n] [2 end-of-line characters]
The entry starts with 10-digit number denoting byte offset in the decoded stream (padded 
with leading zeros if needed) for objects that are in use or object number of the next free 
object for a free object entry, followed by a space and 5-digit generation number, then 
separated by another space is character n for objects that are in use or character f  indicating 
free entry. The entry is closed by 2 end-of-line characters. 
The free entries in the cross-reference table form a linked list, where each entry 
specifies the number of the next one. The first entry in the table is always free, has generation 
number 65535 and represents the head of the linked list. Conversely, the tail of the list points 
back to object number 0 (the head of the list). Optionally, the free entries can point back to 
object number zero and have generation number 65535 (they are not a part of the linked 
list).The generation number is initially set to 0 for all entries in the cross-reference table with 
the exception of object number 0. Upon deletion of an indirect object, the corresponding 
entry in the cross-reference table is marked as free and the generation number is incremented 
by 1. The incremented value indicates what generation number should be used next time an 
object with the same object number is created. The maximum value a generation number can 
reach is 65535. Entries that reach the maximum value cannot be reused.
Following is a  simple example of what a cross-reference section of a PDF file might 
look like:
16
C# PDF Library SDK to view, edit, convert, process PDF file for C#
NET allows you to read, add, edit, update, and delete PDF file metadata, like Title In addition, you can easily create, modify, and delete PDF annotations.
embed metadata in pdf; pdf metadata viewer
How to C#: Modify Alpha Channel
Image Access and Modify. Image Information. Metadata(tag) Edit. |. Home ›› XImage.Raster ›› C# Raster: Modify Alpha Channel. PDF in C#, C# convert PDF to HTML
delete metadata from pdf; google search pdf metadata
xref
0 1
0000000000 65535 f
3 1
0000025325 00000 n
23 2
0000025518 00002 n
0000025635 00000 n
30 1
0000025777 00000 n
This example contains a single cross-reference section with five entries in four subsections. 
The first subsection contains a single free entry – object number 0. The second subsection 
contains also a single entry for object in use – object number 3. Following subsection contains 
two objects (number 23 and 24), which are both in use. Generation number of object 23 
indicates that it has been reused twice. Lastly, the fourth subsection contains a single object 
that is in use (object number 30).
1.3.4 File trailer
The trailer section is used to quickly locate the cross-reference table, as well as few 
other special objects. The trailer has the following format:
trailer
<<
key
value
1
...
key
value
n
>>
startxref
[byte offset]
%%EOF
Reading a PDF file entails an unusual concept – the trailer is actually the first thing that is 
read after the header. This is to improve the speed at which the objects can be accessed when 
loading the PDF file. The trailer section is denoted by a keyword trailer on a single line, 
followed by a lines containing key-value pairs enclosed in in double angle brackets – the 
trailer dictionary. The dictionary is followed by two lines. The first one contains the keyword 
startxref and the second one the byte offset from the beginning of the file to the beginning of 
the xref keyword in the last cross-reference section in the decoded stream.
The trailer dictionary can contain following 6 keys:
• Size: indicates the total number of entries in the cross-reference table.
• Prev: only used when the file has more than one cross-reference section (possible in 
17
updated files). The value indicates the byte offset from beginning of the file to the 
beginning of the previous cross-reference section in the decoded stream.
• Root: the catalog dictionary for the PDF document. The catalog contains information 
how the document should be displayed on the screen, as well as references to objects 
that define the document's contents, outline and other attributes.
• Encrypt: contains the document's encryption dictionary.
• Info: contains the document's information dictionary, which contains metadata for the 
document.
• ID: a file identifier consisting of two-byte string that form an array.
1.3.5 Incremental updates
One of the advantages the PDF format offers is the use of incremental updates. Whenever a 
PDF file is updated, the original contents remain untouched, instead the changes are 
appended to the end of the file.
Figure 1.2: Incrementally updated PDF file
This way, small changes made to a very large document can be saved very quickly. It also 
means it is possible to save changes to documents in a situation where we cannot overwrite 
contents of the edited file (ie. when editing a document via HTTP connection). Incremental 
file structure is shown in figure 2.2. When a file is updated, the newly added cross-reference 
18
section only consists of entries for objects that have been changed, replaced or deleted. 
Objects that have been deleted are not actually removed from the file. They remain 
unchanged within the file, but the corresponding cross-reference entries mark them as 
deleted. The newly added trailer is the same as the previous trailer, with the exception of the 
Prev entry (if there is one). A new Prev entry that points to the location of the previous cross-
reference section is added instead. 
1.3.6 Object streams
Introduced in PDF 1.5, an object stream is a stream object that contains sequence of indirect 
objects. The purpose of object streams is to allow indirect objects to make use of PDF stream 
compression filters. Not all objects can be stored this way – stream objects, objects with 
generation number greater than zero, a document's encryption dictionary and an object 
representing the value of the Length entry in an object stream dictionary cannot be stored in 
an object stream. 
The stream dictionary of an object stream contains all the regular entries, as well as 
few additional ones:
• Type: is a required entry that indicates what object the dictionary describes.
• Size: has value equal to the highest object number in the section plus one. Required 
entry.
• Index: is an optional entry consisting of an array of integers that contains a pair of 
integers for each subsection in the section. The first integer is the first object number 
in the subsection and the second one is the number of entries in the subsection.
• Prev: is used only when the file has more than one cross-reference stream, it serves 
the same function as Prev entry in the trailer dictionary (indicates byte offset from the 
beginning of the file to the beginning of the previous cross-reference stream). 
• W: is a required entry representing the size of the fields in a single cross-reference 
entry.
19
Chapter 2
Vulnerabilities and exploits
Use of vulnerabilities in Adobe Acrobat and Adobe Reader as an attack vector first appeared 
in early 2007. In recent years, PDF gained much popularity and became a de facto standard 
for sharing of electronic documents – many PCs are even shipped with pre-installed Adobe 
Reader. Moreover, due to the way the format is designed, it not only has very large 
vulnerable surface, but also provides features that help malware authors to evade detection 
by anti-virus software. All of these are part of the reason why PDF has also been receiving 
more and more attention from malware authors lately. 
This chapter describes malicious 
document distribution channels, lists known vulnerabilities in Adobe Reader and Acrobat 
and discusses obfuscation techniques used in PDF files.
2.1 PDF as an attack vector
Before going into specific vulnerabilities and exploits, it is important to understand how 
exactly can the act of opening a malicious PDF document can lead to arbitrary code being 
executed on the victim machine. It should be noted that the vulnerabilities don't occur within 
the PDF format itself, but rather in the implementation of various PDF browsers. The 
workflow of infection via PDF document is shown in figure 2.2. 
Figure 2.1: Incrementally updated PDF file
When a user opens a malicious file in a vulnerable browser, the code inside attempts to insert 
a certain sequence of bytes in previously determined location in the PDF reader's memory. 
The technique of inserting data into memory is called heap spraying [26] and the malicious 
piece of code being inserted is called shellcode. Vast majority of PDF related exploits uses 
JavaScript to perform heap spray. In this case, the desired effect can be achieved by 
concatenating a single character string with itself many times, growing it exponentially. The 
result of each iteration is then copied together with desired shellcode into an array. This way, 
it is assured that sufficient amount of memory has been sprayed to successfully carry on with 
the infection process.
Shellcode in this instance represents a small segment of code, usually written in machine 
code. It serves as a payload for the exploit and typically downloads and executes another 
malicious program (e.g. a trojan), thus finishing the infection process. The term itself 
originally described code that spawned a unix command shell, but has since been accepted 
as a general term for code that allows an attacker to gain control over the victim machine 
after a vulnerability has been successfully exploited.
20
Documents you may be interested
Documents you may be interested