利用acrobat sdk提取pdf文檔內容
廣告:
0x00 背景
HackingTeam泄漏事件影響頗大,415.77G的內容大多是郵件內容,分析起來比較麻煩,因而被大多數人忽略。網上有很多郵件分析的文章HT郵件分析,主要是針對郵件關聯進行分析,若對郵件內容進行分析則需提取郵件附件中的內容,再針對內容做進一步分析。本文背景其實與上文無關,只是借此提升逼格,下面將介紹如何利用acrobat SDK提取pdf文檔內容。
0x01 acrobat導入
只要安裝了Adobe Acrobat,就能在其安裝目錄下找到acrobat.tlb,其中包含了adobe公司提供的接口,可對pdf進行各種操作參考文檔,使用類向導將其導入。
提取文本內容需導入CAcroApp、CAcroAVDoc、CAcroAVPageView、CAcroPDPage、CAcroPDTextSelect、CAcroHiliteList。
0x02 提取文檔內容
首先需要”打開”pdf,核心代碼如下:
CAcroApp *pAcrpApp = new CAcroApp;
COleException e;
pAcrpApp->CreateDispatch("AcroExch.App",&e);
CAcroAVDoc *pAvdoc = new CAcroAVDoc;
pAvdoc->CreateDispatch("AcroExch.AVDoc",&e);
//打開pdf,其中PDFName為全路徑
if (!pAvdoc->Open(PDFName,NULL))
{
printf("open pdf failed");
...
return 0;
}
打開文檔后,通過pAvdoc可選擇頁數(默認為第一頁),創建高亮板(CAcroHiliteList),將選擇頁數的內容加入高亮板,然后就可以從中提取出該頁的內容,核心代碼如下:
CAcroAVPageView pageView;
CAcroPDPage page;
CAcroPDTextSelect* textSelect = new CAcroPDTextSelect;
CAcroHiliteList* hilite = new CAcroHiliteList;
long selectionSize;
pageView.AttachDispatch(pAvdoc->GetAVPageView(),TRUE);
hilite->CreateDispatch("AcroExch.HiliteList");
if (hilite)
{
//設置為第一頁
pageView.GoTo(0);
/*
這里是設置高亮板的大小
由于沒有找到如何在設置高亮板前獲取該頁內容長度的方法,所以采用設置成極大的長度
如有朋友知道方法,歡迎提出相互學習
*/
hilite->Add(0,4000);
page.AttachDispatch(pageView.GetPage(), TRUE);
textSelect->AttachDispatch(page.CreateWordHilite(hilite->m_lpDispatch));
pAvdoc->SetTextSelection(textSelect->m_lpDispatch);
selectionSize = textSelect->GetNumText();
if (selectionSize && strText.GetLength() < 4000)
{
for(int i = 0;i < selectionSize;i ++)
{
strText += textSelect->GetText(i);
}
}
}
要完整提取出文檔中的全部內容,可通過CAcroPDDoc獲取pdf總頁數,然后利用pageView.GoTo循環每一頁,下面給出的完整工程將不包含此部分代碼。
廣告: