PDFLib license key 过期的问题


今天突然要用PDFLib完成一项任务:下载到的pdf文件里面被插入了一些广告,打开这些广告页面速度很慢,我要做的就是将广告页面从文档中抽掉.结果发现之前能用的序列号已经过期了.

程序输出:

PDFlib exception occurred:
[1988] PDF_set_parameter: License key expired

pdflib的文档从没提到过期的问题.我采用更改系统时间,或者生成新的序列号的办法都不行.于是调出IDA,跟踪,观察,结果发现问题出在序列号的第12和第13个字符,这里有一个没有进行算法提取的函数:

.text:553C755B                 lea     ecx, [esp+1D0h+var_1B0; 未访问的局部变量
.text:553C755F                 push    ecx
.text:553C7560                 call    sub_553AC7B0    ; 填充18h个字节的内容
.text:553C7565                 mov     eax, [esp+1D4h+var_198
.text:553C7569                 lea     edx, [eax+eax*2
.text:553C756C                 mov     eax, [esp+1D4h+var_19C; Bh
.text:553C7570                 add     esp4
.text:553C7573                 test    esiesi        ; v13_12 48h
.text:553C7575                 lea     eax, [eax+edx*4-4F7h; 48h
.text:553C757C                 jz      short loc_553C759D ; 如果 P1213 是0 ,就可以不考虑上面的调用
.text:553C757E                 cmp     eax34h
.text:553C7581                 jl      short dead15
.text:553C7583                 cmp     eaxesi        ; 如果提示key expired ,此时 eax的值是49h 而esi是48h
.text:553C7583                                         ; 48h对应 p12 p13: 0x
.text:553C7585                 jle     short loc_553C759D ; v6_5
.text:553C7587
.text:553C7587 dead15:                                 ; CODE XREF: ValidateFinalFinal+381j
.text:553C7587                 push    0
.text:553C7589                 push    0
.text:553C758B                 push    0
.text:553C758D                 push    0
.text:553C758F                 push    7C4h
.text:553C7594                 push    edi
.text:553C7595                 call    FireException
.text:553C759A                 add     esp18h

但是目前我只想尽快解决问题,注意到上面的代码中如果p12 p13的值是0,则可以无需关心函数的内部逻辑.将这两个字符设置为0,然后使用这里提到的算法重新生成序列号即可.

char str "w700611-x12000-xyxxxx-CTMWG2-ZXYK22";