- UID
- 3526
注册时间2005-10-6
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
[PDF阅读工具]Foxit Reader v2.2 Build2129 的标志位方式爆破
软件下载: http://www.foxitsoftware.com/
注册限制: 非Pro版本使用工具菜单下的最后4项功能时,会在你的PDF文件中加入它的广告水印。
软件介绍: 一款超一流的PDF浏览、简易修改工具。
将Foxit_Reader.exe文件拖入到OD中后,F9键运行,然后点击[help]菜单中的[Install License Key]这一项,在弹出的注册窗口中随便输入点信息,点击[Register the Key]按钮,弹出了注册错误的对话框。
OK,就从弹出的对话框这里入手,下 BP MessageBoxA 断点后,再次重复上面的步骤,这时程序被断在了User32的领空下,Alt+F9键后,返回到了其自身的领空下,使用F8键走出 3 个call子程序后,便回到了这里:
>>>>>>
(前面代码省略)
00459EBB . E8 D0E10200 call Foxit_Re.00488090 ; 这个call决定了eax的结果
00459EC0 . 83C4 40 add esp, 40
00459EC3 . A3 482B8D00 mov dword ptr [8D2B48], eax
00459EC8 . 85C0 test eax, eax ; eax and eax = 0 ?
00459ECA . 75 1F jnz short Foxit_Re.00459EEB ; 不为0,则成功,跳走
00459ECC . 83CB FF or ebx, FFFFFFFF
00459ECF . 53 push ebx
00459ED0 . 50 push eax
00459ED1 . 68 80080000 push 880
00459ED6 . E8 38F02F00 call Foxit_Re.00758F13
00459EDB . 8B4C24 10 mov ecx, dword ptr [esp+10] ; 走完3个子call后,来到了这里:
00459EDF . 51 push ecx ; /FileName
00459EE0 . FF15 14E57A00 call dword ptr [<&KERNEL32.Delete>; \DeleteFileA
00459EE6 . E9 35010000 jmp Foxit_Re.0045A020
00459EEB > BE 58E38400 mov esi, Foxit_Re.0084E358 ; 来到这里:
(后面代码省略)
>>>>>>
从上面,可以一面了然的发现00459EBB处的call Foxit_Re.00488090很关键,在这里F2键下断后,再次重复上面的步骤,便被断在了这里,然后F7键进入,这时在OD的[信息窗口]中发现调用这个注册Call的地方有两处,即为:[本地调用来自 00423D7E, 00459EBB],而00459EBB这处已经知道,于是转到00423D7E这处,再看看:
>>>>>>
(前面代码省略)
00423D7E |. E8 0D430600 call Foxit_Re.00488090 ; 就是这个call ;在这里同样F2键下断点
00423D83 |. 83C4 24 add esp, 24
00423D86 |. A3 482B8D00 mov dword ptr [8D2B48], eax ; [8D2B48]是关键,存放注册是否成功的标志
00423D8B |. 85C0 test eax, eax ; 若注册成功,不为0
00423D8D |. 5F pop edi
00423D8E 74 55 je short Foxit_Re.00423DE5 ; 为0,则跳走
00423D90 |. 53 push ebx
00423D91 |. 56 push esi
00423D92 |. BE 58E38400 mov esi, Foxit_Re.0084E358 ; ASCII "2006/09/29"
00423D97 |. 8D8424 88000000 lea eax, dword ptr [esp+88]
00423D9E |> 8A10 /mov dl, byte ptr [eax] ; 读入key文件中的日期
00423DA0 |. 8A1E |mov bl, byte ptr [esi] ; 2006/09/29
00423DA2 |. 8ACA |mov cl, dl
00423DA4 |. 3AD3 |cmp dl, bl ; 两日期比较
00423DA6 75 1E jnz short Foxit_Re.00423DC6 ; 不等,跳走(不能跳)
00423DA8 |. 84C9 |test cl, cl ; cl and cl = 0 ?
00423DAA |. 74 16 |je short Foxit_Re.00423DC2 ; 为0,跳走(必须跳)
00423DAC |. 8A50 01 |mov dl, byte ptr [eax+1]
00423DAF |. 8A5E 01 |mov bl, byte ptr [esi+1]
00423DB2 |. 8ACA |mov cl, dl
00423DB4 |. 3AD3 |cmp dl, bl
00423DB6 |. 75 0E |jnz short Foxit_Re.00423DC6
00423DB8 |. 83C0 02 |add eax, 2
00423DBB |. 83C6 02 |add esi, 2
00423DBE |. 84C9 |test cl, cl
00423DC0 |.^ 75 DC \jnz short Foxit_Re.00423D9E
00423DC2 |> 33C0 xor eax, eax
00423DC4 |. EB 05 jmp short Foxit_Re.00423DCB
00423DC6 |> 1BC0 sbb eax, eax
00423DC8 |. 83D8 FF sbb eax, -1
(后面代码省略)
>>>>>>
同样,在00423D7E处F2键下断点,然后Ctrl+F2键,让OD重新载入该程序,这时便被断在了上面的这个call处,F7键进入后,来到这里:
>>>>>>
00488090 8B4C24 04 mov ecx, dword ptr [esp+4]
00488094 81EC 04010000 sub esp, 104
(后面代码省略)
>>>>>>
将上面的代码修改为如下(即位标志位修改):
>>>>>>
00488090 B8 FFFFFFFF mov eax, -1
00488095 C3 retn
00488096 90 nop
00488097 90 nop
00488098 90 nop
00488099 90 nop
(后面保持一样)
>>>>>>
然后两次F8键走出这个call后,回来:
>>>>>>
(前面代码省略)
00423D7E |. E8 0D430600 call Foxit_Re.00488090 ; 已被修改为上面的代码▲
00423D83 |. 83C4 24 add esp, 24
00423D86 |. A3 482B8D00 mov dword ptr [8D2B48], eax ; [8D2B48]是关键,存放注册是否成功的标志
00423D8B |. 85C0 test eax, eax ; 若注册成功,不为0
(中间代码省略)
00423DA6 75 1E jnz short Foxit_Re.00423DC6 ; 这里还要作一定修改
00423DA8 |. 84C9 |test cl, cl
00423DAA |. 74 16 |je short Foxit_Re.00423DC2 ; 这是跳向成功的地方
(后面代码省略)
>>>>>>
将上面的00423DA6处的: jnz short Foxit_Re.00423DC6
修改为: nop
nop
或者是: jmp short Foxit_Re.00423DC2
到此,便成功的让软件注册为Pro版本了! 可在bout窗口中发现不同哟~!
如果,你还想在点击注册窗口中的注册按钮时,也随时显示注册成功对话框,还需将:
>>>>>>
00459EBB . E8 D0E10200 call Foxit_Re.00488090 ; 已被标志位修改的这个call
00459EC0 . 83C4 40 add esp, 40
00459EC3 . A3 482B8D00 mov dword ptr [8D2B48], eax
00459EC8 . 85C0 test eax, eax ; eax and eax = 0 ?
00459ECA . 75 1F jnz short Foxit_Re.00459EEB ; 不为0,则成功,跳走
00459ECC . 83CB FF or ebx, FFFFFFFF
00459ECF . 53 push ebx
00459ED0 . 50 push eax
00459ED1 . 68 80080000 push 880
00459ED6 . E8 38F02F00 call Foxit_Re.00758F13
00459EDB . 8B4C24 10 mov ecx, dword ptr [esp+10] ; 弹出注册错误对话框的地方
00459EDF . 51 push ecx
00459EE0 . FF15 14E57A00 call dword ptr [<&KERNEL32.Delete>
00459EE6 . E9 35010000 jmp Foxit_Re.0045A020
00459EEB > BE 58E38400 mov esi, Foxit_Re.0084E358 ; 跳来到这里
00459EF0 . 8D8424 FC000000 lea eax, dword ptr [esp+FC]
00459EF7 > 8A10 mov dl, byte ptr [eax]
00459EF9 . 83CB FF or ebx, FFFFFFFF
00459EFC . 8ACA mov cl, dl
00459EFE . 3A16 cmp dl, byte ptr [esi]
00459F00 75 1C jnz short Foxit_Re.00459F1E ; 这里还要作一定修改
00459F02 . 84C9 test cl, cl
00459F04 . 74 14 je short Foxit_Re.00459F1A ; 这是跳向成功的地方
>>>>>>
将上面的00459F00处的: jnz short Foxit_Re.00459F1E
修改为: nop
nop
或者是: jmp short Foxit_Re.00459F1A
然后,再在[8D2B48]这个关键地方(因为:这就是存放注册成功与否的标志)下[内存写入断点],将软件完整运行一次后,发现其结果并没有被修改,确定软件没有暗桩,OK,至此软件被成功标志位爆破了! 又当了一次伟大的爆破者,呵呵~~ 我爆破,所以我光荣! |
评分
-
查看全部评分
|