小胖网络知识大全
首页 | TAGS | QQ | 输入法 | Win7
  • Dll Show 4.7 汉化版注册算法

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

      破解过程

      1、早上看到一个dll,居然是英文的,所以想汉化它,没想到搜索了下找到这个软件,一运行就是个unreg。(感觉象是在示威)虽然已经有现

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

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

      在输入信息

      user name:pediy

      organization:yulin

      registration:123456

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

      0041679B . FF15 6C024200 call dwordptr[<&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 /$Content$nbsp; 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, dwordptr[<&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 dwordptr[<&USER32.IsDlgButtonChecked>; \IsDlgButtonChecked

      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

      00416700 /$Content$nbsp; 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 dwordptr[<&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;rnlf$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&nzmfM1/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)那里那个 0040E4D0call004160A0。这个call里面又会两次调用上面的那个(1)的call。一次是用来计算用户名,

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

      004160A0 /$Content$nbsp; 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;rnlf$vi^Axpe)rx5aic&9/2m5lsi4@0dmZw94cmqpfhw。

      第二个我们可以跟进软件在内存中找到:#serB&nzmfM1/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进制后的哦)。

  • TAGS:
  • 作者:管理员 时间:2009-6-21 来源:网络 人气:

热门TAGS


相关推荐

热门新闻

版权所有:小胖网络迷 www.209j.cn 2004-2009 All Rights Reserved.
站长QQ: 951969697 粤ICP备05096685号