吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7737|回复: 6
收起左侧

[分享] A-PDF Watermark 3.0.0算法分析

[复制链接]
zaas 发表于 2010-2-13 15:52
【破文标题】A-PDF Watermark 3.0.0算法分析
【破文作者】zaas[PYG][FCT]
破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【软件名称】Batch DOCX to DOC Converter 2010.2.205
【更新时间】2010-2-12 10:04:51
【软件类别】国外软件/文件管理
【软件语言】英文
【应用平台】WinXP/2000/2003/Vista
【软件性质】共享(收费)软件
【软件大小】3843KB
【原版下载】http://www.newhua.com/soft/87179.htm
【保护方式】注册码
【软件简介】A-PDF Watermark是一个快速的桌面实用程序PDF格式的水印工具,让你帮一批Acrobat PDF 文件添加水印,当文件被复制时,它们自动的将被添加水印 , 并自动的传送到另一个目录中去。您可以加文字,标识,日期/时间戳,网页号码,图像, PDF档案等各种水印,这样就可以保护您的版权问题等等
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
用PEiD查壳,为ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov [Overlay]
**************************************************************
过年回老家,手头工具不全,只好带壳调试。大年三十比较清闲,找个软件玩玩。
新电脑,OD插件没有,故下MessageBoxExA断点,成功断下:
0012F2E4   7E45082F  /CALL 到 MessageBoxExA 来自 user32.7E45082A
0012F2E8   00550232  |hOwner = 00550232 ('Pdfwm',class='TApplication')
0012F2EC   01477B88  |Text = "Invalid Register Key"
0012F2F0   013D9E88  |Title = "Pdfwm"
0012F2F4   00000040  |Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0012F2F8   00000000  \LanguageID = 0 (LANG_NEUTRAL)
ctrl+f9返回,来到:
006C7B94  /.  55            push    ebp                              ;  calll
006C7B95  |.  8BEC          mov     ebp, esp
006C7B97  |.  6A 00         push    0
006C7B99  |.  53            push    ebx
006C7B9A  |.  8BD8          mov     ebx, eax
006C7B9C  |.  33C0          xor     eax, eax
006C7B9E  |.  55            push    ebp
006C7B9F  |.  68 107C6C00   push    006C7C10
006C7BA4  |.  64:FF30       push    dword ptr fs:[eax]
006C7BA7  |.  64:8920       mov     dword ptr fs:[eax], esp
006C7BAA  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
006C7BAD  |.  8B83 30030000 mov     eax, dword ptr [ebx+330]
006C7BB3  |.  E8 54CBDAFF   call    0047470C                         ;  假码
006C7BB8  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
006C7BBB  |.  A1 F8AF7200   mov     eax, dword ptr [72AFF8]
006C7BC0  |.  8B00          mov     eax, dword ptr [eax]
006C7BC2  |.  E8 9187FEFF   call    006B0358
006C7BC7  |.  A1 F8AF7200   mov     eax, dword ptr [72AFF8]
006C7BCC  |.  8B00          mov     eax, dword ptr [eax]
006C7BCE  |.  E8 F984FEFF   call    006B00CC                         ;  关键call
006C7BD3  |.  84C0          test    al, al
006C7BD5  |.  74 16         je      short 006C7BED
006C7BD7  |.  A1 90B17200   mov     eax, dword ptr [72B190]
006C7BDC  |.  8B40 04       mov     eax, dword ptr [eax+4]
006C7BDF  |.  E8 FC37EAFF   call    0056B3E0
006C7BE4  |.  8BC3          mov     eax, ebx
006C7BE6  |.  E8 ADFBFFFF   call    006C7798
006C7BEB  |.  EB 0D         jmp     short 006C7BFA
006C7BED  |>  A1 90B17200   mov     eax, dword ptr [72B190]
006C7BF2  |.  8B40 08       mov     eax, dword ptr [eax+8]
006C7BF5  |.  E8 E637EAFF   call    0056B3E0
006C7BFA  |>  33C0          xor     eax, eax
006C7BFC  |.  5A            pop     edx
006C7BFD  |.  59            pop     ecx
006C7BFE  |.  59            pop     ecx
006C7BFF  |.  64:8910       mov     dword ptr fs:[eax], edx
006C7C02  |.  68 177C6C00   push    006C7C17
006C7C07  |>  8D45 FC       lea     eax, dword ptr [ebp-4]
006C7C0A  |.  E8 05D2D3FF   call    00404E14
006C7C0F  \.  C3            retn
006C7BD3 al不等于0注册成功,因而call    006B00CC为关键call。同时跟踪发现:无论输入的注册码正确与否,都会写入注册表的[HKEY_LOCAL_MACHINE\SOFTWARE\A-PDF\Watermark\Register]
"RegisterCode"子项,所以还是需要试试启动验证。。。
不得已,上网找了找VOLX大侠的脚本,成功找到OEP。
0070015C  /.  55            push    ebp
0070015D  |.  8BEC          mov     ebp, esp
0070015F  |.  83C4 EC       add     esp, -14
00700162  |.  53            push    ebx
00700163  |.  33C0          xor     eax, eax
00700165  |.  8945 EC       mov     dword ptr [ebp-14], eax
00700168  |.  B8 24FA6F00   mov     eax, 006FFA24
0070016D  |.  E8 8273D0FF   call    004074F4
00700172  |.  33C0          xor     eax, eax
00700174  |.  55            push    ebp
00700175  |.  68 87027000   push    00700287
0070017A  |.  64:FF30       push    dword ptr fs:[eax]
0070017D  |.  64:8920       mov     dword ptr fs:[eax], esp
00700180  |.  8D55 EC       lea     edx, dword ptr [ebp-14]
00700183  |.  B8 9C027000   mov     eax, 0070029C                    ;  ASCII "Software\A-PDF\Watermark\Language"
00700188  |.  E8 2BCAE6FF   call    0056CBB8
下RegOpenKeyExA断点,断下:
返回到似曾相识的这段代码:
006B01AA   .  E8 A15BD9FF   call    00445D50                         ;  读注册表的注册信息
006B01AF   .  8D4D E4       lea     ecx, dword ptr [ebp-1C]
006B01B2   .  8B45 FC       mov     eax, dword ptr [ebp-4]
006B01B5   .  8B50 18       mov     edx, dword ptr [eax+18]
006B01B8   .  8B45 F0       mov     eax, dword ptr [ebp-10]
006B01BB   .  E8 EC5FD9FF   call    004461AC                         ;  假码
006B01C0   .  8B55 E4       mov     edx, dword ptr [ebp-1C]
006B01C3   .  8B45 F8       mov     eax, dword ptr [ebp-8]
006B01C6   .  E8 9D4CD5FF   call    00404E68
006B01CB   .  8B55 F8       mov     edx, dword ptr [ebp-8]
006B01CE   .  8B12          mov     edx, dword ptr [edx]
006B01D0   .  8B45 FC       mov     eax, dword ptr [ebp-4]
006B01D3   .  E8 80000000   call    006B0258                         ;  关键call
006B01D8   .  84C0          test    al, al
006B01DA   .  74 10         je      short 006B01EC
跟进关键call,发现启动验证和输入注册码验证用的居然是同一段call,国外的软件还是太实在了,hohoho。。。
006B0258  /$  55            push    ebp
006B0259  |.  8BEC          mov     ebp, esp
006B025B  |.  83C4 D8       add     esp, -28
006B025E  |.  53            push    ebx
006B025F  |.  56            push    esi
006B0260  |.  57            push    edi
006B0261  |.  33C9          xor     ecx, ecx
006B0263  |.  894D E8       mov     dword ptr [ebp-18], ecx
006B0266  |.  894D F4       mov     dword ptr [ebp-C], ecx
006B0269  |.  894D F0       mov     dword ptr [ebp-10], ecx
006B026C  |.  8955 F8       mov     dword ptr [ebp-8], edx
006B026F  |.  8945 FC       mov     dword ptr [ebp-4], eax
006B0272  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
006B0275  |.  E8 5A50D5FF   call    004052D4                         ;  no use
006B027A  |.  33C0          xor     eax, eax
006B027C  |.  55            push    ebp
006B027D  |.  68 48036B00   push    006B0348
006B0282  |.  64:FF30       push    dword ptr fs:[eax]
006B0285  |.  64:8920       mov     dword ptr fs:[eax], esp
006B0288  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
006B028B  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
006B028E  |.  E8 F1BBD5FF   call    0040BE84
006B0293  |.  8B55 E8       mov     edx, dword ptr [ebp-18]
006B0296  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
006B0299  |.  E8 0E4CD5FF   call    00404EAC
006B029E  |.  8D55 D8       lea     edx, dword ptr [ebp-28]
006B02A1  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
006B02A4  |.  E8 7356ECFF   call    0057591C                         ;  计算假码的MD5
006B02A9  |.  8D45 D8       lea     eax, dword ptr [ebp-28]          ;  MD5结果保存的位置
006B02AC  |.  8D55 F4       lea     edx, dword ptr [ebp-C]
006B02AF  |.  E8 8856ECFF   call    0057593C                         ;  Md5结果转数值
006B02B4  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
006B02B7  |.  BA 10000000   mov     edx, 10
006B02BC  |.  33C0          xor     eax, eax
006B02BE  |.  E8 1152D5FF   call    004054D4                         ;  清除一段内存地址
006B02C3  |.  33F6          xor     esi, esi
006B02C5  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  内存基址
006B02C8  |.  8B78 08       mov     edi, dword ptr [eax+8]
006B02CB  |.  C645 EF 00    mov     byte ptr [ebp-11], 0             ;  标志位置0
006B02CF  |.  3BFE          cmp     edi, esi
006B02D1  |.  7E 4F         jle     short 006B0322
006B02D3  |>  8D1C37        /lea     ebx, dword ptr [edi+esi]
006B02D6  |.  D1FB          |sar     ebx, 1
006B02D8  |.  79 03         |jns     short 006B02DD
006B02DA  |.  83D3 00       |adc     ebx, 0
006B02DD  |>  8D45 F0       |lea     eax, dword ptr [ebp-10]
006B02E0  |.  E8 5750D5FF   |call    0040533C
006B02E5  |.  8BD0          |mov     edx, eax
006B02E7  |.  8BC3          |mov     eax, ebx
006B02E9  |.  03C0          |add     eax, eax
006B02EB  |.  8B4D FC       |mov     ecx, dword ptr [ebp-4]          ;  基址
006B02EE  |.  8B49 04       |mov     ecx, dword ptr [ecx+4]
006B02F1  |.  8D04C1        |lea     eax, dword ptr [ecx+eax*8]
006B02F4  |.  B9 10000000   |mov     ecx, 10                         ;  取16字符
006B02F9  |.  E8 EE29D5FF   |call    00402CEC                        ;  取得真码数值
006B02FE  |.  8B55 F0       |mov     edx, dword ptr [ebp-10]
006B0301  |.  8B45 F4       |mov     eax, dword ptr [ebp-C]
006B0304  |.  E8 A3B9D5FF   |call    0040BCAC                        ;  MD5数值和真码数值按字节比较
006B0309  |.  85C0          |test    eax, eax                        ;  此处为比较结果。
006B030B  |.  75 06         |jnz     short 006B0313                  ;  关键跳转,爆破点
006B030D  |.  C645 EF 01    |mov     byte ptr [ebp-11], 1            ;  标志位
006B0311  |.  EB 0F         |jmp     short 006B0322
006B0313  |>  85C0          |test    eax, eax
006B0315  |.  7E 05         |jle     short 006B031C
006B0317  |.  8D73 01       |lea     esi, dword ptr [ebx+1]
006B031A  |.  EB 02         |jmp     short 006B031E
006B031C  |>  8BFB          |mov     edi, ebx
006B031E  |>  3BFE          |cmp     edi, esi
006B0320  |.^ 7F B1         \jg      short 006B02D3                  ;  循环取得下一组真码进行比较
006B0322  |>  8A5D EF       mov     bl, byte ptr [ebp-11]            ;  标志位入bl,然后传给eax
【破解总结】软件的算法很简单,把输入的假码做MD5运算,取得32位数值,和软件内置的N个字符串(嘿嘿,加密过了的,不能直接搜索到)做比较,只要有一个相符,则注册成功。
比如输入假码“123456789abcdef”,MD5值(内存)为:64 9F 31 2A AF FA C7 56 1A E8 1F 8F 9C 33 4F 14,系统内置的注册码大概有30组,比如:
80 B6 77 81 BB CA 80 13 82 F0 F2 0E D5 3A A6 3A,
3F DA DF 3E 7D 89 49 AD BA DF 71 20 7D D8 BE 94,
1C 09 96 6E B5 B5 22 9A 9F CA 6E 6E 16 FD 42 BF等等。。。
由于MD5算法不可逆,而且估计这个注册码位数不会太短,所以。。。有兴趣的同学可以用穷举法试试。。。
[ebp-11] 为标志位,006B030B  |.  75 06         |jnz     short 006B0313    可以用dup2做个patch改为75 00,或者可以脱壳修改。。。
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! untitled.GIF

免费评分

参与人数 1威望 +2 收起 理由
Hmily + 2 感谢发布原创作品,[吾爱破解]因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

missviola 发表于 2010-2-13 16:06
[s:235]啊,这不是来自pyg的zaas大侠么。好文啊,支持大侠,希望以后能常来52发帖~~
李东国 发表于 2010-2-13 17:18
Hmily 发表于 2010-2-16 21:40
 楼主| zaas 发表于 2010-2-18 00:19
欢迎zaas来吾爱破解多多发布算法分析教程!
Hmily 发表于 2010-2-16 21:40



   
lover_six 发表于 2010-2-18 14:27
学习下,膜拜lz
a2213572 发表于 2010-2-19 23:49
希望可以在詳細點.
感謝分享教學
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表