吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8609|回复: 10
收起左侧

[原创] Batch Image Resizer 算法分析

[复制链接]
HadgeROL 发表于 2011-4-2 17:59
本帖最后由 Blackk 于 2011-4-2 18:26 编辑

heiketian10兄的注册机原帖地址:
http://www.52pojie.cn/thread-85075-1-1.html

【破文标题】Batch Image Resizer 算法分析
【破文作者】Blackk[PYG]
【作者邮箱】191477631@qq.com
【作者主页】http://blackk.co.cc
破解工具】OD,PEID
【破解平台】WinDows XP
【软件名称】BatchImageResizer
【软件大小】740KB
【原版下载】http://www.jklnsoft.com/download/batch-image-resizer.exe
【保护方式】Microsoft Visual C++ 6.0
【软件简介】Batch Image Resizer
With Batch Image Resizer, getting your photos to fit wherever you want them to has never been easier! Resize, Rotate, Stamp, and even Convert your images with ease. Full compatibility with JPEG, BMP, GIF, PCX, and PNG formats is included. Batch support included to do all of the above functions to multiple files at once.
【破解声明】仅作技术交流之用
------------------------------------------------------------------------
【破解过程】

OD载入程序,搜索字符串“registration code”。找到重启验证处
00405DC0  /$  6A FF         push    -1
00405DC2  |.  68 B0774100   push    004177B0                         ;  SE 处理程序安装
00405DC7  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
00405DCD  |.  50            push    eax
F8单步走
00405E73  |.  8379 F8 0B    cmp     dword ptr [ecx-8], 0B            ;  邮箱总位数不小于11位
00405E77  |.  7D 08         jge     short 00405E81
00405E79  |.  899D C8000000 mov     dword ptr [ebp+C8], ebx
00405E7F  |.  EB 6D         jmp     short 00405EEE
00405E81  |>  51            push    ecx
00405E82  |.  8D5424 14     lea     edx, dword ptr [esp+14]
00405E86  |.  8BCC          mov     ecx, esp
00405E88  |.  896424 20     mov     dword ptr [esp+20], esp
00405E8C  |.  52            push    edx
00405E8D  |.  E8 58080100   call    <jmp.&MFC42.#535>
00405E92  |.  8D4424 1C     lea     eax, dword ptr [esp+1C]
00405E96  |.  8BCE          mov     ecx, esi
00405E98  |.  50            push    eax
00405E99  |.  E8 82000000   call    00405F20                         ;算法CALL,F7

//算法入口
00405F20  /$  6A FF         push    -1
00405F22  |.  68 E7774100   push    004177E7                         ;  SE 处理程序安装
00405F27  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
00405F2D  |.  50            push    eax
00405F2E  |.  64:8925 00000>mov     dword ptr fs:[0], esp
//邮箱位数处理
00405F65  |.  83F8 0A       cmp     eax, 0A                          ;  
00405F68  |.  0F8E 98010000 jle     00406106
00405F6E  |.  83F8 10       cmp     eax, 10
00405F71  |.  7D 0E         jge     short 00405F81                   ;  邮箱总位数大于16位,不做修改
00405F73  |.  68 F0154200   push    004215F0                         ;  小于16位就在后面加上aaaaaaaa

//算法1,邮箱每一位的初始处理
00405F8D  |> /8D4C14 20     /lea     ecx, dword ptr [esp+edx+20]     ;  (initial cpu selection)
00405F91  |. |8A040E        |mov     al, byte ptr [esi+ecx]          ;  循环取邮箱每位的16进制值放入AL中
00405F94  |. |3C 61         |cmp     al, 61                          ;  若字符处于a-f之间
00405F96  |. |8801          |mov     byte ptr [ecx], al
00405F98  |. |7C 08         |jl      short 00405FA2
00405F9A  |. |3C 66         |cmp     al, 66
00405F9C  |. |7F 04         |jg      short 00405FA2
00405F9E  |. |24 CE         |and     al, 0CE                         ;  AL=AL AND 0CE
00405FA0  |. |8801          |mov     byte ptr [ecx], al
00405FA2  |> |8A01          |mov     al, byte ptr [ecx]
00405FA4  |. |3C 41         |cmp     al, 41                          ;  接着判断AL是否处于A-F之间
00405FA6  |. |7C 08         |jl      short 00405FB0
00405FA8  |. |3C 46         |cmp     al, 46
00405FAA  |. |7F 04         |jg      short 00405FB0
00405FAC  |. |2C 42         |sub     al, 42                          ;  AL=AL-42
00405FAE  |. |EB 02         |jmp     short 00405FB2
00405FB0  |> |2C 32         |sub     al, 32                          ;  不在上面两个范围的:AL=AL-32
00405FB2  |> |42            |inc     edx                             ;  循环+1
00405FB3  |. |8801          |mov     byte ptr [ecx], al              
00405FB5  |. |83FA 10       |cmp     edx, 10                         ;  
00405FB8  |.^\7C D3         \jl      short 00405F8D


邮箱输入:191477631@qq.com.那么[ECX]中为

位    数:0    1     2     3     4     5     6     7     8    9    10   11   12   13   14    15
计算后:FF   07   FF   02   05   05   04   01   FF   0E   3F   3F   FC   00   3D   3B
  

继续向下走:

00405FBF  |.  57            push    edi
00405FC0  |.  B8 06000000   mov     eax, 6                           ;  EAX=6

//算法2,真码的计算过程
-----------------------------------------------------------------------------------------
00405FC8  |> /8D70 FA       /lea     esi, dword ptr [eax-6]          ;  ESI=EAX-6
00405FCB  |. |8BD8          |mov     ebx, eax                        
00405FCD  |. |8BCE          |mov     ecx, esi                        
00405FCF  |. |83E3 0F       |and     ebx, 0F
00405FD2  |. |83E1 0F       |and     ecx, 0F
00405FD5  |. |8D78 01       |lea     edi, dword ptr [eax+1]          ;  EDI=EAX+1
00405FD8  |. |0FBE5C1C 28   |movsx   ebx, byte ptr [esp+ebx+28]      ;  取第EBX位。(从第6位开始依次取,放入EBX)
00405FDD  |. |0FBE540C 28   |movsx   edx, byte ptr [esp+ecx+28]      ;  取第ECX位。(从第0位开始依次取,放入EDX)
00405FE2  |. |8D48 FC       |lea     ecx, dword ptr [eax-4]          ;  ecx=eax-4
00405FE5  |. |03D6          |add     edx, esi                        ;  edx=edx+esi
00405FE7  |. |83E1 0F       |and     ecx, 0F                          
00405FEA  |. |0FBE4C0C 28   |movsx   ecx, byte ptr [esp+ecx+28]      ;  取第ECX位。(从第2位开始依次取放入ECX)
00405FEF  |. |0FAFD1        |imul    edx, ecx                        ;  EDX=EDX*ECX
00405FF2  |. |8D48 FD       |lea     ecx, dword ptr [eax-3]         
00405FF5  |. |83E1 0F       |and     ecx, 0F
00405FF8  |. |0FBE4C0C 28   |movsx   ecx, byte ptr [esp+ecx+28]      ;  取第ECX位。(从第3位开始依次取放入ECX)
00405FFD  |. |03CE          |add     ecx, esi                        ;  ECX=ECX+ESI
00405FFF  |. |0FAFCB        |imul    ecx, ebx                        ;  ECX=ECX*EBX
00406002  |. |03D1          |add     edx, ecx                        ;  edx=edx+ecx
00406004  |. |8D48 FB       |lea     ecx, dword ptr [eax-5]           
00406007  |. |8D58 FF       |lea     ebx, dword ptr [eax-1]         
0040600A  |. |83E1 0F       |and     ecx, 0F
0040600D  |. |83E3 0F       |and     ebx, 0F
00406010  |. |0FBE4C0C 28   |movsx   ecx, byte ptr [esp+ecx+28]      ;  取第ECX位。(从第1位开始依次取放入ECX)
00406015  |. |0FBE5C1C 28   |movsx   ebx, byte ptr [esp+ebx+28]      ;  取第EBX位。(从第5位开始依次取放入EBX)
0040601A  |. |0FAFCB        |imul    ecx, ebx                        ;  ecx=ecx*ebx
0040601D  |. |03D1          |add     edx, ecx                        ;  edx=edx+ecx
0040601F  |. |8D48 FE       |lea     ecx, dword ptr [eax-2]         
00406022  |. |8BDF          |mov     ebx, edi                        
00406024  |. |83E1 0F       |and     ecx, 0F
00406027  |. |83E3 0F       |and     ebx, 0F
0040602A  |. |0FBE4C0C 28   |movsx   ecx, byte ptr [esp+ecx+28]      ;  取第ECX位。(从第4位开始依次取放入ECX)
0040602F  |. |0FBE5C1C 28   |movsx   ebx, byte ptr [esp+ebx+28]      ;  取第EBX位。(从第7位开始依次取放入EBX)
00406034  |. |0FAFCB        |imul    ecx, ebx                        ;  ecx=ecx*ebx
00406037  |. |03D1          |add     edx, ecx                        ;  edx=edx+ecx
00406039  |. |8D48 03       |lea     ecx, dword ptr [eax+3]         
0040603C  |. |83E1 0F       |and     ecx, 0F
0040603F  |. |8D58 07       |lea     ebx, dword ptr [eax+7]         
00406042  |. |83E3 0F       |and     ebx, 0F
00406045  |. |0FBE4C0C 28   |movsx   ecx, byte ptr [esp+ecx+28]      ;  取第ECX位。(从第9位开始依次取放入ECX)
0040604A  |. |0FBE5C1C 28   |movsx   ebx, byte ptr [esp+ebx+28]      ;  取第EBX位。(从第13位开始依次取放入EBX)
0040604F  |. |03CE          |add     ecx, esi                        ;  ecx=ecx+esi(esi=0:15)
00406051  |. |0FAFCB        |imul    ecx, ebx                        ;  ecx=ecx*ebx
00406054  |. |8D58 02       |lea     ebx, dword ptr [eax+2]         
00406057  |. |83E3 0F       |and     ebx, 0F
0040605A  |. |0FBE5C1C 28   |movsx   ebx, byte ptr [esp+ebx+28]      ;  取第EBX位。(从第8位开始依次取放入EBX)
0040605F  |. |03DE          |add     ebx, esi                        ;  ebx=ebx+esi
00406061  |. |8D70 04       |lea     esi, dword ptr [eax+4]         
00406064  |. |83E6 0F       |and     esi, 0F
00406067  |. |0FBE7434 28   |movsx   esi, byte ptr [esp+esi+28]      ;  取第ESI位。(从第10位开始依次取放入ESI)
0040606C  |. |0FAFDE        |imul    ebx, esi                        ;  EBX=EBX*ESI
0040606F  |. |03CB          |add     ecx, ebx                        ;  ECX=ECX+EBX
00406071  |. |8D70 F8       |lea     esi, dword ptr [eax-8]         
00406074  |. |8D58 06       |lea     ebx, dword ptr [eax+6]         
00406077  |. |83E6 0F       |and     esi, 0F
0040607A  |. |83E3 0F       |and     ebx, 0F
0040607D  |. |0FBE7434 28   |movsx   esi, byte ptr [esp+esi+28]      ;  取第ESI位。(从第14位开始依次取放入ESI)
00406082  |. |0FBE5C1C 28   |movsx   ebx, byte ptr [esp+ebx+28]      ;  取第EBX位。(从第12位开始依次取放入EBX)
00406087  |. |0FAFF3        |imul    esi, ebx                        ;  ESI=ESI*EBX
0040608A  |. |03CE          |add     ecx, esi                        ;  ECX=ECX+ESI
0040608C  |. |8D70 F9       |lea     esi, dword ptr [eax-7]         
0040608F  |. |8D58 05       |lea     ebx, dword ptr [eax+5]         
00406092  |. |83E6 0F       |and     esi, 0F
00406095  |. |83E3 0F       |and     ebx, 0F
00406098  |. |0FBE7434 28   |movsx   esi, byte ptr [esp+esi+28]      ;  取第ESI位。(从第15位开始依次取放入ESI)
0040609D  |. |0FBE5C1C 28   |movsx   ebx, byte ptr [esp+ebx+28]      ;  取第EBX位。(从第11位开始依次取放入EBX)
004060A2  |. |0FAFF3        |imul    esi, ebx                        ;  ESI=ESI*EBX。。。
004060A5  |. |03CE          |add     ecx, esi                        ;  ECX=ECX+ESI
004060A7  |. |0FAFCA        |imul    ecx, edx                        ;  ECX=ECX*EDX
004060AA  |. |C1F9 03       |sar     ecx, 3
004060AD  |. |83E1 1F       |and     ecx, 1F
004060B0  |. |83F9 0A       |cmp     ecx, 0A
004060B3  |. |7D 05         |jge     short 004060BA
004060B5  |. |83C1 50       |add     ecx, 50
004060B8  |. |EB 0D         |jmp     short 004060C7
004060BA  |> |83F9 12       |cmp     ecx, 12
004060BD  |. |7D 05         |jge     short 004060C4
004060BF  |. |83C1 28       |add     ecx, 28
004060C2  |. |EB 03         |jmp     short 004060C7
004060C4  |> |83C1 2F       |add     ecx, 2F
004060C7  |> |880C28        |mov     byte ptr [eax+ebp], cl          ;  注册码放入[EAX+EBP]
004060CA  |. |8BC7          |mov     eax, edi                        
004060CC  |. |8D50 FA       |lea     edx, dword ptr [eax-6]         
004060CF  |. |83FA 10       |cmp     edx, 10                         ;  共循环16次,即注册码固定为16位。
004060D2  |.^\0F8C F0FEFFFF \jl      00405FC8


-----------------------------------------------------------------------------------------
我们可以从上面代码中看出真码是对ECX的值处理得来的。
-----------------------------------------------------------------------------------------

00406098  |. |0FBE7434 28   |movsx   esi, byte ptr [esp+esi+28]      ;  取第ESI位。
0040609D  |. |0FBE5C1C 28   |movsx   ebx, byte ptr [esp+ebx+28]      ;  取第EBX位。

ESI=ESI*EBX
ECX=ECX+ESI
ECX=ECX*EDX

-----------------------------------------------------------------------------------------

先看ECX的计算过程:

以我的第一位为例
1.
ESI=3D
EBX=FFFFFFFC
ESI=ESI*EBX=FFFFFF0C
ECX=ECX+ESI=FFFFFFC1+FFFFFF0C=FFFFFECD
2.
ESI=3B
EBX=3F
ESI=ESI*EBX=3B*3F=E85
ECX=ECX+ESI=FFFFFECD+E85=00000E52

然后看EDX的计算过程:(在上面)

EDX=EDX+ESI=FFFFFFFF+0=FFFFFFFF
1.
ECX=FFFFFFFF
EDX=EDX*ECX=00000001
2.
ECX=2
EBX=4
ECX=ECX+ESI=2
ECX=ECX*EBX=8
EDX=EDX+ECX=1+8=9
3.
ECX=07
EBX=05
ECX=ECX*EBX=23
EDX=EDX+ECX=9+23=2C
4.
ECX=05
EBX=01
ECX=ECX*EBX=5
EDX=EDX+ECX=5+2C=31

所以最终ECX:
ECX=ECX*EDX=D52*EDX=D52+31=28CB2

再进行右移三位,与上1F:
ECX=16

如果此时ECX的值小于A,ECX=ECX+50
如果此时ECX的值大于A,小于12,ECX=ECX+28
如果此时ECX的值大于12,ECX=ECX+2F

ECX=16+2F=45,转换为字符就是"E"

然后进行循环计算,共16位。结果即为注册码

【破解总结】

1.邮箱的总位数不能小于11位。
2.若邮箱位数小于16位则在邮箱后面跟上:"aaaaaaaa",若大于16位则不做处理。
3.算法第一部分——对邮箱的每一位进行计算,结果用于真码计算过程。
4.算法第二部分——其实这一部分可以固定取KEY值进行计算,主要是一个循环计算。

算法第二部分取位为循环取位。即

0  →  1   →  2  →   3  →   4   →   5   →  6
↑                                                                       ↓
↑                                                                      7
↑                                                                       ↓
15←14←13←12←11←10←9← 8
  
本人菜鸟,如有错误请大鸟们指出

免费评分

参与人数 2热心值 +2 收起 理由
missviola + 1 精品文章!
樊盟 + 1 学习!^_^

查看全部评分

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

Hmily 发表于 2011-4-2 18:17
代码要是用上代码框就会好看很多了,很详细,加精鼓励!
yjd333 发表于 2011-4-2 18:21
hbwazxf 发表于 2011-4-3 12:32
yechan1796 发表于 2011-4-9 01:29
虽然看不懂,但是好贴必须顶起来。谢谢分享。
heiketian10 发表于 2011-4-11 13:07
真用功,当时我先麻烦,就直接把邮箱限制在了16位;

B兄弟太有毅力了。。。。。

回帖支持
woaipo1323 发表于 2011-4-20 13:29
膜拜大婶。我都不懂
fhch6 发表于 2011-5-24 18:19
楼主,你真厉害,我太佩服你了!
cu629944 发表于 2011-5-24 18:21
要的就是算法分析!提高自己的实力!顶楼主了!
braintrust2003 发表于 2011-5-24 18:58
楼主谦虚了,你这哪是菜鸟啊,你要是菜鸟,我就不知道咋称呼自己了。只看懂你的文章那么点点,我火候还不够
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

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

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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