首页
社区
课程
招聘
[原创]Dll Show 4.7 汉化版注册算法
发表于: 2006-11-12 15:12 6790

[原创]Dll Show 4.7 汉化版注册算法

2006-11-12 15:12
6790

【破文标题】Dll Show 4.7 汉化版注册算法
【破文作者】XXNB
【作者邮箱】支持PYG
【作者主页】f4aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3k6J5k6h3g2Q4x3X3g2&6M7K6p5$3z5q4)9J5k6h3y4G2L8g2)9J5c8W2)9K6c8X3u0A6L8X3u0A6L8X3u0A6L8U0M7@1y4e0j5`.
【破解工具】OD
【破解平台】xpsp2
【软件名称】Dll Show 4.7 汉化版
【软件大小】100 KB
【原版下载】a2aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4S2V1L8%4N6F1M7#2)9J5k6h3y4G2L8g2)9J5c8Y4y4G2k6Y4c8Q4x3V1j5$3i4K6u0r3y4e0c8Q4x3V1j5J5x3o6l9$3i4K6u0r3f1$3!0X3N6q4)9#2k6U0t1^5z5o6b7&6i4K6u0W2K9s2c8E0L8l9`.`.
【保护方式】名+公司+码
【软件简介】可显示出程序启动过程,如内存的载入,与程序相关连的 DLL文件等。实时观察你的 Win95 当前进程使用情况。由于原程序原因

,有些项目不能汉化,敬请原谅! Dll Show 4.7 的汉化文件此为汉化修改版,无需原英文软件,解压后直接使用。
【破解声明】向大侠们学习!!!只为学习!
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------
1、早上看到一个dll,居然是英文的,所以想汉化它,没想到搜索了下找到这个软件,一运行就是个unreg。(感觉象是在示威)虽然已经有现

成的注册信息,毕竟是别人的,但我还是自己弄。

刚开始用messageboxa和getwindowtext都没能断下来。后来再看看,原来还有个GetDlgItemTextA。试了下能断。

在输入信息

user name:pediy

organization:yulin

registration:123456

按“OK”,OD中断在下面:

0041679B  |.  FF15 6C024200     call    dword ptr [<&USER32.GetDlgItemTextA>]  ; \GetDlgItemTextA     断在这里了。
004167A1  |.  5F                pop     edi
004167A2  |.  5E                pop     esi
004167A3  |.  B8 01000000       mov     eax, 1
004167A8  |.  5B                pop     ebx
004167A9  \.  C3                retn                     这里我们返回后,上下找了下可以得到下面关键代码。请看注释::

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
0040E430  /$  81EC 00010000     sub     esp, 100             如果要再重新开始的话,我们在这里下断,
0040E436  |.  53                push    ebx
0040E437  |.  55                push    ebp
0040E438  |.  8BAC24 0C010000   mov     ebp, dword ptr [esp+10C]
0040E43F  |.  56                push    esi
0040E440  |.  8BB424 14010000   mov     esi, dword ptr [esp+114]               ;  用户名
0040E447  |.  8B46 64           mov     eax, dword ptr [esi+64]
0040E44A  |.  85C0              test    eax, eax
0040E44C  |.  74 0D             je      short 0040E45B
0040E44E  |.  A1 900B4300       mov     eax, dword ptr [430B90]
0040E453  |.  85C0              test    eax, eax
0040E455  |.  0F84 A2000000     je      0040E4FD
0040E45B  |>  57                push    edi
0040E45C  |.  6A 32             push    32
0040E45E  |.  56                push    esi
0040E45F  |.  6A 65             push    65
0040E461  |.  55                push    ebp
0040E462  |.  E8 09830000       call    00416770                               ;  读取公司名称
0040E467  |.  8D7E 32           lea     edi, dword ptr [esi+32]
0040E46A  |.  6A 32             push    32
0040E46C  |.  57                push    edi
0040E46D  |.  6A 66             push    66
0040E46F  |.  55                push    ebp
0040E470  |.  E8 FB820000       call    00416770
0040E475  |.  8D4424 30         lea     eax, dword ptr [esp+30]
0040E479  |.  68 00010000       push    100
0040E47E  |.  50                push    eax
0040E47F  |.  6A 67             push    67
0040E481  |.  55                push    ebp
0040E482  |.  E8 E9820000       call    00416770
0040E487  |.  8D4C24 40         lea     ecx, dword ptr [esp+40]                ;  读取假码
0040E48B  |.  51                push    ecx
0040E48C  |.  E8 65980000       call    00417CF6                               ;  假码转换成16进制函数
0040E491  |.  56                push    esi
0040E492  |.  8BD8              mov     ebx, eax
0040E494  |.  E8 67820000       call    00416700                               ;  这个是关键call。《《《《《《《《《《《(1)
0040E499  |.  83C4 38           add     esp, 38
0040E49C  |.  3D 92A71901       cmp     eax, 119A792                           ;  这里如果相等的话会很光荣的哦。好像是作者专

用的注册信息。
0040E4A1      75 18             jnz     short 0040E4BB
0040E4A3  |.  8B1D A0014200     mov     ebx, dword ptr [<&KERNEL32.lstrcpyA>]  ;  kernel32.lstrcpyA
0040E4A9  |.  68 60434200       push    00424360                               ; /gregory braun
0040E4AE  |.  56                push    esi                                    ; |String1
0040E4AF  |.  FFD3              call    ebx                                    ; \lstrcpyA
0040E4B1  |.  68 50434200       push    00424350                               ; /software design
0040E4B6  |.  57                push    edi                                    ; |String1
0040E4B7  |.  FFD3              call    ebx                                    ; \lstrcpyA
0040E4B9  |.  EB 07             jmp     short 0040E4C2
0040E4BB  |>  3D 3CCE5F0D       cmp     eax, 0D5FCE3C
0040E4C0  |.  75 0C             jnz     short 0040E4CE
0040E4C2  |>  57                push    edi
0040E4C3  |.  56                push    esi
0040E4C4  |.  E8 D77B0000       call    004160A0
0040E4C9  |.  83C4 08           add     esp, 8
0040E4CC  |.  8BD8              mov     ebx, eax
0040E4CE  |>  57                push    edi
0040E4CF  |.  56                push    esi
0040E4D0  |.  E8 CB7B0000       call    004160A0                               ;  这里面还有个运算。《《《《《《《《《《(2)
0040E4D5  |.  83C4 08           add     esp, 8
0040E4D8  |.  3BD8              cmp     ebx, eax                               ;  和输入的假码比较。这里eax装成10进制就是真码
0040E4DA  |.  5F                pop     edi                                    ;  相等的话就注册成功。(废话)
0040E4DB      74 1D             je      short 0040E4FA                         ;  这个一定要跳,不然就没了。~~~
0040E4DD  |.  68 CFEA0000       push    0EACF
0040E4E2  |.  68 88130000       push    1388
0040E4E7  |.  55                push    ebp
0040E4E8  |.  E8 33BAFFFF       call    00409F20                               ;  这里弹出错误对话框
0040E4ED  |.  83C4 0C           add     esp, 0C
0040E4F0  |.  5E                pop     esi
0040E4F1  |.  5D                pop     ebp
0040E4F2  |.  5B                pop     ebx
0040E4F3  |.  81C4 00010000     add     esp, 100
0040E4F9  |.  C3                retn
0040E4FA  |>  895E 64           mov     dword ptr [esi+64], ebx                ;  能跳到这句的话就成功了。
0040E4FD  |>  6A 68             push    68                                     ; /ButtonID = 68 (104.)
0040E4FF  |.  55                push    ebp                                    ; |hWnd
0040E500  |.  FF15 B8024200     call    dword ptr [<&USER32.IsDlgButtonChecked>; \IsDlgButtonChecked

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2、首先跟进(1)这里这个 0040E494    call    00416700 。得到下面:

00416700  /$  51                push    ecx                                    ;  DLLShow.004283C6
00416701  |.  53                push    ebx
00416702  |.  8B5C24 0C         mov     ebx, dword ptr [esp+C]                 ;  用户名
00416706  |.  56                push    esi
00416707  |.  33F6              xor     esi, esi
00416709  |.  53                push    ebx                                    ; /String
0041670A  |.  897424 0C         mov     dword ptr [esp+C], esi                 ; |
0041670E  |.  FF15 EC004200     call    dword ptr [<&KERNEL32.lstrlenA>]       ; \得到用户名位数
00416714  |.  85DB              test    ebx, ebx
00416716  |.  74 4F             je      short 00416767
00416718  |.  85C0              test    eax, eax
0041671A  |.  74 4B             je      short 00416767
0041671C  |.  33D2              xor     edx, edx
0041671E  |.  85C0              test    eax, eax
00416720  |.  7E 45             jle     short 00416767
00416722  |.  55                push    ebp
00416723  |.  57                push    edi                                    ;  公司名
00416724  |.  BE 8C624200       mov     esi, 0042628C                          ;  |b!pz*ls;rn|lf$vi^Axpe)

rx5aic&9/2m5lsi4@0dmZw94cmqpfhw
00416729  |.  BF 01000000       mov     edi, 1                                 ;  上面是固定字符串,
0041672E  |.  2BF3              sub     esi, ebx
00416730  |.  8BCB              mov     ecx, ebx
00416732  |.  2BFB              sub     edi, ebx
00416734  |>  0FBE1C0E          /movsx   ebx, byte ptr [esi+ecx]               ;  逐个取固定字符串到ebx
00416738  |.  0FBEAC10 54624200 |movsx   ebp, byte ptr [eax+edx+426254]        ;  这里也是逐个取另一个固定字符串的。只不过取

这个字符串要靠用户名的长度来决定。这个字符串我们可以找到是:#serB&nz|mfM1/5(!sd$Mq.{s]+sFjtKpzSdtzoXqmb^Al@dv:s?x/
00416740  |.  0FAFDD            |imul    ebx, ebp                              ;  取到的这两个Ascii码值相乘
00416743  |.  8D2C0F            |lea     ebp, dword ptr [edi+ecx]
00416746  |.  0FAFDD            |imul    ebx, ebp                              ;  乘以ebp
00416749  |.  0FBE29            |movsx   ebp, byte ptr [ecx]                   ;  逐个取用户名ascii码值
0041674C  |.  0FAFDD            |imul    ebx, ebp                              ;  和上面的结果乘,结果在ebx
0041674F  |.  8B6C24 10         |mov     ebp, dword ptr [esp+10]
00416753  |.  03EB              |add     ebp, ebx                              ;  加上一次循环的结果
00416755  |.  42                |inc     edx
00416756  |.  41                |inc     ecx
00416757  |.  3BD0              |cmp     edx, eax                              ;  比较看看取完用户名没有
00416759  |.  896C24 10         |mov     dword ptr [esp+10], ebp               ;  运算的最终结果在esp+10里面
0041675D  |.^ 7C D5             \jl      short 00416734
0041675F  |.  8BC5              mov     eax, ebp                               ;  运算结果给eax
00416761  |.  5F                pop     edi                                    ;  公司名
00416762  |.  5D                pop     ebp                                    ;  
00416763  |.  5E                pop     esi                                    ;  用户名
00416764  |.  5B                pop     ebx                                    ;  假码
00416765  |.  59                pop     ecx
00416766  |.  C3                retn                   这里返回的就是eax的值了

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3、然后跟进(2)那里那个 0040E4D0    call    004160A0。这个call里面又会两次调用上面的那个(1)的call。一次是用来计算用户名,

另一次用来计算公司名。具体看下面代码:

004160A0  /$  8B4424 04         mov     eax, dword ptr [esp+4]
004160A4  |.  56                push    esi
004160A5  |.  8B35 64074300     mov     esi, dword ptr [430764]           ;  DB95DB95   这里这个是个常量。
004160AB  |.  50                push    eax                               ;  用户名
004160AC  |.  81CE 78030000     or      esi, 378                          ;  和378或
004160B2  |.  E8 49060000       call    00416700                          ;  这个是对用户名的运算结果。调用(1)的call
004160B7  |.  8B4C24 10         mov     ecx, dword ptr [esp+10]           
004160BB  |.  03F0              add     esi, eax                          ;  上面或的结果和运算结果相加
004160BD  |.  51                push    ecx                               ;  公司名
004160BE  |.  E8 3D060000       call    00416700                          ;  这个是对公司名的运算结果。也调用(1)的call
004160C3  |.  83C4 08           add     esp, 8
004160C6  |.  03C6              add     eax, esi                          ;  再加上就是注册码了,是装成10进制就是真码
004160C8  |.  5E                pop     esi                              
004160C9  \.  C3                retn

午睡中~~等下看能不能写注册机。
【破解总结】
------------------------------------------------------------------------
1、算法跟用户名和公司名都有关系,还有,软件好像没有对用户名等位数进行限制,所以不要填写太长的哦。

2、两个固定字符串。第一个直接看出来的:|b!pz*ls;rn|lf$vi^Axpe)rx5aic&9/2m5lsi4@0dmZw94cmqpfhw。
   第二个我们可以跟进软件在内存中找到:#serB&nz|mfM1/5(!sd$Mq.{s]+sFjtKpzSdtzoXqmb^Al@dv:s?x/。我在想是不是每台电脑的都一样。

3、先是算法call(1)从开头逐个取第一个字符串的Ascii码值,得a1。第二个字符串从(用户名的位数+循环次数)位置开始取Ascii码值,

得a2。     然后:a1×a2×循环次数。然后结果再×逐个取用户名的Ascii码值。最后和上一次的循环结果相加。这里加后的结果如果等于

119A792。那么恭喜您。你就是作者了。它会自动赋值。具体效果自己试试看。

4、上面加后的结果如果不等于119A792的话。就会进入算法(2)的call。就是用一个常量DB95DB95和378或。再调用算法call(1)来对用户名

和公司名进行运算。然后这三个结果相加。就是真码了(是装成10进制后的哦)。


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
路过支持一下,高产啊
2006-11-12 16:45
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
3
易语言注册机没能成功。主要是因为DB95DB95这个常数数值太大。一转换成10进制就是有符号的-610935915。而我不知道如何用易语言实现转成无符号的3684031381。

它和888或出来的结果也是很大。所以...

谁会的告诉我啊。谢谢了

.版本 2

.程序集 窗口程序集1

.子程序 _按钮1_被单击
.局部变量 string1, 文本型
.局部变量 string2, 文本型
.局部变量 name, 文本型
.局部变量 org, 文本型
.局部变量 len1, 整数型
.局部变量 len2, 整数型
.局部变量 i, 整数型
.局部变量 ebx, 长整数型
.局部变量 ebp, 长整数型
.局部变量 j, 整数型
.局部变量 k, 整数型
.局部变量 l, 整数型
.局部变量 n, 整数型
.局部变量 m, 整数型
.局部变量 ename, 长整数型
.局部变量 sum1, 长整数型
.局部变量 sum2, 长整数型
.局部变量 code, 长整数型
.局部变量 eorg, 长整数型
.局部变量 sum3, 长整数型
.局部变量 sum4, 文本型
.局部变量 sum5, 长整数型

string1 = “|b!pz*ls;rn|lf$vi^Axpe)rx5aic&9/2m5lsi4@0dmZw94cmqpfhw”
string2 = “#serB&nz|mfM1/5(!sd$Mq.{s]+sFjtKpzSdtzoXqmb^Al@dv:s?x/”
name = 编辑框1.内容
org = 编辑框2.内容
len1 = 取文本长度 (name)
len2 = 取文本长度 (org)

.计次循环首 (len1, i)
    ebx = 取代码 (string1, i)
    j = i + len1
    .计次循环首 (i, j)
        ebp = 取代码 (string2, j)
        ebx = ebx × ebp
        .计次循环首 (len1, k)
            ename = 取代码 (name, k)
            ename = ebx × ename
        .计次循环尾 ()
    .计次循环尾 ()
    sum1 = sum1 + ename

.计次循环尾 ()

.计次循环首 (len1, l)
    ebx = 取代码 (string1, l)
    n = i + len1
    .计次循环首 (i, n)
        ebp = 取代码 (string2, n)
        ebx = ebx × ebp
        .计次循环首 (len1, m)
            eorg = 取代码 (name, m)
            eorg = ebx × eorg
        .计次循环尾 ()
    .计次循环尾 ()
    sum2 = sum2 + eorg

.计次循环尾 ()

sum3 = 位或 (3684031381, 888)
sum4 = 取十六进制文本 (sum3)
sum5 = 十六进制到十进制 (sum4)     这样不行的。
sum3 = 到整数 (sum5)               这样也是不行的。到底该如何转成无符号的数呢?谁懂啊
code = sum1 + sum2 + sum3
编辑框3.内容 = 到文本 (code)

.子程序 十六进制到十进制, 整数型
.参数 十六进制文本, 文本型
.局部变量 文本, 文本型
.局部变量 最终值, 整数型
.局部变量 p, 整数型, , , 中间循环变量
.局部变量 临时数值, 文本型, , , 每一位上的值

文本 = 到小写 (十六进制文本)
.变量循环首 (1, 取文本长度 (文本), 1, p)
    临时数值 = 取文本中间 (文本, p, 1)
    .如果 (取代码 (临时数值, ) ≥ 取代码 (“a”, ) 且 取代码 (临时数值, ) ≤ 取代码 (“f”, ))
        最终值 = 最终值 + (取代码 (临时数值, ) - 取代码 (“a”, ) + 10) × 求次方 (16, 取文本长度 (文本) - p)
    .否则
        最终值 = 最终值 + 到数值 (临时数值) × 求次方 (16, 取文本长度 (文本) - p)
    .如果结束

.变量循环尾 ()
返回 (最终值)
2006-11-12 17:42
0
雪    币: 377
活跃值: (1835)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
4
好文,支持你!
2006-11-12 17:52
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
支持一下!
2006-11-12 21:38
0
雪    币: 52
活跃值: (2177)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持你啊.
2006-11-13 21:00
0
游客
登录 | 注册 方可回帖
返回