首页
社区
课程
招聘
[原创]PDF Password Cracker Ent v3.2算法分析及注册机
发表于: 2010-11-19 17:09 15257

[原创]PDF Password Cracker Ent v3.2算法分析及注册机

2010-11-19 17:09
15257
【文章标题】: PDF Password Cracker Ent v3.2算法分析及注册机
【软件名称】: PDF Password Cracker Ent v3.2
【软件大小】: 2.25 MB
【下载地址】: http://www.crackpdf.com/index.html
【加壳方式】: UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
【保护方式】: 注册码
【编写语言】: Microsoft Visual C++ 6.0

      今天有空,写篇文章。软件没什么保护,很适合大家练手。
     

      

    OD载入下断点GetDlgItemTextA,而后在密码框输入任意位数字符例如:123456789,随即断到下面,
显然关键call就是00408060
004086AA    68 945C4F00     PUSH crackpdf.004F5C94                   ; ASCII "12345678901234567890"
004086AF    68 14040000     PUSH 414
004086B4    56              PUSH ESI
004086B5    F3:AB           REP STOS DWORD PTR ES:[EDI]
004086B7    FF15 C0E44800   CALL DWORD PTR DS:[48E4C0]               ; USER32.GetDlgItemTextA
004086BD    68 945C4F00     PUSH crackpdf.004F5C94                   ; ASCII "12345678901234567890"
004086C2    E8 99F9FFFF     CALL crackpdf.00408060                   //关键call
004086C7    83C4 04         ADD ESP,4
004086CA    85C0            TEST EAX,EAX                             //eax=0 over
004086CC    74 44           JE SHORT crackpdf.00408712
004086CE    6A 40           PUSH 40
004086D0    68 942D4D00     PUSH crackpdf.004D2D94                   ; Thank you.
004086D5    68 502D4D00     PUSH crackpdf.004D2D50                   ; Thank you for purchase the PDF Password

Cracker Enterprise v3.2.
004086DA    56              PUSH ESI
004086DB    FF15 E8E44800   CALL DWORD PTR DS:[48E4E8]               ; USER32.MessageBoxA
.......................................................省略部分代码
00408712    6A 10           PUSH 10
00408714    6A 00           PUSH 0
00408716    68 102D4D00     PUSH crackpdf.004D2D10                   ; Your registration key is wrong, please

check it and try again.
0040871B    56              PUSH ESI
0040871C    FF15 E8E44800   CALL DWORD PTR DS:[48E4E8]               ; USER32.MessageBoxA

下面分析关键call, F7进入:
00408060    83EC 18         SUB ESP,18
00408063    83C9 FF         OR ECX,FFFFFFFF
00408066    33C0            XOR EAX,EAX                        //默认  al=0 over
00408068    53              PUSH EBX
00408069    56              PUSH ESI
0040806A    8B7424 24       MOV ESI,DWORD PTR SS:[ESP+24]
0040806E    57              PUSH EDI
0040806F    8BFE            MOV EDI,ESI
00408071    F2:AE           REPNE SCAS BYTE PTR ES:[EDI]
00408073    F7D1            NOT ECX
00408075    49              DEC ECX
00408076    83F9 14         CMP ECX,14                          //判断注册码长度是否等于20,不是就over
00408079    74 07           JE SHORT crackpdf.00408082
0040807B    5F              POP EDI
0040807C    5E              POP ESI
0040807D    5B              POP EBX
0040807E    83C4 18         ADD ESP,18                         //返回默认值 al=0 over
00408081    C3              RETN
00408082    8A46 0E         MOV AL,BYTE PTR DS:[ESI+E]         //取key[14]
00408085    8A4E 0F         MOV CL,BYTE PTR DS:[ESI+F]         //取key[15]
00408088    8D5424 0C       LEA EDX,DWORD PTR SS:[ESP+C]
0040808C    32DB            XOR BL,BL
0040808E    52              PUSH EDX
0040808F    884424 1C       MOV BYTE PTR SS:[ESP+1C],AL               
00408093    885C24 1D       MOV BYTE PTR SS:[ESP+1D],BL
00408097    884C24 10       MOV BYTE PTR SS:[ESP+10],CL        //key[15]         
0040809B    885C24 11       MOV BYTE PTR SS:[ESP+11],BL       //'\0'
0040809F    E8 AE3F0600     CALL crackpdf.0046C052                  
004080A4    8BF8            MOV EDI,EAX                       //edi=atoi(key[15])
004080A6    8D4424 1C       LEA EAX,DWORD PTR SS:[ESP+1C]
004080AA    50              PUSH EAX                          //key[14]
004080AB    E8 A23F0600     CALL crackpdf.0046C052
004080B0    03F8            ADD EDI,EAX                      //edi=atoi(key[14])+atoi(key[15])
004080B2    83C4 08         ADD ESP,8
004080B5    83FF 0A         CMP EDI,0A                       //atoi(key[14])+atoi(key[15])=10  条件1
004080B8    74 09           JE SHORT crackpdf.004080C3
004080BA    5F              POP EDI
004080BB    5E              POP ESI
004080BC    33C0            XOR EAX,EAX                           //al=0 over
004080BE    5B              POP EBX
004080BF    83C4 18         ADD ESP,18
004080C2    C3              RETN
004080C3    8A0E            MOV CL,BYTE PTR DS:[ESI]                 //key[0]
004080C5    8A56 01         MOV DL,BYTE PTR DS:[ESI+1]               // key[1]
004080C8    8D4424 0C       LEA EAX,DWORD PTR SS:[ESP+C]
004080CC    884C24 18       MOV BYTE PTR SS:[ESP+18],CL
004080D0    50              PUSH EAX
004080D1    885C24 1D       MOV BYTE PTR SS:[ESP+1D],BL
004080D5    885424 10       MOV BYTE PTR SS:[ESP+10],DL
004080D9    885C24 11       MOV BYTE PTR SS:[ESP+11],BL
004080DD    E8 703F0600     CALL crackpdf.0046C052            
004080E2    8D4C24 1C       LEA ECX,DWORD PTR SS:[ESP+1C]
004080E6    8BF8            MOV EDI,EAX                       //edi=atoi(key[1])
004080E8    51              PUSH ECX
004080E9    E8 643F0600     CALL crackpdf.0046C052            //edi=atoi(key[0])
004080EE    03F8            ADD EDI,EAX            
004080F0    83C4 08         ADD ESP,8
004080F3    83FF 0B         CMP EDI,0B                        //atoi(key[0])+atoi(key[1])=11  条件2
004080F6    74 09           JE SHORT crackpdf.00408101
004080F8    5F              POP EDI
004080F9    5E              POP ESI
004080FA    33C0            XOR EAX,EAX                      //al=0 over
004080FC    5B              POP EBX
004080FD    83C4 18         ADD ESP,18
00408100    C3              RETN
00408101    807E 05 32      CMP BYTE PTR DS:[ESI+5],32             //key[5]=50   条件3
00408105    74 09           JE SHORT crackpdf.00408110
00408107    5F              POP EDI
00408108    5E              POP ESI
00408109    33C0            XOR EAX,EAX                    //al=0 over
0040810B    5B              POP EBX
0040810C    83C4 18         ADD ESP,18
0040810F    C3              RETN
00408110    8A56 07         MOV DL,BYTE PTR DS:[ESI+7]     
00408113    8A46 08         MOV AL,BYTE PTR DS:[ESI+8]
00408116    8D4C24 0C       LEA ECX,DWORD PTR SS:[ESP+C]
0040811A    885424 18       MOV BYTE PTR SS:[ESP+18],DL
0040811E    51              PUSH ECX
0040811F    885C24 1D       MOV BYTE PTR SS:[ESP+1D],BL
00408123    884424 10       MOV BYTE PTR SS:[ESP+10],AL
00408127    885C24 11       MOV BYTE PTR SS:[ESP+11],BL
0040812B    E8 223F0600     CALL crackpdf.0046C052
00408130    8D5424 1C       LEA EDX,DWORD PTR SS:[ESP+1C]
00408134    8BF0            MOV ESI,EAX
00408136    52              PUSH EDX
00408137    E8 163F0600     CALL crackpdf.0046C052
0040813C    83C4 08         ADD ESP,8
0040813F    03F0            ADD ESI,EAX         
00408141    33C0            XOR EAX,EAX
00408143    83FE 0F         CMP ESI,0F                   // atoi(key[7])+atoi(key[8])=15  条件4
00408146    5F              POP EDI
00408147    5E              POP ESI
00408148    0F94C0          SETE AL                     //条件4也满足就设定al=1 success
0040814B    5B              POP EBX
0040814C    83C4 18         ADD ESP,18
0040814F    C3              RETN

这里主要用到了下面这个函数:
int atoi(const char *nptr);
函数说明: atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0‘)才结束转换,并返回转换后的整型数,这个算法中仅用来转换注册码中的某一位字符为十进制数。

算法总结:
     条件1:    atoi(key[14])+atoi(key[15])=10   
       条件2:    atoi(key[0])+atoi(key[1])=11   
       条件3:    key[5]=50                       
       条件4:    atoi(key[7])+atoi(key[8])=15
因此注册码只要满足如下形式即可:(38)random1(2)random2(69)random3(28)random4
其中random1为3位;random2为1位;random3为5位;random4为4位。

给出注册机代码如下:
unit Unit1;
interface
uses
  Windows, Classes, Controls, Forms, StdCtrls, Buttons;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
   end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
     i:byte;
     str,random1,random2,random3,random4:string;
begin
      Randomize;
      while length(str)<$d  do
        begin
            i := random(150);
            if (i < $7a) and (i > $61) then str:=str+char(i);
        end;
       random1:=copy(str,1,3);
       random2:=copy(str,4,1);
       random3:=copy(str,5,5);
       random4:=copy(str,10,4);
       edit1.Text:='38'+random1+'2'+random2+'69'+random3+'28'+random4;
end;
end.
   附件:注册机

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 433
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
2
现在算法分析的文章比较少了,不再像06、07年那样红火了,路过此地,支持一下!
2010-11-19 17:16
0
雪    币: 0
活跃值: (314)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
呵,支持一下
2010-11-19 17:40
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
4
找不到注册机就自己写一个,主要还是为了研究pdf的安全防护。
2010-11-19 17:54
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
有算法分析的教程,支持
2010-11-19 18:09
0
雪    币: 388
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
呵呵 算法分析支持!
2010-11-19 18:37
0
雪    币: 210
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
天易love  
真棒呀
2010-11-20 08:07
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
天易love  
love天易
2010-11-20 09:48
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
天易love我是你的粉丝
2010-11-20 10:08
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
收下支持下
2010-11-20 10:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错,学习学习
2010-11-20 20:24
0
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
12
楼主有粉丝了,,恭喜
2010-11-20 22:43
0
雪    币: 89
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
为啥能得精华呢?
2010-11-21 11:46
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
14
楼上的兄弟我被你彻底雷倒了!可惜这个工具已经过时了,算法有点旧。
2010-11-21 15:04
0
雪    币: 229
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
粉丝支持一下
2010-11-21 20:35
0
雪    币: 89
活跃值: (185)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
16
LZ的头像好漂亮
2010-11-22 13:38
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
17
我是她粉丝,谢谢。
2010-11-22 17:48
0
雪    币: 41
活跃值: (265)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
每次都来观赏你的贴子。太感谢你了。感谢分享
2010-11-23 18:40
0
雪    币: 160
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
又见PDF密码破解器相关的算法~
2010-11-24 00:53
0
雪    币: 270
活跃值: (117)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
保存以备日后练习,嘿嘿,膜拜一下楼主
2010-11-24 14:21
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
10多年前的东西,现在还能用,赞!
2023-7-24 19:46
0
雪    币: 206
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
思路可以参考,谢谢辛苦提供图文软件
2023-11-12 13:10
0
游客
登录 | 注册 方可回帖
返回
//