small-q 发表于 2007-3-31 21:17:03

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

【文章标题】: PhotoZoomPro2 2.1.8 脱壳修复与破解(合精版)
【文章作者】: 小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
【保护方式】: 加密壳
【编写语言】: 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
      
    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,
    =================================================================
    来到:
    =================================================================
    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,
    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 , 0
============================================================================
    直接 F9 后,错误提示内存00FC0000不可读.见图! 好伽伙,这招毒啊!
       http://bbs.pediy.com/upload/2006/4/image/bug.jpg_540.jpg
============================================================================
    点确定后! 看堆栈: (这是由CCDebuger的提示!,错误精确定位法)
============================================================================
    0012FF14   005BFC10返回到 dumped_.005BFC10 来自 dumped_.0058CD38---->这里回车
    0012FF18   005EB69F返回到 dumped_.005EB69F 来自 dumped_.005BFC06
    0012FF1C   00632E7CASCII "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:
    0058CD41   50               push eax
    0058CD42   8B4424 0C          mov eax,dword ptr ss:
    0058CD46   64:8925 00000000   mov dword ptr fs:,esp
    0058CD4D   896C24 0C          mov dword ptr ss:,ebp
    0058CD51   8D6C24 0C          lea ebp,dword ptr ss:
    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:,dl
    0040013A    0000            add byte ptr ds:,al
    0040013C    0002            add byte ptr ds:,dl
    修改为:
    00400138    0010            add byte ptr ds:,dl
    0040013A    0000            add byte ptr ds:,al
    0040013C    0010            add byte ptr ds:,dl
============================================================================
    第2处修改:
    原来是:
    00720078    0000            add byte ptr ds:,al
    0072007A    0000            add byte ptr ds:,al
    0072007C^ 70 A7             jo short un_Photo.00720025
    0072007E    E3 00             jecxz short un_Photo.00720080
    修改为:
    00720078    0000            add byte ptr ds:,al
    0072007A    0000            add byte ptr ds:,al
    0072007C    0000            add byte ptr ds:,al
    0072007E    0000            add byte ptr ds:,al
============================================================================
   
   
    2.解决问题:写代码进行破解!
============================================================================
    下面是破解过程(花了小Q两天的时间,与你分享一下):
============================================================================
    直接运行程序进行假码分析破解! bp MessageBoxA 断下返回如下:
   
    004C1D12   > \FFB6 C8010000 push    dword ptr
    004C1D18   .8B86 A0010000 mov   eax,
    004C1D1E   .8B0F          mov   ecx,
    004C1D20   .8B13          mov   edx,
    004C1D22   .50            push    eax
    004C1D23   .51            push    ecx
    004C1D24   .52            push    edx
    004C1D25   .FF96 B4010000 call    ---------------->这里重点(等一下要重载进入) 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,
    004C1D3E   .E8 ADF5F3FF   call    004012F0
    004C1D43   .68 489A6200   push    00629A48                         ;ASCII "Unlocking successful!"
    004C1D48   .C745 FC 07000>mov   dword ptr , 7
    004C1D4F   .E8 93780100   call    004D95E7
    004C1D54   .59            pop   ecx
    004C1D55   .50            push    eax
    004C1D56   .8D4D E0       lea   ecx,
   
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    004C1E60   .E8 ABF4F4FF   call    00411310
    004C1E65   .834D FC FF    or      dword ptr , FFFFFFFF >>>>返回这里,看上面
    004C1E69   .8D4D EC       lea   ecx,
    004C1E6C   .E8 DFF4F3FF   call    00401350
    004C1E71   .32C0          xor   al, al
============================================================================
    进入call    向下看:|
============================================================================
    004023A0   .8A4C24 10   mov   cl,
    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,
    004023C0   .8B5424 08   mov   edx,
    004023C4   .51            push    ecx                              ; /Arg5
    004023C5   .8B4C24 08   mov   ecx,                      ; |
    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   , 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   , esi
    004BF102|.7E 21         jle   short 004BF125
    004BF104|>FF75 18       /push    dword ptr
    004BF107|.8B45 08       |mov   eax,
    004BF10A|.FF75 14       |push    dword ptr
    004BF10D|.FF75 10       |push    dword ptr
    004BF110|.FF34B0      |push    dword ptr
    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,
    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,
    004059BF   .8B5424 4C   mov   edx,
    004059C3   .8B4424 54   mov   eax,
    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   , eax
    004059E0   .7C 3C         jl      short 00405A1E---->放水的,假的注册码,都会跳去告诉你此注册非法
    004059E2   .8B4C24 54   mov   ecx,
    004059E6   .51            push    ecx
    004059E7   .8D8D AC000000 lea   ecx,
    004059ED   .E8 3EE20200   call    00433C30
    004059F2   .8B5424 4C   mov   edx,
    004059F6   .52            push    edx
    004059F7   .8D8D B0000000 lea   ecx,
    004059FD   .E8 2EE20200   call    00433C30
    00405A02   .8B4424 44   mov   eax,
    00405A06   .50            push    eax
    00405A07   .8D8D B4000000 lea   ecx,
    00405A0D   .E8 1EE20200   call    00433C30
    00405A12   .C685 A9000000>mov   byte ptr , 1
    00405A19   .E9 B9000000   jmp   00405AD7
    00405A1E   .A1 4CE27000   mov   eax,
    00405A23   .85C0          test    eax, eax
    00405A25   .75 05         jnz   short 00405A2C
    00405A27   .B8 55F55E00   mov   eax, 005EF555
    00405A2C   >8B0D 78D76200 mov   ecx,
    00405A32   .51            push    ecx
    00405A33   .6A 00         push    0
    00405A35   .50            push    eax
    00405A36   .8D4C24 20   lea   ecx,
    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   , 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,
    00405A64   .52            push    edx
    00405A65   .6A 00         push    0
    00405A67   .50            push    eax
    00405A68   .8D4C24 30   lea   ecx,
    00405A6C   .E8 AFE00200   call    00433B20
    00405A71   .8D4424 14   lea   eax,
    00405A75   .50            push    eax
    00405A76   .8D4C24 28   lea   ecx,
    00405A7A   .6A 00         push    0
    00405A7C   .51            push    ecx
    00405A7D   .C68424 B00000>mov   byte ptr , 22
    00405A85   .E8 F4FA0C00   call    004D557E
    00405A8A   .8B4C24 30   mov   ecx,
    00405A8E   .8B41 F4       mov   eax,
    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   , bl
    00405AA1   .74 0C         je      short 00405AAF
    00405AA3   .83C0 FF       add   eax, -1
    00405AA6   .8901          mov   , eax
    00405AA8   .75 05         jnz   short 00405AAF
    00405AAA   .E8 51CE0200   call    00432900                         ;Case 1 of switch 00405A97
    00405AAF   >8B4C24 14   mov   ecx,                   ;Default case of switch 00405A97
    00405AB3   .8B41 F4       mov   eax,
    00405AB6   .83C1 F4       add   ecx, -0C
    00405AB9   .83F8 FF       cmp   eax, -1                        ;Switch (cases 1..1)
    00405ABC   .C68424 A40000>mov   byte ptr , 20
    00405AC4   .74 0C         je      short 00405AD2
    00405AC6   .83C0 FF       add   eax, -1
    00405AC9   .8901          mov   , 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,
    00405AD9   .8B82 10020000 mov   eax,
    00405ADF   .6A 0E         push    0E
    00405AE1   .8BCF          mov   ecx, edi
    00405AE3   .FFD0          call    eax
    00405AE5   .8B17          mov   edx,
    00405AE7   .8B82 88020000 mov   eax,
    00405AED   .6A 01         push    1
    00405AEF   .8BCF          mov   ecx, edi
    00405AF1   .FFD0          call    eax
    00405AF3   .8D4C24 28   lea   ecx,
    00405AF7   .51            push    ecx                              ; /Arg1
    00405AF8   .8BCD          mov   ecx, ebp                         ; |
    00405AFA   .E8 21D7FFFF   call    00403220                         ; \3.00403220
    00405AFF   .8B8D C0000000 mov   ecx,
    00405B05   .50            push    eax
    00405B06   .C68424 A80000>mov   byte ptr , 23
    00405B0E   .E8 2DB60000   call    00411140
    00405B13   .8B4C24 28   mov   ecx,
    00405B17   .8B41 F4       mov   eax,
    00405B1A   .83C1 F4       add   ecx, -0C
    00405B1D   .83F8 FF       cmp   eax, -1                        ;Switch (cases 1..1)
    00405B20   .C68424 A40000>mov   byte ptr , 20
    00405B28   .74 0C         je      short 00405B36
    00405B2A   .83C0 FF       add   eax, -1
    00405B2D   .8901          mov   , eax
    00405B2F   .75 05         jnz   short 00405B36
    00405B31   .E8 CACD0200   call    00432900                         ;Case 1 of switch 00405B1D
    00405B36   >8B85 C0000000 mov   eax,                   ;Default case of switch 00405B1D
    00405B3C   .8B80 88010000 mov   eax,
    00405B42   .8B50 38       mov   edx,
    00405B45   .8D48 38       lea   ecx,
    00405B48   .8B42 1C       mov   eax,
    00405B4B   .FFD0          call    eax
    00405B4D   .8B17          mov   edx,
    00405B4F   .8B82 88000000 mov   eax,
    00405B55   .6A 01         push    1
    00405B57   .8BCF          mov   ecx, edi
    00405B59   .FFD0          call    eax
    00405B5B   .80BD A9000000>cmp   byte ptr , 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,
    00405B76   .51            push    ecx
============================================================================
    上面 004BF11Djnz   short 004BF12B 修改成:004BF11DJMP   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 , 0
    0040375D   .0F84 AD010000 je      00403910
    00403763   .803D E4FF7100>cmp   byte ptr , 0
    0040376A   .0F85 A0010000 jnz   00403910
    00403770   .55            push    ebp
    00403771   .B8 007D7869   mov   eax, 69787D00
    00403776   .56            push    esi
    00403777   .A3 D8FF7100   mov   , eax
    0040377C   .A3 DCFF7100   mov   , eax
    00403781   .A3 E0FF7100   mov   , eax
    00403786   .C705 CCFF7100>mov   dword ptr , 0
    00403790   .C705 D0FF7100>mov   dword ptr , 17D00
    0040379A   .C705 D4FF7100>mov   dword ptr , 4787D00
    004037A4   .8B87 B4000000 mov   eax,
    004037AA   .8B8F B0000000 mov   ecx,
    004037B0   .8B97 AC000000 mov   edx,
    004037B6   .50            push    eax
    004037B7   .A1 00507000   mov   eax,
    004037BC   .51            push    ecx
    004037BD   .8B0C85 045070>mov   ecx,
    004037C4   .52            push    edx
    004037C5   .51            push    ecx
    004037C6   .6A 06         push    6
    004037C8   .68 CCFF7100   push    0071FFCC
    004037CD   .C605 E4FF7100>mov   byte ptr , 1
    004037D4   .E8 EBC30B00   call    004BFBC4
    004037D9   .8D5424 24   lea   edx,
    004037DD   .52            push    edx
    004037DE   .6A 04         push    4
    004037E0   .68 CCFF7100   push    0071FFCC
    004037E5   .E8 E6750C00   call    004CADD0
    004037EA   .A1 00507000   mov   eax,
    004037EF   .8B3485 1C5070>mov   esi,
    004037F6   .8BEE          mov   ebp, esi
    004037F8   .8D5424 30   lea   edx,
    004037FC   .83C4 24       add   esp, 24
    004037FF   .33C9          xor   ecx, ecx
    00403801   .2BEA          sub   ebp, edx
    00403803   >8D440C 0C   lea   eax,
    00403807   .0FB61428      movzx   edx, byte ptr
    0040380B   .3010          xor   , dl
    0040380D   .0FB6540E 01   movzx   edx, byte ptr
    00403812   .3050 01       xor   , dl
    00403815   .0FB6540E 02   movzx   edx, byte ptr
    0040381A   .3050 02       xor   , dl
    0040381D   .0FB6540E 03   movzx   edx, byte ptr
    00403822   .3050 03       xor   , 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,
    00403833   .50            push    eax
    00403834   .FF15 7C007200 call    ----------->注意这里!程序运行到这里就先出错了! 原因是抽掉的GetProcAddress
    0040383A   .EB 04         jmp   short 00403840   ;得重新指定 (因为脱壳时用插件修复的) 为:call
    0040383C      EB            db      EB
    0040383D      05            db      05
    0040383E   .8901          mov   , 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,
    00403857   .8B97 B0000000 mov   edx,
    0040385D   .8B87 AC000000 mov   eax,
    00403863   .51            push    ecx
    00403864   .8B0D 00507000 mov   ecx,
    0040386A   .52            push    edx
    0040386B   .8B148D 045070>mov   edx,
    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,
    0040388C   .E8 EF3E0C00   call    004C7780
    00403891   .8D4C24 1C   lea   ecx,
    00403895   .E8 B63D0C00   call    004C7650------------->注意这个CALL(跟出解除水印重要数据!)
    0040389A   .8B0D 00507000 mov   ecx,
    004038A0   .8B0C8D B0F85E>mov   ecx,
    004038A7   .330C85 30FF71>xor   ecx,
    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
    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,
    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:       ;开始解除水印
    00402316|.6A FF         push    -1
    00402318|.68 EE1C5C00   push    005C1CEE
    0040231D|.50            push    eax
    0040231E|.64:8925 00000>mov   fs:, esp
    00402325|.B8 01000000   mov   eax, 1
    0040232A|.8405 BCFF7100 test    , al
    00402330|.56            push    esi
    00402331|.57            push    edi
    00402332|.75 20         jnz   short 00402354
    00402334|.0905 BCFF7100 or      , 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,
    00402360|>8B37          /mov   esi,
    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   , eax
    0040237C|.83C7 04       |add   edi, 4
    0040237F|.81FF 4CE27000 |cmp   edi, 0070E24C
    00402385|.^ 7C D9         \jl      short 00402360
    00402387|.8B4C24 08   mov   ecx,
    0040238B|.5F            pop   edi
    0040238C|.64:890D 00000>mov   fs:, 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,
    004038D1      8B11          mov   edx,
    004038D3      8B82 D8020000 mov   eax,
    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,
    004038E3      6A 00         push    0
    004038E5      8BC8          mov   ecx, eax
    004038E7      8B82 AC020000 mov   eax,
    004038ED      68 9C180000   push    189C
    004038F2      FFD0          call    eax               ---->设置注册标致
    004038F4      85C0          test    eax, eax
    004038F6      74 0B         je      short 00403903
    004038F8      8B10          mov   edx,
    004038FA      8BC8          mov   ecx, eax
    004038FC      8B42 18       mov   eax,
    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 小Qiv2.cn 2007/1/9/12:50


   【经验总结】
   [理解财富][创造财富]其实财富就在你身边,关键是你要去发现它!每一天的时间总是是你的!没有timerstop.com.坚持就是胜利!

small-q 发表于 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

暗里着迷 发表于 2007-3-31 21:35:09

沙发.虽然我看不懂但还是支持.下来学习!

tigerisme 发表于 2007-3-31 21:57:30

好文,谢谢兄弟提供这么好的文章!/:08

allcam 发表于 2007-4-2 08:32:25

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

分析的很清晰,打印出来漫漫的看/:08

Runzy 发表于 2007-4-2 13:23:24

看起来满大的!!我比较喜欢图片....嘿嘿
页: [1]
查看完整版本: 【原创】PhotoZoomPro2 2.1.8 脱壳修复与写代码破解(合精版)