飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 15859|回复: 5

[原创] 【原创】PhotoZoomPro2 2.1.8 脱壳修复与写代码破解(合精版)

[复制链接]
  • TA的每日心情
    奋斗
    2016-1-13 12:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2007-3-31 21:17:03 | 显示全部楼层 |阅读模式
    【文章标题】: PhotoZoomPro2 2.1.8 脱壳修复与破解(合精版)
    【文章作者】: [qyc]小Q
    【作者主页】: http://www.iv2.cn
    【软件名称】: PhotoZoomPro2
    【软件大小】: 3.35M
    【下载地址】: 自己搜索下载
    【加壳方式】: ASProtect 2.1x SKE -> Alexey Solodovnikov-->Version: ASProtect 1.35 build 04.25 or 06.26 Release [Extract]
    【保护方式】: 加密壳
    【编写语言】: VC++
    【使用工具】: PEID IRE OD
    【操作平台】: Win XP SP2
    【软件介绍】: PhotoZoomPro2是一个图片放大软件
    【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
    --------------------------------------------------------------------------------
    【详细过程】
            原贴 : http://bbs.pediy.com/showthread.php?threadid=37499  这个贴只是修正! 让文章完整一些!
       
            PhotoZoomPro2是一个图片放大软件,小Q一直以来都是用最低版本的!知到有最新版!可以就是没有用的机会,因为没有破解!
        自己以前脱壳技术水平又不高一直没对它下手! 直到Aspr2.XX_IATfixer_v2.2s.osc的出现,才给了偶这次动它的机会,今天
        公司叫偶放大图片就再次下PhotoZoomPro2 最新版本是: 2.1.8
          
        PEID--->ASProtect 2.1x SKE -> Alexey Solodovnikov
          
        插件--->Version: ASProtect 1.35 build 04.25 or 06.26 Release [Extract]
          
        1. 解决问题: 变态自校验
          
        OD 加载 程序 Aspr2.XX_IATfixer_v2.2s.osc 脚本完全dumped,IRE修复IAT,一个指针未修复,用插件搞定! 下面是精彩部分
          
        运行程序发现出错不能运行,一开始还以为壳偷了代码,认为10分变态,我所知ASProtect 1.35是不会偷代码的!
       
        脱壳后变态入口:
        00584FEF > $  E8 190D0100   call    00595D0D-------->F8死// F7进
        00584FF4   .^ E9 16FEFFFF   jmp     00584E0F
        00584FF9   $  6A 0C         push    0C
        00584FFB   .  68 F0D16F00   push    006FD1F0
        00585000   .  E8 DFC40000   call    005914E4
        00585005   .  8B75 08       mov     esi, [ebp+8]
        =================================================================
        来到:
        =================================================================
        00584F47   .  85C0          test    eax, eax
        00584F49   .  7D 08         jge     short 00584F53
        00584F4B   .  6A 09         push    9
        00584F4D   .  E8 90330000   call    005882E2
        00584F52   .  59            pop     ecx
        00584F53   >  53            push    ebx
        00584F54   .  E8 A5340000   call    005883FE--------------->内存异常!程序不可读! F7进
        00584F59   .  59            pop     ecx
        00584F5A   .  85C0          test    eax, eax
        00584F5C   .  74 07         je      short 00584F65
        ================================================================
        下面就是变态过程:
        ================================================================
        00588456  |. /73 0F         jnb     short 00588467
        00588458  |> |8B06          /mov     eax, [esi]
        0058845A  |. |85C0          |test    eax, eax
        0058845C  |. |74 02         |je      short 00588460
        0058845E  |. |FFD0          |call    eax    --------> 相当变态的动态地址(异常将在这里发生)!
        00588460  |> |83C6 04       |add     esi, 4
        00588463  |. |3BF7          |cmp     esi, edi
        00588465  |.^|72 F1         \jb      short 00588458------->来回不知多少次,你别用F8了!
        00588467  |> \833D BC1F7500>cmp     dword ptr [751FBC], 0
    ============================================================================
        直接 F9 后,错误提示内存00FC0000不可读.见图! 好伽伙,这招毒啊!
          
    ============================================================================
        点确定后! 看堆栈: (这是由CCDebuger的提示!,错误精确定位法)
    ============================================================================
        0012FF14   005BFC10  返回到 dumped_.005BFC10 来自 dumped_.0058CD38---->这里回车
        0012FF18   005EB69F  返回到 dumped_.005EB69F 来自 dumped_.005BFC06
        0012FF1C   00632E7C  ASCII "file" -------------------->这分明就是在检验文件吗!
    ============================================================================
        005BFC06  /$  B8 A3125E00   mov     eax, 005E12A3
        005BFC0B  |.  E8 28D1FCFF   call    0058CD38--------->这里一定是出错地方 (F2下断)
        005BFC10  |.  51            push    ecx-------------->找到这里
        005BFC11  |.  56            push    esi
        005BFC12  |.  8BF1          mov     esi, ecx
    ============================================================================
        重载进入call    0058CD38 :
    ============================================================================
        0058CD38  /$  68 0000FC00   push    0FC0000------>是不是错误提示地址啊
        0058CD3D  \.  C3            retn
        0058CD3E      AE            db      AE
        0058CD3F      2D            db      2D                               ;  CHAR '-'
        0058CD40      1B            db      1B
        0058CD41      77            db      77                               ;  CHAR 'w'
        0058CD42      BD            db      BD
        0058CD43      5E            db      5E                               ;  CHAR '^'
        0058CD44      8B            db      8B
        0058CD45      BC            db      BC
        0058CD46      19            db      19
        0058CD47      42            db      42                               ;  CHAR 'B'
        0058CD48      B5            db      B5
        0058CD49      35            db      35                               ;  CHAR '5'
        0058CD4A      E4            db      E4
        0058CD4B      AF            db      AF
        0058CD4C      57            db      57                               ;  CHAR 'W'
        0058CD4D      E7            db      E7
        0058CD4E      C6            db      C6
        0058CD4F      2C            db      2C                               ;  CHAR ','
        0058CD50      2E            db      2E                               ;  CHAR '.'
        0058CD51      22            db      22                               ;  CHAR '"'
        0058CD52      D5            db      D5
        0058CD53      0A            db      0A
        0058CD54      D9            db      D9
        0058CD55      BD            db      BD
        0058CD56      CA            db      CA
        0058CD57      CC            int3
    ============================================================================
        执行push 0FC0000后就是空白代码,程序出错,程序被WINDOWS 关闭,所有问题连接而来(狂晕中).
          
        55555,要是偶能用程序语言写出代码就好罗,可是写不出,呵呵!
          
        以上所知!找到了问题所在,那就是出注意解决问题啦! 各位考考你们,让想到啦,请举手哈(鸡蛋青菜全向偶飞来!不要,我马上解决)
       
        解决问题很简单:跟踪原程序(哈哈!大家别扁偶啊,老大们都是这样做的)
    ============================================================================
        以下代码是由cyto兄提供的(代码大小字节写入刚刚好) (不过用我跟到的代码也行,不过你得找空间写,详情请见原贴)
    ============================================================================
        Emulate Standard system Functions.
        可以在原处还原.
        0058CD38     6A FF              push -1
        0058CD3A     50                 push eax
        0058CD3B     64:A1 00000000     mov eax,dword ptr fs:[0]
        0058CD41     50                 push eax
        0058CD42     8B4424 0C          mov eax,dword ptr ss:[esp+C]
        0058CD46     64:8925 00000000   mov dword ptr fs:[0],esp
        0058CD4D     896C24 0C          mov dword ptr ss:[esp+C],ebp
        0058CD51     8D6C24 0C          lea ebp,dword ptr ss:[esp+C]
        0058CD55     50                 push eax
        0058CD56     C3                 retn
    ============================================================================
        16进:
       
        6A FF 50 64 A1 00 00 00 00 50 8B 44 24 0C 64 89 25 00 00 00 00 89 6C 24 0C 8D 6C 24 0C 50 C3
       
    ============================================================================
        OK ,保存后,测试运行程序(已可运行!)
    ============================================================================
        以下代码machenglin兄提供修改(不过,程序已可运行),得问一下machenglin兄为何要修改???
        第1处修改:
        原来是:
        00400138    0010              add byte ptr ds:[eax],dl
        0040013A    0000              add byte ptr ds:[eax],al
        0040013C    0002              add byte ptr ds:[eax],dl
        修改为:
        00400138    0010              add byte ptr ds:[eax],dl
        0040013A    0000              add byte ptr ds:[eax],al
        0040013C    0010              add byte ptr ds:[eax],dl
    ============================================================================
        第2处修改:
        原来是:
        00720078    0000              add byte ptr ds:[eax],al
        0072007A    0000              add byte ptr ds:[eax],al
        0072007C  ^ 70 A7             jo short un_Photo.00720025
        0072007E    E3 00             jecxz short un_Photo.00720080
        修改为:
        00720078    0000              add byte ptr ds:[eax],al
        0072007A    0000              add byte ptr ds:[eax],al
        0072007C    0000              add byte ptr ds:[eax],al
        0072007E    0000              add byte ptr ds:[eax],al
    ============================================================================
       
       
        2.解决问题:  写代码进行破解!
    ============================================================================
        下面是破解过程(花了小Q两天的时间,与你分享一下):
    ============================================================================
        直接运行程序进行假码分析破解! bp MessageBoxA 断下返回如下:
       
        004C1D12   > \FFB6 C8010000 push    dword ptr [esi+1C8]
        004C1D18   .  8B86 A0010000 mov     eax, [esi+1A0]
        004C1D1E   .  8B0F          mov     ecx, [edi]
        004C1D20   .  8B13          mov     edx, [ebx]
        004C1D22   .  50            push    eax
        004C1D23   .  51            push    ecx
        004C1D24   .  52            push    edx
        004C1D25   .  FF96 B4010000 call    [esi+1B4]---------------->这里重点(等一下要重载进入) F2下断
        004C1D2B   .  83C4 10       add     esp, 10
        004C1D2E   .  84C0          test    al, al
        004C1D30   .^ 0F84 52FFFFFF je      004C1C88----------------->不跳就出现注册成功(不过没用的)
        004C1D36   .  68 884B6300   push    00634B88                         ;  ASCII "Message"
        004C1D3B   .  8D4D E4       lea     ecx, [ebp-1C]
        004C1D3E   .  E8 ADF5F3FF   call    004012F0
        004C1D43   .  68 489A6200   push    00629A48                         ;  ASCII "Unlocking successful!"
        004C1D48   .  C745 FC 07000>mov     dword ptr [ebp-4], 7
        004C1D4F   .  E8 93780100   call    004D95E7
        004C1D54   .  59            pop     ecx
        004C1D55   .  50            push    eax
        004C1D56   .  8D4D E0       lea     ecx, [ebp-20]
       
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        004C1E60   .  E8 ABF4F4FF   call    00411310
        004C1E65   .  834D FC FF    or      dword ptr [ebp-4], FFFFFFFF >>>>返回这里,看上面
        004C1E69   .  8D4D EC       lea     ecx, [ebp-14]
        004C1E6C   .  E8 DFF4F3FF   call    00401350
        004C1E71   .  32C0          xor     al, al
    ============================================================================
        进入call   [esi+1B4] 向下看:|
    ============================================================================
        004023A0   .  8A4C24 10     mov     cl, [esp+10]
        004023A4   .  33C0          xor     eax, eax
        004023A6   .  F6C1 07       test    cl, 7
        004023A9   .  75 07         jnz     short 004023B2
        004023AB   .  B8 04000000   mov     eax, 4
        004023B0   .  EB 0A         jmp     short 004023BC
        004023B2   >  F6C1 01       test    cl, 1
        004023B5   .  75 05         jnz     short 004023BC
        004023B7   .  B8 02000000   mov     eax, 2
        004023BC   >  8B4C24 0C     mov     ecx, [esp+C]
        004023C0   .  8B5424 08     mov     edx, [esp+8]
        004023C4   .  51            push    ecx                              ; /Arg5
        004023C5   .  8B4C24 08     mov     ecx, [esp+8]                     ; |
        004023C9   .  52            push    edx                              ; |Arg4-->邮件地址
        004023CA   .  51            push    ecx                              ; |Arg3-->用户名
        004023CB   .  BA 06000000   mov     edx, 6                           ; |
        004023D0   .  2BD0          sub     edx, eax                         ; |
        004023D2   .  52            push    edx                              ; |Arg2 假码
        004023D3   .  68 04507000   push    00705004                         ; |Arg1 = 00705004
        004023D8   .  E8 1CCD0B00   call    004BF0F9  ------------>重点进行比较解码! F7 进
        004023DD   .  83C4 14       add     esp, 14
        004023E0   .  85C0          test    eax, eax
        004023E2   .  A3 90FF7100   mov     [71FF90], eax
        004023E7   .  0F9DC0        setge   al
        004023EA   .  C3            retn
    ============================================================================
        004BF0F9  /$  55            push    ebp
        004BF0FA  |.  8BEC          mov     ebp, esp
        004BF0FC  |.  56            push    esi
        004BF0FD  |.  33F6          xor     esi, esi
        004BF0FF  |.  3975 0C       cmp     [ebp+C], esi
        004BF102  |.  7E 21         jle     short 004BF125
        004BF104  |>  FF75 18       /push    dword ptr [ebp+18]
        004BF107  |.  8B45 08       |mov     eax, [ebp+8]
        004BF10A  |.  FF75 14       |push    dword ptr [ebp+14]
        004BF10D  |.  FF75 10       |push    dword ptr [ebp+10]
        004BF110  |.  FF34B0        |push    dword ptr [eax+esi*4]
        004BF113  |.  E8 34FDFFFF   |call    004BEE4C-------------->比较,算法全在这里进行!(小Q跟得大多了,不进)
        004BF118  |.  83C4 10       |add     esp, 10
        004BF11B  |.  84C0          |test    al, al
        004BF11D  |.  75 0C         |jnz     short 004BF12B--->呵呵//很重要,注册比较成功,第一个将会跳!
        004BF11F  |.  46            |inc     esi              ;要不然就再比较其它操作系统的注册码! 这里 JMP 保存
        004BF120  |.  3B75 0C       |cmp     esi, [ebp+C]
        004BF123  |.^ 7C DF         \jl      short 004BF104
        004BF125  |>  83C8 FF       or      eax, FFFFFFFF
        004BF128  |>  5E            pop     esi
        004BF129  |.  5D            pop     ebp
        004BF12A  |.  C3            retn
        004BF12B  |>  8BC6          mov     eax, esi
        004BF12D  \.^ EB F9         jmp     short 004BF128
      ============================================================================
        保存后进行注册!说是成功了后软件被关闭了//哈哈//再运行//软件被无情关闭,软件作者毒啊! 以下代码小Q跟了一天!
    ============================================================================
        004059AB   .  E8 B6990B00   call    004BF366---------------> 这里检验是否进行注册过
        004059B0   .  83C4 10       add     esp, 10
        004059B3   .  84C0          test    al, al
        004059B5   .  0F84 1C010000 je      00405AD7--------->没注册就跳(为什么我没注册修改上面004BF11D,不会关闭,就是这里跳了,呵呵)
        004059BB   .  8B4C24 44     mov     ecx, [esp+44]
        004059BF   .  8B5424 4C     mov     edx, [esp+4C]
        004059C3   .  8B4424 54     mov     eax, [esp+54]
        004059C7   .  51            push    ecx                              ; /Arg5
        004059C8   .  52            push    edx                              ; |Arg4
        004059C9   .  50            push    eax                              ; |Arg3
        004059CA   .  6A 06         push    6                                ; |Arg2 = 00000006
        004059CC   .  68 04507000   push    00705004                         ; |Arg1 = 00705004
        004059D1   .  E8 23970B00   call    004BF0F9 --------->这里检验注册码是正确(也是检验老注册或被放水的注册码)
        004059D6   .  83C4 14       add     esp, 14
        004059D9   .  85C0          test    eax, eax
        004059DB   .  A3 00507000   mov     [705000], eax
        004059E0   .  7C 3C         jl      short 00405A1E---->放水的,假的注册码,都会跳去告诉你此注册非法
        004059E2   .  8B4C24 54     mov     ecx, [esp+54]
        004059E6   .  51            push    ecx
        004059E7   .  8D8D AC000000 lea     ecx, [ebp+AC]
        004059ED   .  E8 3EE20200   call    00433C30
        004059F2   .  8B5424 4C     mov     edx, [esp+4C]
        004059F6   .  52            push    edx
        004059F7   .  8D8D B0000000 lea     ecx, [ebp+B0]
        004059FD   .  E8 2EE20200   call    00433C30
        00405A02   .  8B4424 44     mov     eax, [esp+44]
        00405A06   .  50            push    eax
        00405A07   .  8D8D B4000000 lea     ecx, [ebp+B4]
        00405A0D   .  E8 1EE20200   call    00433C30
        00405A12   .  C685 A9000000>mov     byte ptr [ebp+A9], 1
        00405A19   .  E9 B9000000   jmp     00405AD7
        00405A1E   .  A1 4CE27000   mov     eax, [70E24C]
        00405A23   .  85C0          test    eax, eax
        00405A25   .  75 05         jnz     short 00405A2C
        00405A27   .  B8 55F55E00   mov     eax, 005EF555
        00405A2C   >  8B0D 78D76200 mov     ecx, [62D778]
        00405A32   .  51            push    ecx
        00405A33   .  6A 00         push    0
        00405A35   .  50            push    eax
        00405A36   .  8D4C24 20     lea     ecx, [esp+20]
        00405A3A   .  E8 E1E00200   call    00433B20
        00405A3F   .  B3 21         mov     bl, 21
        00405A41   .  68 1C035F00   push    005F031C                    ;  ASCII "The unlock information you entered is invalid."
        00405A46   .  889C24 A80000>mov     [esp+A8], bl
        00405A4D   .  E8 953B0D00   call    004D95E7
        00405A52   .  83C4 04       add     esp, 4
        00405A55   .  85C0          test    eax, eax
        00405A57   .  75 05         jnz     short 00405A5E
        00405A59   .  B8 55F55E00   mov     eax, 005EF555
        00405A5E   >  8B15 78D76200 mov     edx, [62D778]
        00405A64   .  52            push    edx
        00405A65   .  6A 00         push    0
        00405A67   .  50            push    eax
        00405A68   .  8D4C24 30     lea     ecx, [esp+30]
        00405A6C   .  E8 AFE00200   call    00433B20
        00405A71   .  8D4424 14     lea     eax, [esp+14]
        00405A75   .  50            push    eax
        00405A76   .  8D4C24 28     lea     ecx, [esp+28]
        00405A7A   .  6A 00         push    0
        00405A7C   .  51            push    ecx
        00405A7D   .  C68424 B00000>mov     byte ptr [esp+B0], 22
        00405A85   .  E8 F4FA0C00   call    004D557E
        00405A8A   .  8B4C24 30     mov     ecx, [esp+30]
        00405A8E   .  8B41 F4       mov     eax, [ecx-C]
        00405A91   .  83C1 F4       add     ecx, -0C
        00405A94   .  83C4 0C       add     esp, 0C
        00405A97   .  83F8 FF       cmp     eax, -1                          ;  Switch (cases 1..1)
        00405A9A   .  889C24 A40000>mov     [esp+A4], bl
        00405AA1   .  74 0C         je      short 00405AAF
        00405AA3   .  83C0 FF       add     eax, -1
        00405AA6   .  8901          mov     [ecx], eax
        00405AA8   .  75 05         jnz     short 00405AAF
        00405AAA   .  E8 51CE0200   call    00432900                         ;  Case 1 of switch 00405A97
        00405AAF   >  8B4C24 14     mov     ecx, [esp+14]                    ;  Default case of switch 00405A97
        00405AB3   .  8B41 F4       mov     eax, [ecx-C]
        00405AB6   .  83C1 F4       add     ecx, -0C
        00405AB9   .  83F8 FF       cmp     eax, -1                          ;  Switch (cases 1..1)
        00405ABC   .  C68424 A40000>mov     byte ptr [esp+A4], 20
        00405AC4   .  74 0C         je      short 00405AD2
        00405AC6   .  83C0 FF       add     eax, -1
        00405AC9   .  8901          mov     [ecx], eax
        00405ACB   .  75 05         jnz     short 00405AD2
        00405ACD   .  E8 2ECE0200   call    00432900                         ;  Case 1 of switch 00405AB9
        00405AD2   >  E8 AE520D00   call    004DAD85                         ;  Default case of switch 00405AB9
        00405AD7   >  8B17          mov     edx, [edi]
        00405AD9   .  8B82 10020000 mov     eax, [edx+210]
        00405ADF   .  6A 0E         push    0E
        00405AE1   .  8BCF          mov     ecx, edi
        00405AE3   .  FFD0          call    eax
        00405AE5   .  8B17          mov     edx, [edi]
        00405AE7   .  8B82 88020000 mov     eax, [edx+288]
        00405AED   .  6A 01         push    1
        00405AEF   .  8BCF          mov     ecx, edi
        00405AF1   .  FFD0          call    eax
        00405AF3   .  8D4C24 28     lea     ecx, [esp+28]
        00405AF7   .  51            push    ecx                              ; /Arg1
        00405AF8   .  8BCD          mov     ecx, ebp                         ; |
        00405AFA   .  E8 21D7FFFF   call    00403220                         ; \3.00403220
        00405AFF   .  8B8D C0000000 mov     ecx, [ebp+C0]
        00405B05   .  50            push    eax
        00405B06   .  C68424 A80000>mov     byte ptr [esp+A8], 23
        00405B0E   .  E8 2DB60000   call    00411140
        00405B13   .  8B4C24 28     mov     ecx, [esp+28]
        00405B17   .  8B41 F4       mov     eax, [ecx-C]
        00405B1A   .  83C1 F4       add     ecx, -0C
        00405B1D   .  83F8 FF       cmp     eax, -1                          ;  Switch (cases 1..1)
        00405B20   .  C68424 A40000>mov     byte ptr [esp+A4], 20
        00405B28   .  74 0C         je      short 00405B36
        00405B2A   .  83C0 FF       add     eax, -1
        00405B2D   .  8901          mov     [ecx], eax
        00405B2F   .  75 05         jnz     short 00405B36
        00405B31   .  E8 CACD0200   call    00432900                         ;  Case 1 of switch 00405B1D
        00405B36   >  8B85 C0000000 mov     eax, [ebp+C0]                    ;  Default case of switch 00405B1D
        00405B3C   .  8B80 88010000 mov     eax, [eax+188]
        00405B42   .  8B50 38       mov     edx, [eax+38]
        00405B45   .  8D48 38       lea     ecx, [eax+38]
        00405B48   .  8B42 1C       mov     eax, [edx+1C]
        00405B4B   .  FFD0          call    eax
        00405B4D   .  8B17          mov     edx, [edi]
        00405B4F   .  8B82 88000000 mov     eax, [edx+88]
        00405B55   .  6A 01         push    1
        00405B57   .  8BCF          mov     ecx, edi
        00405B59   .  FFD0          call    eax
        00405B5B   .  80BD A9000000>cmp     byte ptr [ebp+A9], 0---------->主程序窗口创建!
        00405B62   .  75 07         jnz     short 00405B6B----------->此JNE,跳就不会注册窗口
        00405B64   .  8BCD          mov     ecx, ebp
        00405B66   .  E8 F5E4FFFF   call    00404060------------->注册窗口
        00405B6B   >  8BCD          mov     ecx, ebp
        00405B6D   .  E8 DEDBFFFF   call    00403750--------------->重点! 解码CALL 刚测试运行也是在这里被关闭的 (F2下断)
        00405B72   .  8D4C24 28     lea     ecx, [esp+28]
        00405B76   .  51            push    ecx
    ============================================================================
        上面 004BF11D  jnz   short 004BF12B 修改成:004BF11D  JMP   short 004BF12B
       
        都会胜利运行到 00405B6D   .  E8 DEDBFFFF   call    00403750
    ============================================================================
        进入 : call    00403750 向下看:|
    ============================================================================
        00403750   $  83EC 2C       sub     esp, 2C
        00403753   .  57            push    edi
        00403754   .  8BF9          mov     edi, ecx
        00403756   .  80BF A9000000>cmp     byte ptr [edi+A9], 0
        0040375D   .  0F84 AD010000 je      00403910
        00403763   .  803D E4FF7100>cmp     byte ptr [71FFE4], 0
        0040376A   .  0F85 A0010000 jnz     00403910
        00403770   .  55            push    ebp
        00403771   .  B8 007D7869   mov     eax, 69787D00
        00403776   .  56            push    esi
        00403777   .  A3 D8FF7100   mov     [71FFD8], eax
        0040377C   .  A3 DCFF7100   mov     [71FFDC], eax
        00403781   .  A3 E0FF7100   mov     [71FFE0], eax
        00403786   .  C705 CCFF7100>mov     dword ptr [71FFCC], 0
        00403790   .  C705 D0FF7100>mov     dword ptr [71FFD0], 17D00
        0040379A   .  C705 D4FF7100>mov     dword ptr [71FFD4], 4787D00
        004037A4   .  8B87 B4000000 mov     eax, [edi+B4]
        004037AA   .  8B8F B0000000 mov     ecx, [edi+B0]
        004037B0   .  8B97 AC000000 mov     edx, [edi+AC]
        004037B6   .  50            push    eax
        004037B7   .  A1 00507000   mov     eax, [705000]
        004037BC   .  51            push    ecx
        004037BD   .  8B0C85 045070>mov     ecx, [eax*4+705004]
        004037C4   .  52            push    edx
        004037C5   .  51            push    ecx
        004037C6   .  6A 06         push    6
        004037C8   .  68 CCFF7100   push    0071FFCC
        004037CD   .  C605 E4FF7100>mov     byte ptr [71FFE4], 1
        004037D4   .  E8 EBC30B00   call    004BFBC4
        004037D9   .  8D5424 24     lea     edx, [esp+24]
        004037DD   .  52            push    edx
        004037DE   .  6A 04         push    4
        004037E0   .  68 CCFF7100   push    0071FFCC
        004037E5   .  E8 E6750C00   call    004CADD0
        004037EA   .  A1 00507000   mov     eax, [705000]
        004037EF   .  8B3485 1C5070>mov     esi, [eax*4+70501C]
        004037F6   .  8BEE          mov     ebp, esi
        004037F8   .  8D5424 30     lea     edx, [esp+30]
        004037FC   .  83C4 24       add     esp, 24
        004037FF   .  33C9          xor     ecx, ecx
        00403801   .  2BEA          sub     ebp, edx
        00403803   >  8D440C 0C     lea     eax, [esp+ecx+C]
        00403807   .  0FB61428      movzx   edx, byte ptr [eax+ebp]
        0040380B   .  3010          xor     [eax], dl
        0040380D   .  0FB6540E 01   movzx   edx, byte ptr [esi+ecx+1]
        00403812   .  3050 01       xor     [eax+1], dl
        00403815   .  0FB6540E 02   movzx   edx, byte ptr [esi+ecx+2]
        0040381A   .  3050 02       xor     [eax+2], dl
        0040381D   .  0FB6540E 03   movzx   edx, byte ptr [esi+ecx+3]
        00403822   .  3050 03       xor     [eax+3], dl
        00403825   .  83C1 04       add     ecx, 4
        00403828   .  83F9 10       cmp     ecx, 10
        0040382B   .^ 7C D6         jl      short 00403803
        0040382D   .  6A 10         push    10
        0040382F   .  8D4424 10     lea     eax, [esp+10]
        00403833   .  50            push    eax
        00403834   .  FF15 7C007200 call    [72007C]----------->注意这里!程序运行到这里就先出错了! 原因是抽掉的GetProcAddress
        0040383A   .  EB 04         jmp     short 00403840     ;得重新指定 (因为脱壳时用插件修复的) 为:call [5EE354]
        0040383C      EB            db      EB
        0040383D      05            db      05
        0040383E   .  8901          mov     [ecx], eax
        00403840   >  6A 68         push    68
        00403842   .  68 20FB5E00   push    005EFB20
        00403847   .  68 28FF7100   push    0071FF28
        0040384C   .  E8 4FCB1200   call    005303A0
        00403851   .  8B8F B4000000 mov     ecx, [edi+B4]
        00403857   .  8B97 B0000000 mov     edx, [edi+B0]
        0040385D   .  8B87 AC000000 mov     eax, [edi+AC]
        00403863   .  51            push    ecx
        00403864   .  8B0D 00507000 mov     ecx, [705000]
        0040386A   .  52            push    edx
        0040386B   .  8B148D 045070>mov     edx, [ecx*4+705004]
        00403872   .  50            push    eax
        00403873   .  52            push    edx
        00403874   .  6A 1A         push    1A
        00403876   .  68 28FF7100   push    0071FF28
        0040387B   .  E8 44C30B00   call    004BFBC4
        00403880   .  83C4 24       add     esp, 24
        00403883   .  68 DC5B500E   push    0E505BDC
        00403888   .  8D4C24 20     lea     ecx, [esp+20]
        0040388C   .  E8 EF3E0C00   call    004C7780
        00403891   .  8D4C24 1C     lea     ecx, [esp+1C]
        00403895   .  E8 B63D0C00   call    004C7650------------->注意这个CALL(跟出解除水印重要数据!)
        0040389A   .  8B0D 00507000 mov     ecx, [705000]
        004038A0   .  8B0C8D B0F85E>mov     ecx, [ecx*4+5EF8B0]
        004038A7   .  330C85 30FF71>xor     ecx, [eax*4+71FF30]
        004038AE   .  83C0 02       add     eax, 2
        004038B1   .  81C1 A01F4000 add     ecx, 00401FA0
        004038B7   .  81E9 A01F4000 sub     ecx, 00401FA0
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!~~~~~~~~~~~~~~~~~~~~~~~~注意以下代码~~~~~~~`
        004038BD   .  E9 47000000   jmp     00403909                                        |
        004038C2      27            db      27                               ;  CHAR '''
        004038C3      77            db      77                               ;  CHAR 'w'
        004038C4   .  64:C3         retn
        004038C6      7E            db      7E                               ;  CHAR '~'
        004038C7      B9            db      B9
        004038C8   .  CB            retf
        004038C9      C1            db      C1
        004038CA      3E            db      3E                               ;  CHAR '>'
        004038CB      71            db      71                               ;  CHAR 'q'
        004038CC      B2            db      B2
        004038CD      84            db      84
        004038CE      77            db      77                               ;  CHAR 'w'
        004038CF      4D            db      4D                               ;  CHAR 'M'
        004038D0      11            db      11
        004038D1      41            db      41                               ;  CHAR 'A'
        004038D2      96            db      96
        004038D3      13            db      13
        004038D4      AB            db      AB
        004038D5      67            db      67                               ;  CHAR 'g'
        004038D6      C0            db      C0
        004038D7      81            db      81
        004038D8   .  5D            pop     ebp
        004038D9   .  C2 74A7       retn    0A774
        004038DC      48            db      48                               ;  CHAR 'H'
        004038DD      AF            db      AF
        004038DE      90            nop
        004038DF      B0            db      B0
        004038E0      D2            db      D2
        004038E1      7B            db      7B                               ;  CHAR '{'
        004038E2      0F            db      0F
        004038E3      33            db      33                               ;  CHAR '3'
        004038E4   .  B5 A7         mov     ch, 0A7
        004038E6   .  5A            pop     edx
        004038E7   .  CB            retf
        004038E8      87            db      87
        004038E9      FC            db      FC
        004038EA      18            db      18
        004038EB      73            db      73                               ;  CHAR 's'
        004038EC      63            db      63                               ;  CHAR 'c'
        004038ED      B4            db      B4
        004038EE      6F            db      6F                               ;  CHAR 'o'
        004038EF      D7            db      D7
        004038F0      7D            db      7D                               ;  CHAR '}'
        004038F1      78            db      78                               ;  CHAR 'x'
        004038F2      04            db      04
        004038F3      80            db      80
        004038F4      13            db      13
        004038F5      AB            db      AB
        004038F6      BB            db      BB
        004038F7      27            db      27                               ;  CHAR '''
        004038F8      6E            db      6E                               ;  CHAR 'n'
        004038F9      E8            db      E8
        004038FA      91            db      91
        004038FB      CC            int3
        004038FC      17            db      17
        004038FD      F4            db      F4
        004038FE      6F            db      6F                               ;  CHAR 'o'
        004038FF      36            db      36                               ;  CHAR '6'
        00403900      92            db      92
        00403901      9C            db      9C
        00403902      35            db      35                               ;  CHAR '5'
        00403903      AA            db      AA
        00403904      C0            db      C0
        00403905      6A            db      6A                               ;  CHAR 'j'
        00403906   .  DF51 B1       fist    word ptr [ecx-4F]
        00403909   >  8BCF          mov     ecx, edi
        0040390B   .  E8 B0FDFFFF   call    004036C0------------->这里你跟进会发现可以跳过未注册字样!
        00403910   >  5F            pop     edi
        00403911   .  83C4 2C       add     esp, 2C
        00403914   .  C3            retn
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~到这里结束~~~~~~~~~~~~~~
    ============================================================================
        注意以上虚线部分,多数代码已作过处理(这又是一天的分析),与放水的注册码的1.2.8版对比后,发现这里本来是要进行解锁的!
       (依据是: 0040390B 处)
       
        下面进行写代码进行解锁 (有很多问题,我不可能在这里说得很清楚,以后代码是我分析了一天的结果写出来的)
       
    ============================================================================
        16进代码如下:
       
        E8 4E EA FF FF 90 90 90 EB 04 4C 41 45 52 8B 8F C0 00 00 00 8B 11 8B 82 D8 02 00 00 FF D0 85 C0
        5E 5D 74 22 8B 10 6A 00 8B C8 8B 82 AC 02 00 00 68 9C 18 00 00 FF D0 85 C0 74 0B 8B 10 8B C8 8B
        42 18 6A 00 FF D0 EB 04 90 90 90 90 8B CF E8 B0 FD FF FF 5F 83 C4 2C C3
       
        >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        简单说一下找解除水印地址方法: 查找所有命令: call   004C7650
        找到的命令
        地址       反汇编                注释
        00403895   call    004C7650----->第一个找到也是我们第一个看到的!
        004C544C   call    004C7650
        004C5584   call    004C7650
        004C7709   call    004C7650----->发现此地黄金10俩(很重要),点击进入
        004C7734   call    004C7650
        004C7754   call    004C7650
        ----------------------------------------------------------------------------------------
        004C7700  /$  56            push    esi               ;  点这里,看动态数据区,本地调用!
        004C7701  |.  8B7424 08     mov     esi, [esp+8]
        004C7705  |.  85F6          test    esi, esi
        004C7707  |.  74 0F         je      short 004C7718
        004C7709  |.  E8 42FFFFFF   call    004C7650
        004C770E  |.  33D2          xor     edx, edx
        004C7710  |.  F7F6          div     esi
        004C7712  |.  5E            pop     esi
        004C7713  |.  8BC2          mov     eax, edx
        004C7715  |.  C2 0400       retn    4
        004C7718  |>  33C0          xor     eax, eax
        004C771A  |.  5E            pop     esi
        004C771B  \.  C2 0400       retn    4
        本地调用来自 00402373, 004BEF32, 004BF1A3, 004BFC8C, 004BFF19, 004C556D, 004C55C7, 004C5618, 004C564F, ...........   
        呵呵!第一个就是要去的地址!
        -----------------------------------------------------------------------------------
        00402310  /$  64:A1 0000000>mov     eax, fs:[0]       ;  开始解除水印
        00402316  |.  6A FF         push    -1
        00402318  |.  68 EE1C5C00   push    005C1CEE
        0040231D  |.  50            push    eax
        0040231E  |.  64:8925 00000>mov     fs:[0], esp
        00402325  |.  B8 01000000   mov     eax, 1
        0040232A  |.  8405 BCFF7100 test    [71FFBC], al
        00402330  |.  56            push    esi
        00402331  |.  57            push    edi
        00402332  |.  75 20         jnz     short 00402354
        00402334  |.  0905 BCFF7100 or      [71FFBC], eax
        0040233A  |.  B9 A0FF7100   mov     ecx, 0071FFA0
        0040233F  |.  C74424 10 000>mov     dword ptr [esp+10>
        00402347  |.  E8 84540C00   call    004C77D0
        0040234C  |.  C74424 10 FFF>mov     dword ptr [esp+10>
        00402354  |>  BF 2CE27000   mov     edi, 0070E22C
        00402359  |.  8DA424 000000>lea     esp, [esp]
        00402360  |>  8B37          /mov     esi, [edi]
        00402362  |.  81EE 3C3C3D3E |sub     esi, 3E3D3C3C
        00402368  |.  8BC6          |mov     eax, esi
        0040236A  |.  C1E8 10       |shr     eax, 10
        0040236D  |.  50            |push    eax
        0040236E  |.  B9 A0FF7100   |mov     ecx, 0071FFA0
        00402373  |.  E8 88530C00   |call    004C7700         ;  查看到这里
        00402378  |.  03C6          |add     eax, esi
        0040237A  |.  8907          |mov     [edi], eax
        0040237C  |.  83C7 04       |add     edi, 4
        0040237F  |.  81FF 4CE27000 |cmp     edi, 0070E24C
        00402385  |.^ 7C D9         \jl      short 00402360
        00402387  |.  8B4C24 08     mov     ecx, [esp+8]
        0040238B  |.  5F            pop     edi
        0040238C  |.  64:890D 00000>mov     fs:[0], ecx
        00402393  |.  5E            pop     esi
        00402394  |.  83C4 0C       add     esp, 0C
        00402397  \.  C3            retn
        <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ============================================================================

        从004038BD写到00403908 如下:
    ============================================================================

        004038BD      E8 4EEAFFFF   call    00402310 ;  进行解除水印! 也许你会问这地址怎得到的?(呵呵,远在天边,近在眼前),上面讲的就是
        004038C2      90            nop              ;  NOP占位|  呵呵,就是00403895处的 call 004C7650 入手的
        004038C3      90            nop              ;  NOP占位|
        004038C4      90            nop              ;  NOP占位|
        004038C5      EB 04         jmp     short 004038CB
        004038C7      4C            dec     esp
        004038C8      41            inc     ecx
        004038C9      45            inc     ebp
        004038CA      52            push    edx
        004038CB      8B8F C0000000 mov     ecx, [edi+C0]
        004038D1      8B11          mov     edx, [ecx]
        004038D3      8B82 D8020000 mov     eax, [edx+2D8]
        004038D9      FFD0          call    eax            
        004038DB      85C0          test    eax, eax
        004038DD      5E            pop     esi
        004038DE      5D            pop     ebp
        004038DF      74 22         je      short 00403903
        004038E1      8B10          mov     edx, [eax]
        004038E3      6A 00         push    0
        004038E5      8BC8          mov     ecx, eax
        004038E7      8B82 AC020000 mov     eax, [edx+2AC]
        004038ED      68 9C180000   push    189C
        004038F2      FFD0          call    eax               ---->设置注册标致
        004038F4      85C0          test    eax, eax
        004038F6      74 0B         je      short 00403903
        004038F8      8B10          mov     edx, [eax]
        004038FA      8BC8          mov     ecx, eax
        004038FC      8B42 18       mov     eax, [edx+18]
        004038FF      6A 00         push    0
        00403901      FFD0          call    eax                   ;  灰化菜单"解码"
        00403903      EB 04         jmp     short 00403909
        00403905      90            nop                           ;  NOP占位|
        00403906      90            nop
        00403907      90            nop
        00403908      90            nop                           ;  NOP占位|
        00403909      8BCF          mov     ecx, edi              ;  原来的
        0040390B      E8 B0FDFFFF   call    004036C0              ;  解除"未注册"字样等
        00403910      5F            pop     edi
        00403911      83C4 2C       add     esp, 2C
        00403914      C3            retn
        ============================================================================
        以上代码,你们自己理解一下哈,小Q就不多说了! 保存后,软件就是完全版了,哈哈! 最好的文章与你分享 ! 2.1.8原创破解权小Q保留!
       (不提供破解文件)
       
        历经3天的分析//终于有了一个结果! 心里有说不出的高兴啊! 我希望大家有时间跟贴谈一下水印的解除有多少相关函数?
       
        感谢VolX的Aspr2.XX_IATfixer_v2.2s.osc脚本!没有你脚本,就没有这文章!   
        感谢看雪 cyto兄提供的(脱壳后的校验)在原处还原经典代码 和 machenglin兄的两处修改! 与 CCDebuger的提示!
       
        谢谢你看到这里! 有空来偶的小站玩玩  http://www.iv2.cn (艾微儿)
       
                                                                       By [qyc]小Q  iv2.cn 2007/1/9/12:50
      
      
       【经验总结】
       [理解财富][创造财富]其实财富就在你身边,关键是你要去发现它!每一天的时间总是是你的!没有timerstop.com.坚持就是胜利!
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-1-13 12:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2007-3-31 21:17:56 | 显示全部楼层
    PhotoZoomPro2 2.1.8 Photoshop插件成功破解!

    要把扩展名改为DLL ,用 Aspr2.XX_unpacker_v1.0 进行脱壳

    感谢 VolX ,你的脚本大强啦!

    破解过程都差不多

    以下数据可以帮你快速定位修改:
    一处:
    83 C4 10 84 C0 75 0C 46 3B 75 0C
    二处:
    83C41084C0

    找到后,你就可修改啦!  过程很简单哈(偶不说罗)

    你知到调试Photoshop这个大伽伙是会死人的!

    呵呵,偶还有一处(注册按钮)没找到代码进行灰化   /:12

    插件版处理图片好像很快哦  /:13
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-3-29 16:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2007-3-31 21:35:09 | 显示全部楼层
    沙发.虽然我看不懂但还是支持.下来学习!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-3-31 21:57:30 | 显示全部楼层
    好文,谢谢兄弟提供这么好的文章!/:08
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    4 小时前
  • 签到天数: 2241 天

    [LV.Master]伴坛终老

    发表于 2007-4-2 08:32:25 | 显示全部楼层

    PhotoZoomPro2 2.1.8 脱壳修复与写代码破解

    分析的很清晰,打印出来漫漫的看/:08
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2020-8-31 23:46
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2007-4-2 13:23:24 | 显示全部楼层
    看起来满大的!!我比较喜欢图片....嘿嘿
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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