首页
社区
课程
招聘
[原创][易语言]文件保护专家V9.61算法分析
发表于: 2007-2-17 14:41 16675

[原创][易语言]文件保护专家V9.61算法分析

2007-2-17 14:41
16675

【文章标题】: [易语言]文件保护专家V9.61算法分析
【文章作者】: KuNgBiM
【作者邮箱】: kungbim@163.com
【作者主页】: http://www.crkcn.com
【软件名称】: 文件保护专家V9.61
【软件大小】: 2448 KB
【下载地址】: 自己搜索下载
【加壳方式】: UPX
【保护方式】: 启动NAG+序列号+次数限制
【编写语言】: 易语言・飞扬
【使用工具】: OD
【操作平台】: 盗版XPsp2
【软件介绍】: 文件保护专家是一款专业的超群的加密软件.在技术上居于国内领先地位,达到了当前同类产品的国际先进水平。
使用了国际公认的RC4,RSA,MD5等多种强大加密算法(超),而且功能多样化(群),可以满足你的不同需要,是同类软件之中最
好的一个(超群),她支持Windows98/me/2000/xp/2003等操作系统,软件具有界面漂亮友好、简单易用、功能强大、兼容性好等特
点,是你加密文件夹资料不可多得的实用加密类软件。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  解压安装程序后发现目录下有krnln.fne、iext.fnr、dp1.fne、shell.fne、Tooltiplib.fne文件,
  我在第一时间内判断该程序为“易语言”程序,但没想到该程序是新版“易语言・飞扬”所编译的。
  
  一、分离壳
  
  外壳为UPX,我们Ctrl+S搜索代码:
  ------------------------------
  popad
  jmp     00401000
  ------------------------------
  找到:
  
  004E67EE    61              popad
  004E67EF  - E9 0CA8F1FF     jmp     00401000                         ; 这里F2下断,F9运行,中断后F7跟进OEP
  004E67F4    0000            add     byte ptr [eax], al
  004E67F6    0000            add     byte ptr [eax], al
  
  跟进 004E67EF 后来到:
  
  00401000    E8 06000000     call    0040100B                         ; OEP(易语言・飞扬)
  00401005    50              push    eax
  00401006    E8 A1010000     call    004011AC                         ; jmp 到 kernel32.ExitProcess
  0040100B    55              push    ebp
  0040100C    8BEC            mov     ebp, esp
  0040100E    81C4 F0FEFFFF   add     esp, -110
  00401014    EB 6D           jmp     short 00401083
  00401016    6B72 6E 6C      imul    esi, dword ptr [edx+6E], 6C
  0040101A    6E              outs    dx, byte ptr es:[edi]
  0040101B    2E:66:6E        outs    dx, byte ptr es:[edi]
  0040101E    72 00           jb      short 00401020
  00401020    6B72 6E 6C      imul    esi, dword ptr [edx+6E], 6C
  00401024    6E              outs    dx, byte ptr es:[edi]
  00401025    2E:66:6E        outs    dx, byte ptr es:[edi]
  00401028    65:0047 65      add     byte ptr gs:[edi+65], al
  0040102C    74 4E           je      short 0040107C
  
  二、寻找易语言程序核心
  
  这里我们继续Ctrl+S搜索代码:
  ------------------------------
  call    eax
  push    0
  ------------------------------
  找到:
  
  00401171    810424 8F1E0000       add     dword ptr [esp], 1E8F
  00401178    FFD0                  call    eax                              ; 到这里F2下断,F9运行,中断后F7跟进
  0040117A    6A 00                 push    0
  0040117C    E8 2B000000           call    004011AC                         ; jmp 到 kernel32.ExitProcess
  00401181    FFB5 F8FEFFFF         push    dword ptr [ebp-108]
  
  跟进 0040117C 后来到:
  
  100290EC    55                    push    ebp                              ; 跟进后来到这里
  100290ED    8BEC                  mov     ebp, esp
  100290EF    8B45 08               mov     eax, dword ptr [ebp+8]
  100290F2    50                    push    eax
  100290F3    B9 88480E10           mov     ecx, 100E4888
  100290F8    E8 B2F5FFFF           call    100286AF                         ; F7单步跟进这里
  100290FD    5D                    pop     ebp
  100290FE    C2 0400               retn    4
  10029101    CC                    int3
  10029102    CC                    int3
  10029103    CC                    int3
  
  跟进 100290F8 后来到:
  
  100286AF    55                    push    ebp                              ; 这里是否很熟悉?
  100286B0    8BEC                  mov     ebp, esp
  100286B2    83EC 08               sub     esp, 8
  100286B5    53                    push    ebx
  100286B6    56                    push    esi
  100286B7    57                    push    edi
  100286B8    894D F8               mov     dword ptr [ebp-8], ecx
  100286BB    FF15 BCC30B10         call    dword ptr [100BC3BC]             ; kernel32.GetProcessHeap
  100286C1    8B4D F8               mov     ecx, dword ptr [ebp-8]
  100286C4    8981 EC030000         mov     dword ptr [ecx+3EC], eax
  100286CA    8B55 08               mov     edx, dword ptr [ebp+8]
  100286CD    8B42 30               mov     eax, dword ptr [edx+30]
  100286D0    83E0 01               and     eax, 1
  100286D3    85C0                  test    eax, eax
  100286D5    75 10                 jnz     short 100286E7
  100286D7    8B4D 08               mov     ecx, dword ptr [ebp+8]
  100286DA    51                    push    ecx
  100286DB    8B4D F8               mov     ecx, dword ptr [ebp-8]
  100286DE    E8 0DE30200           call    100569F0
  100286E3    FFE0                  jmp     eax                              ; 飞向光明之颠!F7跟进到程序核心!
  100286E5    EB 0E                 jmp     short 100286F5
  100286E7    8B55 08               mov     edx, dword ptr [ebp+8]
  100286EA    52                    push    edx
  100286EB    8B4D F8               mov     ecx, dword ptr [ebp-8]
  
  跟进 100286E3 后来到:
  
  004E214B    FC                    cld                                      ; 这里就是易语言的程序核心代码开始处
  004E214C    DBE3                  finit
  004E214E    68 08000000           push    8
  004E2153    E8 B9000000           call    004E2211
  004E2158    83C4 04               add     esp, 4
  004E215B    A3 A80CA800           mov     dword ptr [A80CA8], eax
  004E2160    8BF8                  mov     edi, eax
  004E2162    BE FD564000           mov     esi, 004056FD
  004E2167    AD                    lods    dword ptr [esi]
  004E2168    AB                    stos    dword ptr es:[edi]
  004E2169    AD                    lods    dword ptr [esi]
  004E216A    AB                    stos    dword ptr es:[edi]
  004E216B    68 28000000           push    28
  004E2170    E8 9C000000           call    004E2211
  004E2175    83C4 04               add     esp, 4
  004E2178    A3 D40CA800           mov     dword ptr [A80CD4], eax
  004E217D    8BD8                  mov     ebx, eax
  004E217F    8BF8                  mov     edi, eax
  004E2181    33C0                  xor     eax, eax
  
  三、搜索关键字符,分析注册算法
  
  利用OD字符插件搜索关键字符后,找到这里下断:
  
  ------------------------------
  联系人:KuNgBiM
  注册码:1234567890
  ------------------------------
  
  004DAB72  |.  83C4 04       add     esp, 4                           ;  来到这里设断,F9运行
  004DAB75  |>  8B45 F0       mov     eax, dword ptr [ebp-10]
  004DAB78  |.  33C9          xor     ecx, ecx
  004DAB7A  |.  50            push    eax
  004DAB7B  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
  004DAB7E  |.  8BD8          mov     ebx, eax
  004DAB80  |.  58            pop     eax
  004DAB81  |>  41            /inc     ecx                             ;  ECX自加一,指向下一位
  004DAB82  |.  51            |push    ecx
  004DAB83  |.  53            |push    ebx
  004DAB84  |.  890B          |mov     dword ptr [ebx], ecx
  004DAB86  |.  50            |push    eax                             ;  计算用户长度
  004DAB87  |.  3BC8          |cmp     ecx, eax
  004DAB89  |.  0F8F BF000000 |jg      004DAC4E
  004DAB8F  |.  6A FF         |push    -1
  004DAB91  |.  6A 08         |push    8
  004DAB93  |.  68 BE070116   |push    160107BE
  004DAB98  |.  68 B7070152   |push    520107B7
  004DAB9D  |.  E8 99760000   |call    004E223B                        ;  准备取用户名
  004DABA2  |.  83C4 10       |add     esp, 10
  004DABA5  |.  8945 F4       |mov     dword ptr [ebp-C], eax          ;  ASCII "KuNgBiM"
  004DABA8  |.  68 01030080   |push    80000301
  004DABAD  |.  6A 00         |push    0
  004DABAF  |.  FF75 FC       |push    dword ptr [ebp-4]
  004DABB2  |.  68 04000080   |push    80000004
  004DABB7  |.  6A 00         |push    0
  004DABB9  |.  8B45 F4       |mov     eax, dword ptr [ebp-C]
  004DABBC  |.  85C0          |test    eax, eax
  004DABBE  |.  75 05         |jnz     short 004DABC5
  004DABC0  |.  B8 98334000   |mov     eax, 00403398
  004DABC5  |>  50            |push    eax
  004DABC6  |.  68 02000000   |push    2
  004DABCB  |.  BB 44010000   |mov     ebx, 144
  004DABD0  |.  E8 4E760000   |call    004E2223
  004DABD5  |.  83C4 1C       |add     esp, 1C
  004DABD8  |.  8945 F0       |mov     dword ptr [ebp-10], eax
  004DABDB  |.  8B5D F4       |mov     ebx, dword ptr [ebp-C]
  004DABDE  |.  85DB          |test    ebx, ebx
  004DABE0  |.  74 09         |je      short 004DABEB
  004DABE2  |.  53            |push    ebx
  004DABE3  |.  E8 2F760000   |call    004E2217                        ;  依次取取用户名
  004DABE8  |.  83C4 04       |add     esp, 4
  004DABEB  |>  68 01030080   |push    80000301
  004DABF0  |.  6A 00         |push    0
  004DABF2  |.  FF75 F0       |push    dword ptr [ebp-10]              ;  分别转换为ASCII码
  004DABF5  |.  68 01000000   |push    1
  004DABFA  |.  BB 68010000   |mov     ebx, 168
  004DABFF  |.  E8 1F760000   |call    004E2223
  004DAC04  |.  83C4 10       |add     esp, 10
  004DAC07  |.  8945 EC       |mov     dword ptr [ebp-14], eax         ;  分别转换为十进制数值
  004DAC0A  |.  FF75 EC       |push    dword ptr [ebp-14]              ; /Arg2
  004DAC0D  |.  FF75 F8       |push    dword ptr [ebp-8]               ; |Arg1
  004DAC10  |.  B9 02000000   |mov     ecx, 2                          ; |
  004DAC15  |.  E8 A8E7FDFF   |call    004B93C2                        ; \11.004B93C2
  004DAC1A  |.  83C4 08       |add     esp, 8
  004DAC1D  |.  8945 E8       |mov     dword ptr [ebp-18], eax
  004DAC20  |.  8B5D EC       |mov     ebx, dword ptr [ebp-14]
  004DAC23  |.  85DB          |test    ebx, ebx
  004DAC25  |.  74 09         |je      short 004DAC30
  004DAC27  |.  53            |push    ebx
  004DAC28  |.  E8 EA750000   |call    004E2217
  004DAC2D  |.  83C4 04       |add     esp, 4
  004DAC30  |>  8B5D F8       |mov     ebx, dword ptr [ebp-8]
  004DAC33  |.  85DB          |test    ebx, ebx
  004DAC35  |.  74 09         |je      short 004DAC40
  004DAC37  |.  53            |push    ebx
  004DAC38  |.  E8 DA750000   |call    004E2217
  004DAC3D  |.  83C4 04       |add     esp, 4
  004DAC40  |>  8B45 E8       |mov     eax, dword ptr [ebp-18]         ;  连接每位字符的十进制代码
  004DAC43  |.  8945 F8       |mov     dword ptr [ebp-8], eax          ;  留守备用
  004DAC46  |.  58            |pop     eax
  004DAC47  |.  5B            |pop     ebx
  004DAC48  |.  59            |pop     ecx
  004DAC49  |.^ E9 33FFFFFF   \jmp     004DAB81                        ;  向上循环取位
  004DAC4E  |>  83C4 0C       add     esp, 0C
  004DAC51  |.  6A FF         push    -1
  004DAC53  |.  6A 08         push    8
  004DAC55  |.  68 BF070116   push    160107BF
  004DAC5A  |.  68 B7070152   push    520107B7
  004DAC5F  |.  E8 D7750000   call    004E223B
  004DAC64  |.  83C4 10       add     esp, 10
  004DAC67  |.  8945 F4       mov     dword ptr [ebp-C], eax           ;  假码入栈,ASCII "0123456789"
  004DAC6A  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  真码入栈,ASCII "75117781036610577"
  004DAC6D  |.  50            push    eax                              ;  真码送EAX
  004DAC6E  |.  FF75 F4       push    dword ptr [ebp-C]                ;  假码留内存
  004DAC71  |.  E8 9EECFDFF   call    004B9914
  004DAC76  |.  83C4 08       add     esp, 8                           ;  注册码逐位比较
  004DAC79  |.  83F8 00       cmp     eax, 0
  004DAC7C  |.  B8 00000000   mov     eax, 0
  004DAC81  |.  0F94C0        sete    al
  004DAC84  |.  8945 F0       mov     dword ptr [ebp-10], eax
  004DAC87  |.  8B5D F4       mov     ebx, dword ptr [ebp-C]
  004DAC8A  |.  85DB          test    ebx, ebx
  004DAC8C  |.  74 09         je      short 004DAC97
  004DAC8E  |.  53            push    ebx                              ;  假码送EBX
  004DAC8F  |.  E8 83750000   call    004E2217
  004DAC94  |.  83C4 04       add     esp, 4
  004DAC97  |>  837D F0 00    cmp     dword ptr [ebp-10], 0            ;  比较余数是否为0
  004DAC9B  |.  0F84 F4020000 je      004DAF95                         ;  跳则GAME OVER
  004DACA1  |.  68 04000080   push    80000004
  004DACA6  |.  6A 00         push    0
  004DACA8  |.  68 F8A74100   push    0041A7F8                         ;  恭喜
  004DACAD  |.  68 01030080   push    80000301
  004DACB2  |.  6A 00         push    0
  004DACB4  |.  68 40000000   push    40
  004DACB9  |.  68 04000080   push    80000004
  004DACBE  |.  6A 00         push    0
  004DACC0  |.  68 FDA74100   push    0041A7FD                         ;  注册成功,非常感谢你的支持!
  004DACC5  |.  68 03000000   push    3
  004DACCA  |.  BB 00030000   mov     ebx, 300
  004DACCF  |.  E8 4F750000   call    004E2223                         ;  打开注册表
  004DACD4  |.  83C4 28       add     esp, 28
  004DACD7  |.  6A FF         push    -1
  004DACD9  |.  6A 08         push    8
  004DACDB  |.  68 BE070116   push    160107BE
  004DACE0  |.  68 B7070152   push    520107B7
  004DACE5  |.  E8 51750000   call    004E223B                         ;  写入用户名
  004DACEA  |.  83C4 10       add     esp, 10
  004DACED  |.  8945 F4       mov     dword ptr [ebp-C], eax
  004DACF0  |.  68 04000080   push    80000004
  004DACF5  |.  6A 00         push    0
  004DACF7  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
  004DACFA  |.  85C0          test    eax, eax
  004DACFC  |.  75 05         jnz     short 004DAD03
  004DACFE  |.  B8 98334000   mov     eax, 00403398
  004DAD03  |>  50            push    eax
  004DAD04  |.  68 04000080   push    80000004
  004DAD09  |.  6A 00         push    0                                ;  保存位置
  004DAD0B  |.  68 30554100   push    00415530                         ;  Software\afengsoft\lockfile\user
  004DAD10  |.  68 01030080   push    80000301
  004DAD15  |.  6A 00         push    0
  004DAD17  |.  68 03000000   push    3
  004DAD1C  |.  68 03000000   push    3
  004DAD21  |.  BB A4060000   mov     ebx, 6A4
  004DAD26  |.  E8 F8740000   call    004E2223                         ;  关闭注册表
  004DAD2B  |.  83C4 28       add     esp, 28
  004DAD2E  |.  8B5D F4       mov     ebx, dword ptr [ebp-C]
  004DAD31  |.  85DB          test    ebx, ebx
  004DAD33  |.  74 09         je      short 004DAD3E
  004DAD35  |.  53            push    ebx
  004DAD36  |.  E8 DC740000   call    004E2217                         ;  打开注册表
  004DAD3B  |.  83C4 04       add     esp, 4
  004DAD3E  |>  6A FF         push    -1
  004DAD40  |.  6A 08         push    8
  004DAD42  |.  68 BF070116   push    160107BF
  004DAD47  |.  68 B7070152   push    520107B7
  004DAD4C  |.  E8 EA740000   call    004E223B                         ;  写入注册码
  004DAD51  |.  83C4 10       add     esp, 10
  004DAD54  |.  8945 F4       mov     dword ptr [ebp-C], eax
  004DAD57  |.  68 04000080   push    80000004
  004DAD5C  |.  6A 00         push    0
  004DAD5E  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
  004DAD61  |.  85C0          test    eax, eax
  004DAD63  |.  75 05         jnz     short 004DAD6A
  004DAD65  |.  B8 98334000   mov     eax, 00403398
  004DAD6A  |>  50            push    eax
  004DAD6B  |.  68 04000080   push    80000004
  004DAD70  |.  6A 00         push    0                                ;  保存位置
  004DAD72  |.  68 2B574000   push    0040572B                         ;  Software\afengsoft\lockfile\lock
  004DAD77  |.  68 01030080   push    80000301
  004DAD7C  |.  6A 00         push    0
  004DAD7E  |.  68 03000000   push    3
  004DAD83  |.  68 03000000   push    3
  004DAD88  |.  BB A4060000   mov     ebx, 6A4
  004DAD8D  |.  E8 91740000   call    004E2223
  004DAD92  |.  83C4 28       add     esp, 28
  004DAD95  |.  8B5D F4       mov     ebx, dword ptr [ebp-C]
  004DAD98  |.  85DB          test    ebx, ebx
  004DAD9A  |.  74 09         je      short 004DADA5
  004DAD9C  |.  53            push    ebx
  004DAD9D  |.  E8 75740000   call    004E2217                         ;  关闭注册表
  004DADA2  |.  83C4 04       add     esp, 4
  004DADA5  |>  68 01030080   push    80000301
  004DADAA  |.  6A 00         push    0
  004DADAC  |.  68 09000000   push    9
  004DADB1  |.  68 01000000   push    1
  004DADB6  |.  BB 1C000000   mov     ebx, 1C
  004DADBB  |.  B8 02000000   mov     eax, 2
  004DADC0  |.  E8 58740000   call    004E221D                         ;  打开系统盘
  004DADC5  |.  83C4 10       add     esp, 10
  004DADC8  |.  8945 F4       mov     dword ptr [ebp-C], eax
  004DADCB  |.  68 EB564000   push    004056EB                         ; /systemlockfile008
  004DADD0  |.  FF75 F4       push    dword ptr [ebp-C]                ; |Arg1
  004DADD3  |.  B9 02000000   mov     ecx, 2                           ; |
  004DADD8  |.  E8 E5E5FDFF   call    004B93C2                         ; \11.004B93C2
  004DADDD  |.  83C4 08       add     esp, 8
  004DADE0  |.  8945 F0       mov     dword ptr [ebp-10], eax
  004DADE3  |.  8B5D F4       mov     ebx, dword ptr [ebp-C]
  004DADE6  |.  85DB          test    ebx, ebx
  004DADE8  |.  74 09         je      short 004DADF3
  004DADEA  |.  53            push    ebx
  004DADEB  |.  E8 27740000   call    004E2217                         ;  写入注册文件
  004DADF0  |.  83C4 04       add     esp, 4
  004DADF3  |>  6A 00         push    0
  004DADF5  |.  6A 00         push    0
  004DADF7  |.  6A 00         push    0
  004DADF9  |.  68 04000080   push    80000004
  004DADFE  |.  6A 00         push    0
  004DAE00  |.  68 51554100   push    00415551                         ;  regdate
  004DAE05  |.  68 04000080   push    80000004
  004DAE0A  |.  6A 00         push    0
  004DAE0C  |.  68 B1334000   push    004033B1                         ;  data
  004DAE11  |.  68 04000080   push    80000004
  004DAE16  |.  6A 00         push    0
  004DAE18  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
  004DAE1B  |.  85C0          test    eax, eax                         ;  ASCII "C:\WINDOWS\systemlockfile008"
  004DAE1D  |.  75 05         jnz     short 004DAE24
  004DAE1F  |.  B8 98334000   mov     eax, 00403398
  004DAE24  |>  50            push    eax
  004DAE25  |.  68 04000000   push    4
  004DAE2A  |.  BB C8080000   mov     ebx, 8C8
  004DAE2F  |.  E8 EF730000   call    004E2223
  004DAE34  |.  83C4 34       add     esp, 34
  004DAE37  |.  8945 EC       mov     dword ptr [ebp-14], eax
  004DAE3A  |.  8B5D F0       mov     ebx, dword ptr [ebp-10]
  004DAE3D  |.  85DB          test    ebx, ebx
  004DAE3F  |.  74 09         je      short 004DAE4A
  004DAE41  |.  53            push    ebx
  004DAE42  |.  E8 D0730000   call    004E2217
  004DAE47  |.  83C4 04       add     esp, 4
  004DAE4A  |>  68 98334000   push    00403398
  004DAE4F  |.  FF75 EC       push    dword ptr [ebp-14]
  004DAE52  |.  E8 BDEAFDFF   call    004B9914
  004DAE57  |.  83C4 08       add     esp, 8
  004DAE5A  |.  83F8 00       cmp     eax, 0
  004DAE5D  |.  B8 00000000   mov     eax, 0
  004DAE62  |.  0F94C0        sete    al
  004DAE65  |.  8945 E8       mov     dword ptr [ebp-18], eax
  004DAE68  |.  8B5D EC       mov     ebx, dword ptr [ebp-14]
  004DAE6B  |.  85DB          test    ebx, ebx
  004DAE6D  |.  74 09         je      short 004DAE78
  004DAE6F  |.  53            push    ebx
  004DAE70  |.  E8 A2730000   call    004E2217
  004DAE75  |.  83C4 04       add     esp, 4
  004DAE78  |>  837D E8 00    cmp     dword ptr [ebp-18], 0
  004DAE7C  |.  0F84 04010000 je      004DAF86
  004DAE82  |.  68 01030080   push    80000301
  004DAE87  |.  6A 00         push    0
  004DAE89  |.  68 09000000   push    9
  004DAE8E  |.  68 01000000   push    1
  004DAE93  |.  BB 1C000000   mov     ebx, 1C
  004DAE98  |.  B8 02000000   mov     eax, 2
  004DAE9D  |.  E8 7B730000   call    004E221D
  004DAEA2  |.  83C4 10       add     esp, 10
  004DAEA5  |.  8945 F4       mov     dword ptr [ebp-C], eax
  004DAEA8  |.  68 EB564000   push    004056EB                         ; /systemlockfile008
  004DAEAD  |.  FF75 F4       push    dword ptr [ebp-C]                ; |Arg1
  004DAEB0  |.  B9 02000000   mov     ecx, 2                           ; |
  004DAEB5  |.  E8 08E5FDFF   call    004B93C2                         ; \11.004B93C2
  004DAEBA  |.  83C4 08       add     esp, 8
  004DAEBD  |.  8945 F0       mov     dword ptr [ebp-10], eax
  004DAEC0  |.  8B5D F4       mov     ebx, dword ptr [ebp-C]
  004DAEC3  |.  85DB          test    ebx, ebx
  004DAEC5  |.  74 09         je      short 004DAED0
  004DAEC7  |.  53            push    ebx
  004DAEC8  |.  E8 4A730000   call    004E2217
  004DAECD  |.  83C4 04       add     esp, 4
  004DAED0  |>  68 00000000   push    0
  004DAED5  |.  BB 10020000   mov     ebx, 210
  004DAEDA  |.  E8 44730000   call    004E2223
  004DAEDF  |.  83C4 04       add     esp, 4
  004DAEE2  |.  8945 E8       mov     dword ptr [ebp-18], eax
  004DAEE5  |.  8955 EC       mov     dword ptr [ebp-14], edx
  004DAEE8  |.  68 01030080   push    80000301
  004DAEED  |.  6A 00         push    0
  004DAEEF  |.  68 01000000   push    1
  004DAEF4  |.  68 03000080   push    80000003
  004DAEF9  |.  FF75 EC       push    dword ptr [ebp-14]
  004DAEFC  |.  FF75 E8       push    dword ptr [ebp-18]
  004DAEFF  |.  68 02000000   push    2
  004DAF04  |.  BB E8010000   mov     ebx, 1E8
  004DAF09  |.  E8 15730000   call    004E2223
  004DAF0E  |.  83C4 1C       add     esp, 1C
  004DAF11  |.  8945 E4       mov     dword ptr [ebp-1C], eax
  004DAF14  |.  68 04000080   push    80000004
  004DAF19  |.  6A 00         push    0
  004DAF1B  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
  004DAF1E  |.  85C0          test    eax, eax
  004DAF20  |.  75 05         jnz     short 004DAF27
  004DAF22  |.  B8 98334000   mov     eax, 00403398
  004DAF27  |>  50            push    eax
  004DAF28  |.  68 04000080   push    80000004
  004DAF2D  |.  6A 00         push    0
  004DAF2F  |.  68 51554100   push    00415551                         ;  regdate
  004DAF34  |.  68 04000080   push    80000004
  004DAF39  |.  6A 00         push    0
  004DAF3B  |.  68 B1334000   push    004033B1                         ;  data
  004DAF40  |.  68 04000080   push    80000004
  004DAF45  |.  6A 00         push    0
  004DAF47  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
  004DAF4A  |.  85C0          test    eax, eax
  004DAF4C  |.  75 05         jnz     short 004DAF53
  004DAF4E  |.  B8 98334000   mov     eax, 00403398
  004DAF53  |>  50            push    eax
  004DAF54  |.  68 04000000   push    4
  004DAF59  |.  BB CC080000   mov     ebx, 8CC
  004DAF5E  |.  E8 C0720000   call    004E2223
  004DAF63  |.  83C4 34       add     esp, 34
  004DAF66  |.  8B5D F0       mov     ebx, dword ptr [ebp-10]
  004DAF69  |.  85DB          test    ebx, ebx
  004DAF6B  |.  74 09         je      short 004DAF76
  004DAF6D  |.  53            push    ebx
  004DAF6E  |.  E8 A4720000   call    004E2217
  004DAF73  |.  83C4 04       add     esp, 4
  004DAF76  |>  8B5D E4       mov     ebx, dword ptr [ebp-1C]
  004DAF79  |.  85DB          test    ebx, ebx
  004DAF7B  |.  74 09         je      short 004DAF86
  004DAF7D  |.  53            push    ebx
  004DAF7E  |.  E8 94720000   call    004E2217
  004DAF83  |.  83C4 04       add     esp, 4
  004DAF86  |>  6A 00         push    0
  004DAF88  |.  E8 6C720000   call    004E21F9
  004DAF8D  |.  83C4 04       add     esp, 4
  004DAF90  |.  E9 40000000   jmp     004DAFD5
  004DAF95  |>  837D 08 00    cmp     dword ptr [ebp+8], 0
  004DAF99  |.  0F84 36000000 je      004DAFD5
  004DAF9F  |.  68 04000080   push    80000004
  004DAFA4  |.  6A 00         push    0
  004DAFA6  |.  68 5CA74100   push    0041A75C                         ;  提示
  004DAFAB  |.  68 01030080   push    80000301
  004DAFB0  |.  6A 00         push    0
  004DAFB2  |.  68 40000000   push    40
  004DAFB7  |.  68 04000080   push    80000004
  004DAFBC  |.  6A 00         push    0
  004DAFBE  |.  68 ACA74100   push    0041A7AC                         ;  注册失败,请输入正确注册码!
  004DAFC3  |.  68 03000000   push    3
  004DAFC8  |.  BB 00030000   mov     ebx, 300
  004DAFCD  |.  E8 51720000   call    004E2223
  004DAFD2  |.  83C4 28       add     esp, 28
  004DAFD5  |>  E9 40000000   jmp     004DB01A
  004DAFDA  |>  837D 08 00    cmp     dword ptr [ebp+8], 0
  004DAFDE  |.  0F84 36000000 je      004DB01A
  004DAFE4  |.  68 04000080   push    80000004
  004DAFE9  |.  6A 00         push    0
  004DAFEB  |.  68 5CA74100   push    0041A75C                         ;  提示
  004DAFF0  |.  68 01030080   push    80000301
  004DAFF5  |.  6A 00         push    0
  004DAFF7  |.  68 40000000   push    40
  004DAFFC  |.  68 04000080   push    80000004
  004DB001  |.  6A 00         push    0
  004DB003  |.  68 C8A74100   push    0041A7C8                         ;  注册失败,请输入完整的注册信息!
  004DB008  |.  68 03000000   push    3
  004DB00D  |.  BB 00030000   mov     ebx, 300
  004DB012  |.  E8 0C720000   call    004E2223
  004DB017  |.  83C4 28       add     esp, 28
  004DB01A  |>  8B5D F8       mov     ebx, dword ptr [ebp-8]
  004DB01D  |.  85DB          test    ebx, ebx
  004DB01F  |.  74 09         je      short 004DB02A
  004DB021  |.  53            push    ebx
  004DB022  |.  E8 F0710000   call    004E2217
  004DB027  |.  83C4 04       add     esp, 4
  004DB02A  |>  8BE5          mov     esp, ebp
  004DB02C  |.  5D            pop     ebp
  004DB02D  \.  C2 0800       retn    8
  
  注册算法为:
  
  依次把用户名每个字母转换为ASCII码后再转换为十进制数值串起来即可。
  
  ============ 以下程序在盗版XPsp2、VB6.0下编译测试通过 ============
  
  Private Sub Text1_Change()
  'Keygen by KuNgBiM
      Dim name As String
      Dim n, m, i As Byte
      Dim sn, tmp  As String
  
      name = Text1.Text
      n = Len(name)
      For i = 1 To n
          tmp = Mid(name, i, 1)
          m = Asc(tmp)
          sn = sn & m
      Next
      Text2.Text = sn
  End Sub
  ============ 以下程序在盗版XPsp2、Delphi 6.0下编译测试通过 ============

  procedure Tkeygen.Text1Change(Sender: TObject);
  var
        name, tmp: AnsiString;
        n, m, sn: Variant;
        i: Char;
  begin
  //{$DEFINE def_Text1_Change}
  {$IF Defined(def_Text1_Change)}
        // Keygen by KuNgBiM
        name := Text1.Text;
        n :=  Length(name);
        for i:=1 to n do begin
                tmp :=  Copy(name, i, 1);
                m :=  Asc(tmp);
                sn := sn+m;
        end;
        Text2.Text := sn;
  {$IFEND} // def_Text1_Change
  end;

  end.

  ============ 以下程序在盗版XPsp2、VC++ 6.0下编译测试通过 ============

  void Ckeygen::OnChangeText1()
  {
        // TODO: Add your control notification handler code here
        // Keygen by KuNgBiM
         CString name;
         CComVariant n, m; BYTE i;
         CComVariant sn; CString tmp;

        name = Text(m_Text1);
        n =  name.GetLength();
        for(i=1; i<=n; i++) {
                tmp =  name.Mid(i-1, 1);
                m =  Asc(tmp);
                sn = sn+m;
        }
        m_Text2.SetWindowText(sn);
  }
--------------------------------------------------------------------------------
【经验总结】
  新年快乐!没什么好总结的,凑合看吧!
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年02月17日 PM 02:37:57


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (30)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享
2007-2-17 14:45
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
支持老K兄,春节了产量还是这么高.
辛苦!
2007-2-17 15:24
0
雪    币: 97697
活跃值: (200834)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
prop up.
2007-2-17 15:45
0
雪    币: 242
活跃值: (1664)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
5
过年了还这么辛苦,不顶实在对不住!
2007-2-17 16:00
0
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ywb
6
啊? 我记得这好像是尘土 版本 的了
2007-2-17 20:02
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
无论如何新年无限顶!!!
2007-2-17 20:11
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
请问

二、寻找易语言程序核心
  
  这里我们继续Ctrl+S搜索代码:
  ------------------------------
  call    eax
  push    0
  ------------------------------

这个是对E语言程序的 通用方法?
2007-2-17 20:48
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
9
这个还是老版本的易语言写的,新版本的“易语言。飞扬”大量的使用了RTTI,这个明显不是;)

老K真刻苦阿,大年三十还分析代码
2007-2-17 21:30
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ToT
10
大年三十,不得不顶
2007-2-17 22:41
0
雪    币: 2871
活跃值: (2340)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
新春快乐!!!!
2007-2-17 23:23
0
雪    币: 538
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 KuNgBiM 发布
【操作平台】: 盗版XPsp2

这话真实在
2007-2-17 23:25
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
13
软件破解的难道好像不高,但大侠写出来简洁通畅,强,支持
2007-2-18 01:13
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
14
最初由 monkeycz 发布
这个还是老版本的易语言写的,新版本的“易语言。飞扬”大量的使用了RTTI,这个明显不是;)

老K真刻苦阿,大年三十还分析代码


monkeycz 大哥指出的问题,我已更正

在易语言方面,还要monkeycz 大哥多指点迷经
2007-2-18 01:18
0
雪    币: 191
活跃值: (345)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
15
这简单保护还敢用他的软件去保护别的软件吗?呵呵。顺便问下老K好像对盗版XP情有独衷,多次强调是盗版XP,如果大家用此教程练习的话记得在盗版XP平台下做,否则老K不提供技术支持。
2007-2-18 01:58
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
16
增加了Delphi及VC++的keygen代码
2007-2-20 17:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我看了一下,
程序中密码也是以明码方式出现的,
不知道用注册机软件可不可以倒出明码
2007-2-21 19:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
VC6的注册机能不能将sn = sn+m;写成sn+=m;??
2007-2-22 10:33
0
雪    币: 383
活跃值: (41)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
19
我一遇到易语言的东西就挂了........
二、寻找易语言程序核心

这里我们继续Ctrl+S搜索代码:
------------------------------
call eax
push 0
------------------------------

我觉得这里最妙了,这个方法你怎么知道的呀?但似乎不通用,是不是针对最新版的?
=================================
盗版XP,呵呵,我现在觉得很重要哦,有些程序我在XP调试很顺利,拿到2000下调试的时候老是发送错误报告,真不知道怎么回事...
2007-2-22 12:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习,学习,
2007-2-22 18:47
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
好东西 收藏!
2007-2-22 19:31
0
雪    币: 142
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
~~~~~
不错的文章。
2007-3-22 13:40
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
23
前面对付易语言的方法我收下了。多谢啊

随便说下,易语言真的好难搞啊,我虽然破过一些易语言,但是一撞到字节集就束手无策了,不是明码的那种
2007-3-25 10:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
http://www.live-share.com/files/186943/__HTTP__.rar.html
我用易语言做的一个外网到本地的对比更新程序,
呵呵,让大家练手,
我不开IP,你是进不了软件界面的,
呵呵,看一下你能否破掉?
呵呵,小软件一个:)送大家玩玩!
2007-3-26 12:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
采用楼主的思路想破解一个软件试试(我是新手),请楼主帮看看。(没法子帖子不够数,不能独立发贴)
程序名称:**固定资产管理系统
程序语言:易语言-吴涛
注册:采用写入注册表注册方式注册。重启注册验证。
保护:用odIC调入运行后,自动退出(好像有什么识别功能);将记录超过40条后,自动提醒你为试用版用户,只能记录40条记录。
破解思路:先用OD载入,在程序调用核心库位置下断,再F7跟进,一步一步到易语言主入口。再用字串搜索找关键字,能暴最好,暴不了就再找注册码。
下面是破解过程:
用OD先把程序载入,CTRL+S 输入 call eax
                               push  0
0040116B  |.  68 2D104000   push    0040102D                         ; /getnewsock
00401170  |.  50            push    eax                              ; |hModule
00401171  |.  E8 5C000000   call    <jmp.&KERNEL32.GetProcAddress>   ; \GetProcAddress
00401176  |.  85C0          test    eax, eax
00401178  |.  74 20         je      short 0040119A
0040117A  |.  68 E8030000   push    3E8
0040117F  |.  FFD0          call    eax
00401181  |.  85C0          test    eax, eax
00401183  |.  74 15         je      short 0040119A
00401185  |.  E8 00000000   call    0040118A
0040118A  |$  810424 761E00>add     dword ptr [esp], 1E76
00401191  |.  FFD0          call    eax                              ;  这里下断,然后按F9运行,程序在这中断,后F7跟进
00401193  |.  6A 00         push    0                                ; /ExitCode = 0
00401195  |.  E8 2C000000   call    <jmp.&KERNEL32.ExitProcess>      ; \ExitProcess
0040119A  |>  FFB5 F8FEFFFF push    dword ptr [ebp-108]              ; /hLibModule
004011A0  |.  E8 27000000   call    <jmp.&KERNEL32.FreeLibrary>      ; \FreeLibrary
004011A5  |>  6A 10         push    10                               ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
004011A7  |.  68 96104000   push    00401096                         ; |error
004011AC  |.  68 57104000   push    00401057                         ; |not found the kernel library or the kernel library is invalid!
004011B1  |.  6A 00         push    0                                ; |hOwner = NULL
004011B3  |.  E8 08000000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA
004011B8  |.  B8 FFFFFFFF   mov     eax, -1
004011BD  |.  C9            leave
---------------------------------------------------------------------------------------------
100298D9  \.  C3            retn
100298DA  /.  55            push    ebp                              ;  跳到这,继续F7
100298DB  |.  8BEC          mov     ebp, esp
100298DD  |.  8B45 08       mov     eax, dword ptr [ebp+8]
100298E0  |.  50            push    eax
100298E1  |.  B9 10DB0E10   mov     ecx, 100EDB10
100298E6  |.  E8 04F5FFFF   call    10028DEF                         ;  在这跟进
100298EB  |.  5D            pop     ebp
100298EC  \.  C2 0400       retn    4
-------------------------------------------------------------------------------------------------
10028DEF   $  55            push    ebp                              ;  跳到这,继续
10028DF0   .  8BEC          mov     ebp, esp
10028DF2   .  83EC 08       sub     esp, 8
10028DF5   .  53            push    ebx
10028DF6   .  56            push    esi
10028DF7   .  57            push    edi
10028DF8   .  894D F8       mov     dword ptr [ebp-8], ecx
10028DFB   .  FF15 DC230C10 call    dword ptr [<&KERNEL32.GetProcess>; [跳过,一进就死了
10028E01   .  8B4D F8       mov     ecx, dword ptr [ebp-8]
10028E04   .  8981 50040000 mov     dword ptr [ecx+450], eax
10028E0A   .  8B55 08       mov     edx, dword ptr [ebp+8]
10028E0D   .  8B42 30       mov     eax, dword ptr [edx+30]
10028E10   .  83E0 01       and     eax, 1
10028E13   .  85C0          test    eax, eax
10028E15   .  75 10         jnz     short 10028E27                   ;  也跳过
10028E17   .  8B4D 08       mov     ecx, dword ptr [ebp+8]
10028E1A   .  51            push    ecx
10028E1B   .  8B4D F8       mov     ecx, dword ptr [ebp-8]
10028E1E   .  E8 6DFC0200   call    10058A90                           也跳过
10028E23   .  FFE0          jmp     eax                     F7跟进
-------------------------------------------------------------------------------------
0053D360    FC              cld                               ; (initial cpu selection)  到了易语言的主程序领空。
0053D361    DBE3            finit                             ; (initial cpu selection) 在这用查找字串功能,根据程序提示:找40条记录
0053D368    68 94CC5300     push    0053CC94
0053D36D    B8 03000000     mov     eax, 3
0053D372    E8 59000000     call    0053D3D0
0053D377    83C4 04         add     esp, 4
0053D37A    E8 4E5AFBFF     call    004F2DCD                   ; (initial cpu selection)
0053D37F    E8 CDBBFCFF     call    00508F51
0053D384    E8 5EF9FEFF     call    0052CCE7
0053D389    E8 DC49FFFF     call    00531D6A
0053D38E    E8 BD2FFBFF     call    004F0350
0053D393    E8 9CBBFCFF     call    00508F34
0053D398    E8 0EBBFEFF     call    00528EAB
0053D39D    E8 1332FBFF     call    004F05B5
0053D3A2    68 01000152     push    52010001
0053D3A7    E8 1E000000     call    0053D3CA
0053D3AC    83C4 04         add     esp, 4
0053D3AF    6A 00           push    0
0053D3B1    E8 0E000000     call    0053D3C4
0053D3B6    E8 03000000     call    0053D3BE
-------------------------------------------------------------------------------------------
根据字串搜索找到
                  
Address=00538BE8
Disassembly=push    0040F7AC
Text String=未注册版只能输入40条资产记录,请联系作者注册!
00538BB2    837D D4 00      cmp     dword ptr [ebp-2C], 0
00538BB6    0F84 48000000   je      00538C04
00538BBC    E8 2895FBFF     call    004F20E9
00538BC1    85C0            test    eax, eax
00538BC3    0F84 3B000000   je      00538C04             这改je为jne,暴破
00538BC9    68 04000080     push    80000004
00538BCE    6A 00           push    0
00538BD0    68 80C14000     push    0040C180                         ; 信息提示
00538BD5    68 01030080     push    80000301
00538BDA    6A 00           push    0
00538BDC    68 40000000     push    40
00538BE1    68 04000080     push    80000004
00538BE6    6A 00           push    0
00538BE8    68 ACF74000     push    0040F7AC                         ; 未注册版只能输入40条资产记录,请联系作者注册!
00538BED    68 03000000     push    3
00538BF2    BB 00030000     mov     ebx, 300
00538BF7    E8 E0470000     call    0053D3DC
00538BFC    83C4 28         add     esp, 28
00538BFF    E9 E80D0000     jmp     005399EC

------------------------------------------------------------------------------
暴破后,进入程序连续输入41条记录,没有提示,以为成功了。退出,再运行程序时出现错误提示框,“找不到数据库或数据库未指定。”
用字串搜索也没有这个关键字。这下好了,没法只好用注册码了。再次用OD载入,来到入口出,搜索关键字:未注册
来到这:
004F2F7C    8BEC            mov     ebp, esp
004F2F7E    81EC 08000000   sub     esp, 8
004F2F84    6A FF           push    -1
004F2F86    6A 04           push    4
004F2F88    68 00000106     push    6010000
004F2F8D    68 01000152     push    52010001
004F2F92    E8 57A40400     call    0053D3EE
004F2F97    83C4 10         add     esp, 10
004F2F9A    8945 FC         mov     dword ptr [ebp-4], eax
004F2F9D    68 1EC54000     push    0040C51E                         ; 未注册
004F2FA2    FF75 FC         push    dword ptr [ebp-4]
004F2FA5    E8 41D8FFFF     call    004F07EB
004F2FAA    83C4 08         add     esp, 8
004F2FAD    83F8 00         cmp     eax, 0
004F2FB0    B8 00000000     mov     eax, 0

------------------------------
还有004F6492    68 04000080     push    80000004
004F6497    6A 00           push    0
004F6499    68 80C14000     push    0040C180                         ; 信息提示
004F649E    68 01030080     push    80000301
004F64A3    6A 00           push    0
004F64A5    68 40000000     push    40
004F64AA    68 04000080     push    80000004
004F64AF    6A 00           push    0
004F64B1    68 4DC84000     push    0040C84D                         ; 注册码已写入,请重新启动软件,以使注册生效!
004F64B6    68 03000000     push    3
004F64BB    BB 00030000     mov     ebx, 300
004F64C0    E8 176F0400     call    0053D3DC
004F64C5    83C4 28         add     esp, 28
004F64C8    8945 F8         mov     dword ptr [ebp-8], eax
004F64CB    837D F8 00      cmp     dword ptr [ebp-8], 0
004F64CF    0F85 0A000000   jnz     004F64DF
004F64D5    6A 00           push    0
004F64D7    E8 E26E0400     call    0053D3BE

到这就没法了,希望高手能帮我完成这最后几步。
2007-3-26 13:35
0
游客
登录 | 注册 方可回帖
返回
//