吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6200|回复: 3
收起左侧

[原创] India Ink 1.9.9.3 算法分析及第一次用delphi算法注册机

[复制链接]
zaas 发表于 2010-5-26 10:33
【破文标题】India Ink 1.9.9.3 算法分析及第一次用delphi算法注册机
【破文作者】zaas[PYG]
破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【更新时间】2010-5-24
【软件类别】国外软件/图像处理
【软件语言】英文
【应用平台】WinXP/2000/2003/Vista
【软件性质】共享(收费)软件
【软件大小】2373KB
【保护方式】注册码
【软件简介】photoshop插件。India Ink是一个彩色图片转换器,是不寻常的黑与白半色调开发插件。或使用它的颜色模式,产生奇怪的蚀刻效果。
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享
【破解说明】第一次破解photoshop插件;该公司的插件算法都类似;第一次学习用delphi写注册机。
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
photoshop插件实际就是个dll文件。
**************************************************************
启动photoshop,OD附加。输入假码,下getwindowtexta断点,确定。成功断下:
3BE097D8    897424 14       mov     dword ptr [esp+14], esi
3BE097DC    E8 3FFFFFFF     call    3BE09720                         ; 取得假码
3BE097E1    8D4C24 18       lea     ecx, dword ptr [esp+18]
3BE097E5    51              push    ecx
3BE097E6    E8 A58EFCFF     call    3BDD2690                         ; 假码长度
3BE097EB    8D5424 18       lea     edx, dword ptr [esp+18]
3BE097EF    8D4424 1C       lea     eax, dword ptr [esp+1C]
3BE097F3    52              push    edx
3BE097F4    50              push    eax
3BE097F5    E8 C607FFFF     call    3BDF9FC0                         ; 假码字符串转数值
3BE097FA    83C4 18         add     esp, 18
3BE097FD    84C0            test    al, al
注册名假码都读出来了,跟进call    3BDF9FC0看看做了什么。
3BDF9FC0    51              push    ecx
3BDF9FC1    8B4424 08       mov     eax, dword ptr [esp+8]
3BDF9FC5    53              push    ebx
3BDF9FC6    85C0            test    eax, eax
3BDF9FC8    C64424 06 00    mov     byte ptr [esp+6], 0
3BDF9FCD    B3 01           mov     bl, 1
3BDF9FCF    C64424 07 00    mov     byte ptr [esp+7], 0
3BDF9FD4    75 05           jnz     short 3BDF9FDB
3BDF9FD6    32C0            xor     al, al
3BDF9FD8    5B              pop     ebx
3BDF9FD9    59              pop     ecx
3BDF9FDA    C3              retn
3BDF9FDB    8A08            mov     cl, byte ptr [eax]               ; 假码长度
3BDF9FDD    33D2            xor     edx, edx
3BDF9FDF    56              push    esi
3BDF9FE0    80F9 01         cmp     cl, 1
3BDF9FE3    BE 01000000     mov     esi, 1
3BDF9FE8    72 7E           jb      short 3BDFA068
3BDF9FEA    57              push    edi
3BDF9FEB    84DB            test    bl, bl
3BDF9FED    74 73           je      short 3BDFA062
3BDF9FEF    66:85D2         test    dx, dx
3BDF9FF2    75 37           jnz     short 3BDFA02B
3BDF9FF4    0FBFCE          movsx   ecx, si
3BDF9FF7    803C01 20       cmp     byte ptr [ecx+eax], 20           ; 空格检查
3BDF9FFB    74 5B           je      short 3BDFA058
3BDF9FFD    8A4C24 0F       mov     cl, byte ptr [esp+F]
3BDFA001    84C9            test    cl, cl
3BDFA003    74 09           je      short 3BDFA00E
3BDFA005    0FBFCE          movsx   ecx, si
3BDFA008    803C01 20       cmp     byte ptr [ecx+eax], 20
3BDFA00C    75 48           jnz     short 3BDFA056
3BDFA00E    66:85D2         test    dx, dx
3BDFA011    75 2A           jnz     short 3BDFA03D
3BDFA013    8A4C24 0E       mov     cl, byte ptr [esp+E]
3BDFA017    84C9            test    cl, cl
3BDFA019    75 22           jnz     short 3BDFA03D
3BDFA01B    0FBFCE          movsx   ecx, si
3BDFA01E    803C01 2D       cmp     byte ptr [ecx+eax], 2D           ; “-”号检查
3BDFA022    75 19           jnz     short 3BDFA03D
3BDFA024    C64424 0E 01    mov     byte ptr [esp+E], 1
3BDFA029    EB 2D           jmp     short 3BDFA058
3BDFA02B  ^ 7E D0           jle     short 3BDF9FFD
3BDFA02D    0FBFCE          movsx   ecx, si
3BDFA030    803C01 20       cmp     byte ptr [ecx+eax], 20
3BDFA034  ^ 75 C7           jnz     short 3BDF9FFD
3BDFA036    C64424 0F 01    mov     byte ptr [esp+F], 1
3BDFA03B    EB 1B           jmp     short 3BDFA058
3BDFA03D    0FBFCE          movsx   ecx, si
3BDFA040    8A0C01          mov     cl, byte ptr [ecx+eax]           ; 取字符
3BDFA043    80F9 30         cmp     cl, 30
3BDFA046    72 0E           jb      short 3BDFA056
3BDFA048    80F9 39         cmp     cl, 39
3BDFA04B    77 09           ja      short 3BDFA056                   ; 是不是在0-9之间
3BDFA04D    42              inc     edx
3BDFA04E    0FBFFA          movsx   edi, dx
3BDFA051    880C07          mov     byte ptr [edi+eax], cl
3BDFA054    EB 02           jmp     short 3BDFA058
3BDFA056    32DB            xor     bl, bl
3BDFA058    66:0FB608       movzx   cx, byte ptr [eax]
3BDFA05C    46              inc     esi
3BDFA05D    66:3BF1         cmp     si, cx
3BDFA060  ^ 7E 89           jle     short 3BDF9FEB                   ; 过滤掉非法字符
3BDFA062    66:85D2         test    dx, dx
3BDFA065    5F              pop     edi
3BDFA066    75 08           jnz     short 3BDFA070
3BDFA068    32DB            xor     bl, bl
3BDFA06A    5E              pop     esi
3BDFA06B    8AC3            mov     al, bl
3BDFA06D    5B              pop     ebx
3BDFA06E    59              pop     ecx
3BDFA06F    C3              retn
3BDFA070    8BCA            mov     ecx, edx
3BDFA072    8810            mov     byte ptr [eax], dl
3BDFA074    81E1 FF000000   and     ecx, 0FF
3BDFA07A    84DB            test    bl, bl
3BDFA07C    C64401 01 00    mov     byte ptr [ecx+eax+1], 0
3BDFA081    74 27           je      short 3BDFA0AA
3BDFA083    66:83FA 0A      cmp     dx, 0A                           ; 假码长度是否大于10位
3BDFA087    7F 0C           jg      short 3BDFA095
3BDFA089    40              inc     eax
3BDFA08A    50              push    eax
3BDFA08B    E8 62FE0000     call    <jmp.&MSVCRT.atol>               ; 字符串转数值
软件比较人性化,输入的如果有非数字的其他字符,则过滤掉。然后做完数值转16进制。继续返回,来到:
3BDF8B65    8B56 28         mov     edx, dword ptr [esi+28]
3BDF8B68    50              push    eax
3BDF8B69    8B46 24         mov     eax, dword ptr [esi+24]
3BDF8B6C    52              push    edx
3BDF8B6D    50              push    eax
3BDF8B6E    51              push    ecx
3BDF8B6F    E8 AC010000     call    3BDF8D20                         ; 关键call
3BDF8B74    8B4E 04         mov     ecx, dword ptr [esi+4]
3BDF8B77    83C4 1C         add     esp, 1C
3BDF8B7A    3C 01           cmp     al, 1                            ; al为标志位,爆破点
3BDF8B7C    8B51 0C         mov     edx, dword ptr [ecx+C]
3BDF8B7F    8B02            mov     eax, dword ptr [edx]
3BDF8B81    75 58           jnz     short 3BDF8BDB                   ; 关键跳,跳了就死
3BDF8B83    8B4E 20         mov     ecx, dword ptr [esi+20]
3BDF8B86    56              push    esi
3BDF8B87    8948 0C         mov     dword ptr [eax+C], ecx
3BDF8B8A    8B56 04         mov     edx, dword ptr [esi+4]
3BDF8B8D    8B42 0C         mov     eax, dword ptr [edx+C]
3BDF8B90    8B56 24         mov     edx, dword ptr [esi+24]
3BDF8B93    8B08            mov     ecx, dword ptr [eax]
3BDF8B95    8951 10         mov     dword ptr [ecx+10], edx
3BDF8B98    8B46 04         mov     eax, dword ptr [esi+4]
3BDF8B9B    8B48 0C         mov     ecx, dword ptr [eax+C]
3BDF8B9E    8B46 28         mov     eax, dword ptr [esi+28]
3BDF8BA1    8B11            mov     edx, dword ptr [ecx]
3BDF8BA3    8942 14         mov     dword ptr [edx+14], eax
3BDF8BA6    E8 65B7FDFF     call    3BDD4310
3BDF8BAB    68 1C59E23B     push    3BE2591C                         ; ASCII "***"
3BDF8BB0    68 1859E23B     push    3BE25918                         ; ASCII "**"
3BDF8BB5    68 1459E23B     push    3BE25914
3BDF8BBA    68 50D0E13B     push    3BE1D050                         ; ASCII "India Ink"
3BDF8BBF    E8 4C89FEFF     call    3BDE1510
3BDF8BC4    68 F858E23B     push    3BE258F8                         ; ASCII "THANKYOU",注册成功提示
3BDF8BC9    E8 A28CFEFF     call    3BDE1870
有标志位比较,显然可以跟进关键call看看算法了。核心算法只有寥寥几句。
3BDF8CEE    81FE 2B0A6F61   cmp     esi, 616F0A2B                    ; esi为假码数值
3BDF8CF4    7E 0C           jle     short 3BDF8D02                   ; 应小于等于0x616F0A2B
3BDF8CF6    81FE 320A6F61   cmp     esi, 616F0A32
3BDF8CFC    7D 04           jge     short 3BDF8D02
3BDF8CFE    32C0            xor     al, al
3BDF8D00    5E              pop     esi
3BDF8D01    C3              retn
3BDF8D02    8BCE            mov     ecx, esi                         ; 假码数值
3BDF8D04    8BC6            mov     eax, esi
3BDF8D06    83E1 1F         and     ecx, 1F                          ; and 0x1F
3BDF8D09    5E              pop     esi
3BDF8D0A    99              cdq
3BDF8D0B    81C1 0D400000   add     ecx, 400D                        ; 结果+0x400d
3BDF8D11    F7F9            idiv    ecx                              ; 假码数值除以上边的数值
3BDF8D13    81FA A6000000   cmp     edx, 0A6                         ; 余数应等于0xA6
3BDF8D19    0F94C0          sete    al
3BDF8D1C    C3              retn
【算法总结】算法可以用一个方程式描述:
X mod((X and 1F)+0x400D)=0xA6
就这么简单。
写这篇破文的目的之一也是想用用Delphi。这个软件的算法相对简单,适合用来实践中学习。
以前只会用VB写注册机,看了两天delphi的书,觉得和VB比较相像,但功能比VB强大,一边google一边写,权作练习吧。
Delphi代码如下:
procedure TForm1.BitBtn1Click(Sender: TObject);
    Var
      x,y,z:longint;
begin
     Randomize  ;
     x:=random(100)*1017010;
     For  z:=x To (x+1000000) do
        Begin
            y:=z and 31;
            if  (z mod (y+16397))=166 then
              Begin
                   Edit1.Text:=IntToStr(z);
                   Break;
              end;
        end;
end;
end.
想了好久没想到完美的转换方程式的方法,最后干脆用枚举来解决了。软件对注册码的最小值有限制,有兴趣的可以自己跟一下。
代码也很短,写的也很快,但是要命的是对delphi严格的限制不适应,一直在为冒号和分号而奔忙。
两组可用的注册码:
47819650
77361916
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

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

156283559 发表于 2010-5-27 20:13
坐坐沙发
chinasmu 发表于 2010-5-29 09:14
kankan007 发表于 2010-6-11 10:44
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 07:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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