jzyjd 发表于 2017-4-23 18:52:45

发个简单的算法分析,适合新手,高手不宜。

本帖最后由 jzyjd 于 2017-4-23 19:01 编辑

PDF to Word Converter 3.1 算法分析
下载地址:http://www.verypdf.com/app/pdf-to-word/index.html
国外的软件,呵呵。
查壳,无壳。
运行后,会提示注册,进入试用。
然后再次进行注册。
点注册提示:Your registration key is wrong……
查找字串。来到:
00406716   > \A1 343D7F00   mov eax,dword ptr ds:
0040671B   .894424 08   mov dword ptr ss:,eax
0040671F   .68 402A5E00   push pdf2word.005E2A40                   ;Your registration key is wrong, please double check following issues:\n
00406724   .8D4C24 0C   lea ecx,dword ptr ss:
00406728   .C78424 E40000>mov dword ptr ss:,0x0
00406733   .E8 A4F61900   call pdf2word.005A5DDC
00406738   .68 E4295E00   push pdf2word.005E29E4                   ;1. Please copy and paste your registration key into PDF2Word to avoid spelling mistake.\n
往上翻发现是004066D0   . /74 44         je short pdf2word.00406716               ; 跳过来的。
再往上翻,来到关键CALL 
004066C6   .E8 95F8FFFF   call pdf2word.00405F60                   ;关键CALL
重新进行注册。分析代码
00405F76|.83F9 14       cmp ecx,0x14                           ;检测注册码位数 20位
00405F79|.74 07         je short pdf2word.00405F82               ;位数不对,直接跳走返回。
改成20位假码:12345678901234567890.继续注册
算法分析:
00405F76|.83F9 14       cmp ecx,0x14                           ;检测注册码位数 20位
00405F79|.74 07         je short pdf2word.00405F82               ;位数对继续,位数不对,返回。
00405F7B|.5F            pop edi                                  ;pdf2word.007F0033
00405F7C|.5E            pop esi                                  ;pdf2word.007F0033
00405F7D|.5B            pop ebx                                  ;pdf2word.007F0033
00405F7E|.83C4 18       add esp,0x18
00405F81|.C3            retn
00405F82|>8A06          mov al,byte ptr ds:               ;取假码第一位
00405F84|.8A4E 01       mov cl,byte ptr ds:             ;取假码第二位
00405F87|.8D5424 0C   lea edx,dword ptr ss:
00405F8B|.32DB          xor bl,bl
00405F8D|.52            push edx
00405F8E|.884424 1C   mov byte ptr ss:,al
00405F92|.885C24 1D   mov byte ptr ss:,bl
00405F96|.884C24 10   mov byte ptr ss:,cl
00405F9A|.885C24 11   mov byte ptr ss:,bl
00405F9E|.E8 B4A61800   call pdf2word.00590657
00405FA3|.8BF8          mov edi,eax
00405FA5|.8D4424 1C   lea eax,dword ptr ss:
00405FA9|.50            push eax
00405FAA|.E8 A8A61800   call pdf2word.00590657
00405FAF|.03F8          add edi,eax                              ;第一位加第二位
00405FB1|.83C4 08       add esp,0x8
00405FB4|.83FF 0B       cmp edi,0xB                              ;和与0B即11进行比较
00405FB7|.74 09         je short pdf2word.00405FC2               ;相等继续,不相等返回。
00405FB9|.5F            pop edi                                  ;pdf2word.007F0033
00405FBA|.5E            pop esi                                  ;pdf2word.007F0033
00405FBB|.33C0          xor eax,eax
00405FBD|.5B            pop ebx                                  ;pdf2word.007F0033
00405FBE|.83C4 18       add esp,0x18
00405FC1|.C3            retn
00405FC2|>8A4E 12       mov cl,byte ptr ds:            ;取19位
00405FC5|.8A56 13       mov dl,byte ptr ds:            ;取最后一位 20位
00405FC8|.8D4424 0C   lea eax,dword ptr ss:
00405FCC|.884C24 18   mov byte ptr ss:,cl
00405FD0|.50            push eax
00405FD1|.885C24 1D   mov byte ptr ss:,bl
00405FD5|.885424 10   mov byte ptr ss:,dl
00405FD9|.885C24 11   mov byte ptr ss:,bl
00405FDD|.E8 75A61800   call pdf2word.00590657
00405FE2|.8D4C24 1C   lea ecx,dword ptr ss:
00405FE6|.8BF8          mov edi,eax
00405FE8|.51            push ecx
00405FE9|.E8 69A61800   call pdf2word.00590657
00405FEE|.03F8          add edi,eax                              ;19位+20位
00405FF0|.83C4 08       add esp,0x8
00405FF3|.83FF 0D       cmp edi,0xD                              ;要等于0D,即13
00405FF6|.74 09         je short pdf2word.00406001               ;相等继续,不相等返回
00405FF8|.5F            pop edi                                  ;pdf2word.007F0033
00405FF9|.5E            pop esi                                  ;pdf2word.007F0033
00405FFA|.33C0          xor eax,eax
00405FFC|.5B            pop ebx                                  ;pdf2word.007F0033
00405FFD|.83C4 18       add esp,0x18
00406000|.C3            retn
00406001|>8A56 05       mov dl,byte ptr ds:             ;第5位(如果从0开数就是第6位,呵呵)
00406004|.8A46 0D       mov al,byte ptr ds:             ;第13位(如果从0开数就是第14位,反正我喜欢从1开始呵呵)
00406007|.8D4C24 0C   lea ecx,dword ptr ss:
0040600B|.885424 18   mov byte ptr ss:,dl
0040600F|.51            push ecx
00406010|.885C24 1D   mov byte ptr ss:,bl
00406014|.884424 10   mov byte ptr ss:,al
00406018|.885C24 11   mov byte ptr ss:,bl
0040601C|.E8 36A61800   call pdf2word.00590657
00406021|.8D5424 1C   lea edx,dword ptr ss:
00406025|.8BF8          mov edi,eax
00406027|.52            push edx
00406028|.E8 2AA61800   call pdf2word.00590657
0040602D|.03F8          add edi,eax                              ;第5位与第13位加起来
0040602F|.83C4 08       add esp,0x8
00406032|.83FF 09       cmp edi,0x9                              ;和必须等于9
00406035|.74 09         je short pdf2word.00406040               ;相等继续,不相等返回。
00406037|.5F            pop edi                                  ;pdf2word.007F0033
00406038|.5E            pop esi                                  ;pdf2word.007F0033
00406039|.33C0          xor eax,eax
0040603B|.5B            pop ebx                                  ;pdf2word.007F0033
0040603C|.83C4 18       add esp,0x18
0040603F|.C3            retn
00406040|>807E 0C 56    cmp byte ptr ds:,0x56         ;第十二位与V比较
00406044|.74 09         je short pdf2word.0040604F               ;不是V,就返回。
00406046|.5F            pop edi                                  ;pdf2word.007F0033
00406047|.5E            pop esi                                  ;pdf2word.007F0033
00406048|.33C0          xor eax,eax
0040604A|.5B            pop ebx                                  ;pdf2word.007F0033
0040604B|.83C4 18       add esp,0x18
0040604E|.C3            retn
0040604F|>807E 0E 33    cmp byte ptr ds:,0x33         ;第十四位必须是3
00406053|.74 09         je short pdf2word.0040605E               ;相等继续,不相等返回。
00406055|.5F            pop edi                                  ;pdf2word.007F0033
00406056|.5E            pop esi                                  ;pdf2word.007F0033
00406057|.33C0          xor eax,eax
00406059|.5B            pop ebx                                  ;pdf2word.007F0033
0040605A|.83C4 18       add esp,0x18
0040605D|.C3            retn
0040605E|>8A4E 0F       mov cl,byte ptr ds:             ;取第十五位
00406061|.33C0          xor eax,eax
00406063|.80F9 32       cmp cl,0x32                              ;必须是2
00406066|.5F            pop edi                                  ;pdf2word.007F0033
00406067|.5E            pop esi                                  ;pdf2word.007F0033
00406068|.5B            pop ebx                                  ;pdf2word.007F0033
00406069|.0F94C0      sete al                                  ;条件为真al置1
0040606C|.83C4 18       add esp,0x18
0040606F\.C3            retn                                     ;返回。
返回后:
004066C6   .E8 95F8FFFF   call pdf2word.00405F60                   ;关键CALL
004066CB   .83C4 04       add esp,0x4
004066CE   .85C0          test eax,eax
004066D0   .74 44         je short pdf2word.00406716               ;跳向注册码错 关键跳

关键跳不再跳,注册成功。
总结一下:
这软件太他妈的给力了,简直就是为我们初学者量身定做的,初学者练习简单算法分析这软件我给全5分,只能说作者为我们初学者学习算法编写的最费心的crack me了。再次感谢作者。
另外,这个软件注册码与注册名没有半毛钱的关系(注册名不参与计算),这也是与国内大多数软件不同之处。
给一组注册成功的码:看图片
写在最后,大牛们多给加分,挣PYG币不容易,我还要参加今年的学习。没钱。{:lol:}

冷月孤心 发表于 2017-4-23 19:07:39

加油,期待给多文章与作品

johnchow 发表于 2017-4-23 19:12:18

加油,期待给多文章与作品

雲裏霧裏 发表于 2017-4-23 19:39:31

谢谢这类的分析,比较接近地气比那些大牛表哥的好理解支持

wgz001 发表于 2017-4-24 08:20:02

表哥   带带我

1248394650 发表于 2017-4-24 11:47:00

这个垃圾。。

yy11 发表于 2017-4-24 14:02:33

还看不出来呀,软件作者故意为之

boyving 发表于 2017-4-24 14:59:36

大哥,没有成品吗?

jzyjd 发表于 2017-4-24 15:38:46

boyving 发表于 2017-4-24 14:59
大哥,没有成品吗?

这不都弄清楚了吗,还要什么成品?

try258 发表于 2017-4-24 20:10:17

感谢分享算法!学习了!更改前两位和后两位。
473456789012V3327876
页: [1] 2
查看完整版本: 发个简单的算法分析,适合新手,高手不宜。