-
-
[原创]Foxit Phantom的完美破解
-
发表于: 2009-12-8 11:31 32814
-
【破解作者】 TopmenC
【使用工具】 OD
【软件名称】Foxit Phantom1.0.2.1123
【软件简介】 Foxit Phantom是一个商业级的PDF应用软件,是一个集创建,阅读和编辑PDF为一体的新工具.
【下载地址】http://www.skycn.com/soft/57351.html
【破解声明】只是感兴趣,没有其他目的。失误之处敬请赐教!
---------------------------------------------------------------------------------------------------
前言
这个软件可以说程序员技术很高,是用了Keyfile保护和重启验证的。遗憾的是,他忽略了一个细节,才会使软件轻松的被破解了。
破解过程:
PEID查壳:
没壳的,可以省去了一步。
程序一运行就会出现这个试用的窗口。
我们需要注意的是:在注册的地方
懂点英文都应该看明白这个东西是什么意思了,大概的意思是说有key file的保护。
我们看一下程序的目录
只不过是生成fpmkey.txt的这样的一个文件,但是如果我们点keep Evaluating 的话,或者是注册错误的话,这个文件就会自动的删除了。
这个文件里面也没有内容,只不过是我们的一个注册码罢了。
在这如果是用原程序来调试的话,会很麻烦的。我们就直接用Registraion.exe这个文件来调试了。
OD 载入,我们会发现这个程序如要注册错误的话,会提示一个对话框,我们则可以用消息断点来下断。
右边的堆栈里
取消断点,Alt+F9返回,
在段首下断,右键,在反汇编窗口中跟随,
看到了吧,如果是注册错误的话,就会自动的原个key文件删除了。
分析一下这个程序段
可以轻松的找一个跳可以跳过这个错误的提示。
下面就是注册的了,我们随便的输入一个注册码,都是提示正确的。
看到了吧,这是重启验证的。我们把保存好的文件改名为程序原来的那个名称,也就是改名为Registraion.exe。
现在我们来看一下原来的程序,也就是自动安装放在桌面上的Foxit Phantom.exe。
我们注册一下,也同样是出现这一个错误的提示
而且在关于的里面
依然是未注册的。
这也是程序的历害的地方了吧。
花了几个小来搞都还是不行,如果有高手看到的话,麻烦告诉一声,非常感谢。
幸运的是,经过几小时的努力,我找到一个新的突破口,而且是很致命的。
我们从程序的开始的地方,一直往下面慢慢走,一直到出现这个
在这里用的方法就是把这个试用的窗口给跳过去就行的了。
我们慢慢的回溯代码。
0044DBE9 . 55 push ebp
0044DBEA . 50 push eax
0044DBEB . E8 20331900 call Foxit_Ph.005E0F10
0044DBF0 . 83C4 0C add esp,0C
0044DBF3 . 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0044DBF7 . E8 84661800 call Foxit_Ph.005D4280
0044DBFC . 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
0044DC00 . 889C24 9C020000 mov byte ptr ss:[esp+29C],bl
0044DC07 . E8 74661800 call Foxit_Ph.005D4280
0044DC0C . C74424 1C E096A5>mov dword ptr ss:[esp+1C],Foxit>
0044DC14 . 6A 20 push 20 ; /Arg3 = 00000020
0044DC16 . 8D5424 2C lea edx,dword ptr ss:[esp+2C] ; |
0044DC1A . B3 07 mov bl,7 ; |
0044DC1C . 57 push edi ; |Arg2
0044DC1D . 52 push edx ; |Arg1
0044DC1E . 8D4C24 28 lea ecx,dword ptr ss:[esp+28] ; |
0044DC22 . 889C24 A8020000 mov byte ptr ss:[esp+2A8],bl ; |
0044DC29 . E8 12051F00 call Foxit_Ph.0063E140 ; \Foxit_Ph.0063E140
0044DC2E . 8B00 mov eax,dword ptr ds:[eax]
0044DC30 . C68424 9C020000 >mov byte ptr ss:[esp+29C],8
0044DC38 . 85C0 test eax,eax
0044DC3A . 74 05 je short Foxit_Ph.0044DC41
0044DC3C . 83C0 0C add eax,0C
0044DC3F . EB 05 jmp short Foxit_Ph.0044DC46
0044DC41 > B8 04CFD100 mov eax,Foxit_Ph.00D1CF04
0044DC46 > 6A FF push -1
0044DC48 . 50 push eax
0044DC49 . 8D4424 1C lea eax,dword ptr ss:[esp+1C]
0044DC4D . 50 push eax
0044DC4E . E8 9D6E1800 call Foxit_Ph.005D4AF0
0044DC53 . 83C4 0C add esp,0C
0044DC56 . 8B00 mov eax,dword ptr ds:[eax]
0044DC58 . C68424 9C020000 >mov byte ptr ss:[esp+29C],9
0044DC60 . 85C0 test eax,eax
0044DC62 . 74 05 je short Foxit_Ph.0044DC69
0044DC64 . 83C0 0C add eax,0C
0044DC67 . EB 05 jmp short Foxit_Ph.0044DC6E
0044DC69 > B8 00CFD100 mov eax,Foxit_Ph.00D1CF00
0044DC6E > 50 push eax
0044DC6F . 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0044DC73 . E8 6A6A5700 call Foxit_Ph.009C46E2
0044DC78 . 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0044DC7C . C68424 9C020000 >mov byte ptr ss:[esp+29C],8
0044DC84 . E8 F7651800 call Foxit_Ph.005D4280
0044DC89 . 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
0044DC8D . 889C24 9C020000 mov byte ptr ss:[esp+29C],bl
0044DC94 . E8 E7651800 call Foxit_Ph.005D4280
0044DC99 . 51 push ecx
0044DC9A . 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0044DC9E . 8BEC mov ebp,esp
0044DCA0 . 896424 18 mov dword ptr ss:[esp+18],esp
0044DCA4 . 6A FF push -1
0044DCA6 . E8 4530FDFF call Foxit_Ph.00420CF0
0044DCAB . 50 push eax
0044DCAC . 55 push ebp
0044DCAD . E8 3E951800 call Foxit_Ph.005D71F0
0044DCB2 . 83C4 0C add esp,0C
0044DCB5 . E8 B60B0000 call Foxit_Ph.0044E870
0044DCBA . 83C4 04 add esp,4
0044DCBD . E8 AEE2FEFF call Foxit_Ph.0043BF70
0044DCC2 . 85C0 test eax,eax
0044DCC4 . 8B4424 64 mov eax,dword ptr ss:[esp+64]
0044DCC8 . 0F85 49010000 jnz Foxit_Ph.0044DE17 ; 如果这个跳,则OVER
0044DCCE . 85C0 test eax,eax
0044DCD0 . 75 51 jnz short Foxit_Ph.0044DD23 ; 如果这个跳,则是试用户
0044DCD2 . 8B4424 68 mov eax,dword ptr ss:[esp+68]
0044DCD6 . 85C0 test eax,eax
0044DCD8 . 75 49 jnz short Foxit_Ph.0044DD23 ; 如果这个跳,则是试用户
0044DCDA . 6A 00 push 0
0044DCDC . 8D8C24 90000000 lea ecx,dword ptr ss:[esp+90]
0044DCE3 . E8 68F30300 call Foxit_Ph.0048D050
0044DCE8 . 8D8C24 8C000000 lea ecx,dword ptr ss:[esp+8C]
0044DCEF . C68424 9C020000 >mov byte ptr ss:[esp+29C],0A
0044DCF7 . E8 C9745700 call Foxit_Ph.009C51C5 ; 出现一个窗口
0044DCFC . 8D8C24 E8000000 lea ecx,dword ptr ss:[esp+E8]
0044DD03 . C68424 9C020000 >mov byte ptr ss:[esp+29C],0B
0044DD0B . E8 10EF1E00 call Foxit_Ph.0063CC20
0044DD10 . 8D8C24 8C000000 lea ecx,dword ptr ss:[esp+8C]
0044DD17 . 889C24 9C020000 mov byte ptr ss:[esp+29C],bl
0044DD1E . E8 68705700 call Foxit_Ph.009C4D8B
0044DD23 > 57 push edi
0044DD24 . E8 BB255700 call Foxit_Ph.009C02E4
0044DD29 . 83C4 04 add esp,4
0044DD2C . B9 7019D200 mov ecx,Foxit_Ph.00D21970
0044DD31 . C705 6819D200 01>mov dword ptr ds:[D21968],1
0044DD3B . 68 744BB900 push Foxit_Ph.00B94B74 ; UNICODE "ANNOT,TEXTVIEW,FORMFILL,FORMDES,CREATOR,ORGANIZER,SECURITY,DIGITALSIGNATURE"
0044DD40 . E8 2B671800 call Foxit_Ph.005D4470
0044DD45 . 68 E44FB900 push Foxit_Ph.00B94FE4 ; UNICODE "FPMTEMP"
0044DD4A . B9 7819D200 mov ecx,Foxit_Ph.00D21978
0044DD4F . E8 1C671800 call Foxit_Ph.005D4470
0044DD54 . 68 C847B900 push Foxit_Ph.00B947C8
0044DD59 . B9 7419D200 mov ecx,Foxit_Ph.00D21974
0044DD5E . E8 0D671800 call Foxit_Ph.005D4470
0044DD63 . 68 C44FB900 push Foxit_Ph.00B94FC4 ; UNICODE "Evaluation user"
0044DD68 . B9 6C19D200 mov ecx,Foxit_Ph.00D2196C
0044DD6D . E8 FE661800 call Foxit_Ph.005D4470
0044DD72 . 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
0044DD76 . C74424 1C E096A5>mov dword ptr ss:[esp+1C],Foxit>
0044DD7E . C68424 9C020000 >mov byte ptr ss:[esp+29C],4
0044DD86 . E8 C0675700 call Foxit_Ph.009C454B
0044DD8B . 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
0044DD8F . C68424 9C020000 >mov byte ptr ss:[esp+29C],3
0044DD97 . E8 AF675700 call Foxit_Ph.009C454B
0044DD9C . 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
经过漫长的分析,终于找到了一个关键的跳了。
我们运行保存后的文件,那个试用的窗口已经不在,而且关于里面也不是试用户的了。
现在来看一下是不是完美破解的了。
现在的时间是:
把系统的时间调后一些,调到2010年
我们来运行一下原来的程序,会出现这样的一个对话框
而我们破解的那个则是能正常的运行的,而且已经什么限制也没有了。
[总结]
方法并不是唯一的,只要我们多去跟踪和分析。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课