首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > [原创]算法浅探——OpenCanvas V2.24 汉化版(2)
【标  题】:[原创]算法浅探——OpenCanvas V2.24 汉化版(2)
【关键字】:C,24,V2,OpenCanvas,V2,24
【来  源】:网络

[原创]算法浅探——OpenCanvas V2.24 汉化版(2)

进入关键CALL④:004F57A2  call 004F545A


* Referenced by a CALL at Address:
|:004F57A2  
|
:004F545A 8B442404                mov eax, dword ptr [esp+04]
                                 ====>EAX=AE315678-ABCD-EFGHIJK4  试炼码

:004F545E 8A4812                  mov cl, byte ptr [eax+12]
                                 ====>CL=49  取试炼码第19位字符的HEX值

:004F5461 8A500C                  mov dl, byte ptr [eax+0C]
                                 ====>DL=44  取试炼码第13位字符的HEX值

:004F5464 03CA                    add ecx, edx
                                 ====>ECX=0082F149 + 00000044=0082F18D

:004F5466 83E10F                  and ecx, 0000000F
                                 ====>ECX=0082F18D AND 0000000F=D

:004F5469 8A8144905000            mov al, byte ptr [ecx+00509044]
                                 ====>根据ECX值从[00509044]的表中取值!
                                 ====>AL=44    将和试炼码的第21位比较!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509044]内存中是一张表:

00509044  30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46  0123456789ABCDEF
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

:004F546F C3                      ret

小结:取第13、19位试炼码的HEX值,同上进行低位相加,再从表中取值。
    4+9=D      [00509044 + D]处是44,44和第21位比较,所以第21位是 D


—————————————————————————————————
两次进入CALL⑤、⑥:004F57C6  call 004F53A6


* Referenced by a CALL at Addresses:
|:004F57C6   , :004F57D3  
|
:004F53A6 8B442404                mov eax, dword ptr [esp+04]
                                 ====>EAX=4E
                                 ====>EAX=53

:004F53AA 25FF000000              and eax, 000000FF
:004F53AF 83F841                  cmp eax, 00000041
:004F53B2 7C05                    jl 004F53B9
:004F53B4 83F85A                  cmp eax, 0000005A
:004F53B7 7E0D                    jle 004F53C6

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F53B2(C)
|
:004F53B9 83F861                  cmp eax, 00000061
:004F53BC 7C05                    jl 004F53C3
:004F53BE 83F87A                  cmp eax, 0000007A
:004F53C1 7E03                    jle 004F53C6

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F53BC(C)
|
:004F53C3 32C0                    xor al, al
:004F53C5 C3                      ret

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F53B7(C), :004F53C1(C)
|
:004F53C6 83F841                  cmp eax, 00000041
:004F53C9 7C0F                    jl 004F53DA
:004F53CB 83F85A                  cmp eax, 0000005A
:004F53CE 7F0A                    jg 004F53DA
:004F53D0 83C0BF                  add eax, FFFFFFBF
                                 ====>EAX=4E - 41=D
                                 ====>EAX=53 - 41=12

:004F53D3 8A8028905000            mov al, byte ptr [eax+00509028]
                                 ====>根据EAX值从[00509028]的表中取值!
                                 ====>AL=01
                                 ====>AL=01  

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509028]内存中是一张表:

00509028  01 01 00 01 01 01 01 01 01 01 01 00 01 01 01 01  
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


:004F53D9 C3                      ret

这2次取值运算的作用不太清楚,可能是检测第13位、19位的字符有没有踩上程序预埋的“地雷”吧?
因为此处内存中有的值是00,如果你很走运就碰上此处的话,恭喜你:“Game Over”了!~@~~@~

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F53C9(C), :004F53CE(C)
|
:004F53DA 83C09F                  add eax, FFFFFF9F
:004F53DD 8A8028905000            mov al, byte ptr [eax+00509028]
:004F53E3 C3                      ret

                        关键CALL二  结 束
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

 
 
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
                        关键CALL三  开 始

进入关键CALL:004AD889   call 004F57F9


* Referenced by a CALL at Addresses:
|:004AD889   , :004ADE7F   , :004C5E33   , :004C77D2   , :004C781F  
|:004D2871   , :004D3199   , :004D3546   , :004D4A1C   , :004D4CB7  
|:004D4F5A  
|
:004F57F9 53                      push ebx
:004F57FA 56                      push esi
:004F57FB 57                      push edi
:004F57FC 8B7C2410                mov edi, dword ptr [esp+10]
                                 ====>EDI=AE315678-ABCD-EFGHIJD4
因为在下面的运算中第7位和第12位必须满足几个条件,所以分析了几遍后把第7位改为4,第12位改为3
AE315678-ABCD-EFGHIJD4 改为 AE315648-AB3D-EFGHIJD4

:004F5800 0FBE4706                movsx eax, byte ptr [edi+06]
                                 ====>EAX=34  取试炼码第7位字符的HEX值

:004F5804 83F830                  cmp eax, 00000030
:004F5807 7C0A                    jl 004F5813
:004F5809 83F839                  cmp eax, 00000039
:004F580C 7F05                    jg 004F5813
:004F580E 8D58D0                  lea ebx, dword ptr [eax-30]
                                 ====>如果第7位字符是数字则此处-30
                                 ====>EBX=34 - 30=4

:004F5811 EB15                    jmp 004F5828

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5807(C), :004F580C(C)
|
:004F5813 83F841                  cmp eax, 00000041
:004F5816 0F8C92000000            jl 004F58AE
:004F581C 83F846                  cmp eax, 00000046
:004F581F 0F8F89000000            jg 004F58AE
:004F5825 8D58C9                  lea ebx, dword ptr [eax-37]


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F5811(U)
|
:004F5828 0FBE470B                movsx eax, byte ptr [edi+0B]
                                 ====>EAX=33  取试炼码第12位字符的HEX值

:004F582C 83F830                  cmp eax, 00000030
:004F582F 7C0A                    jl 004F583B
:004F5831 83F839                  cmp eax, 00000039
:004F5834 7F05                    jg 004F583B
:004F5836 8D70D0                  lea esi, dword ptr [eax-30]
                                 ====>如果第12位字符是数字则此处-30
                                 ====>ESI=33 - 30=3

:004F5839 EB0D                    jmp 004F5848

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F582F(C), :004F5834(C)
|
:004F583B 83F841                  cmp eax, 00000041
:004F583E 7C6E                    jl 004F58AE
:004F5840 83F846                  cmp eax, 00000046
:004F5843 7F69                    jg 004F58AE
:004F5845 8D70C9                  lea esi, dword ptr [eax-37]


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F5839(U)
|
:004F5848 57                      push edi
:004F5849 E822FCFFFF              call 004F5470
                                 ====>关键CALL!⑦进入!

:004F584E 0FBE4F13                movsx ecx, byte ptr [edi+13]
                                 ====>ECX=4A  取试炼码第20位字符的HEX值

:004F5852 25FF000000              and eax, 000000FF
:004F5857 83C404                  add esp, 00000004
:004F585A 3BC8                    cmp ecx, eax
                                 ====>ECX=4A  试炼码第22位字符的HEX值
                                 ====>EAX=37  上面4F5849处运算得出的值
                                 ====>所以注册码的第20位应是7
因此把试炼码AE315648-AB3D-EFGHIJD4再次修改为AE315648-AB3D-EFGHI7D4
好了,GAME OVER!不,是终于成功了!!^O^^O^^O^^O^


:004F585C 7550                    jne 004F58AE
:004F585E C1E604                  shl esi, 04
                                 ====>ESI=3 SHL 4=30

:004F5861 03F3                    add esi, ebx
                                 ====>ESI=30 + 4=34

:004F5863 B90D000000              mov ecx, 0000000D
                                 ====>ECX=D

:004F5868 8BC6                    mov eax, esi
:004F586A 99                      cdq
:004F586B F7F9                    idiv ecx
                                 ====>EDX=34 % D=0

:004F586D 85D2                    test edx, edx
                                 ====>余数是否为0?此处余数必须为0!

:004F586F 753D                    jne 004F58AE
                                 ====>跳则OVER!

:004F5871 B84FECC44E              mov eax, 4EC4EC4F
:004F5876 F7EE                    imul esi
:004F5878 C1FA02                  sar edx, 02
:004F587B 8BC2                    mov eax, edx
:004F587D C1E81F                  shr eax, 1F
:004F5880 03D0                    add edx, eax
:004F5882 83FA03                  cmp edx, 00000003
:004F5885 7C17                    jl 004F589E
:004F5887 83FA09                  cmp edx, 00000009
:004F588A 7F12                    jg 004F589E
:004F588C B801000000              mov eax, 00000001
:004F5891 33C9                    xor ecx, ecx
:004F5893 3BC0                    cmp eax, eax
:004F5895 5F                      pop edi
:004F5896 0F94C1                  sete cl
:004F5899 5E                      pop esi
:004F589A 8AC1                    mov al, cl
:004F589C 5B                      pop ebx
:004F589D C3                      ret

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5885(C), :004F588A(C)
|
:004F589E 33C0                    xor eax, eax
:004F58A0 33C9                    xor ecx, ecx
:004F58A2 83F801                  cmp eax, 00000001
:004F58A5 5F                      pop edi
:004F58A6 0F94C1                  sete cl
:004F58A9 5E                      pop esi
:004F58AA 8AC1                    mov al, cl
:004F58AC 5B                      pop ebx
:004F58AD C3                      ret

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5816(C), :004F581F(C), :004F583E(C), :004F5843(C), :004F585C(C)
|:004F586F(C)
|
:004F58AE 5F                      pop edi
:004F58AF 5E                      pop esi
:004F58B0 32C0                    xor al, al
:004F58B2 5B                      pop ebx
:004F58B3 C3                      ret


—————————————————————————————————
进入关键CALL⑦:004F5849  call 004F5470


* Referenced by a CALL at Address:
|:004F5849  
|
:004F5470 8B442404                mov eax, dword ptr [esp+04]
                                 ====>EAX=AE315648-AB3D-EFGHIJD4

:004F5474 8A480B                  mov cl, byte ptr [eax+0B]
                                 ====>CL=33  取试炼码第12位字符的HEX值

:004F5477 8A5006                  mov dl, byte ptr [eax+06]
                                 ====>DL=34  取试炼码第7位字符的HEX值

:004F547A 03CA                    add ecx, edx
                                 ====>ECX=0082F133 + 0082F134=0105E267

:004F547C 83E10F                  and ecx, 0000000F
                                 ====>ECX=0105E267  AND  0000000F=7

:004F547F 8A8144905000            mov al, byte ptr [ecx+00509044]
                                 ====>根据ECX值从[00509044]的表中取值!
                                 ====>AL=37    将和试炼码的第20位比较!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509044]内存中是一张表:

00509044  30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46  0123456789ABCDEF
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


:004F5485 C3                      ret

小结:取第12、7位试炼码的HEX值,同上进行低位相加,再从表中取值。
     3+4=7    [00509044 + 7]处是37,37和第20位比较,所以第20位是 7

                        关键CALL三  结 束
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

—————————————————————————————————
【算 法  总 结】:


实在是快在里面转晕了。简单理顺一下吧,说不明白的地方请多多指教。


一、注册码需要22位。第9、14位固定为-


二、注册码应该有五种组合的可能,但是第1、3、5组合最终是不行的,会弹出“Region code mismatch!”。
   晕,我好不容易按第一种组合求逆出一组注册码却提示我“错配”了。吐血!


三、重新按第二种组合的可能进行求逆。注册码的第2、4位固定是E、1


四、第1、10、16位应是大写字母。
我的试炼码12345678-ABCD-EFGHIJKL调整为:AE315678-ABCD-EFGHIJKL


五、关键CALL 一:

第1、10、16位字母的HEX值的低位相加再减4,以此为指针从[00509044]内存中的表中取值
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509044]内存中是一张表:

00509044  30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46  0123456789ABCDEF
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
1+2+6-4=4  [00509044 + 4]处是34,34和第22位比较,所以第22位是 4


六、关键CALL 二:

1、取第13、19位试炼码的HEX值,同上进行低位相加,再从表中取值。
4+9=D      [00509044 + D]处是44,44和第21位比较,所以第21位是 D

我的试炼码AE315678-ABCD-EFGHIJKL再次调整为:AE315678-ABCD-EFGHIJD4

2、取第13、19位试炼码的HEX值,如果是数字则-30,是字母则-37。
我的13位是44 - 37=D   19位是49 - 37=12
D+程序给的41=4E      12+程序给的41=53  这2处最后从[00509028]内存的表中取值。
可能是检测第13位、19位的字符有没有踩上程序预埋的“地雷”吧?^O^^O^


七、关键CALL 三:

1、取第12、7位试炼码的HEX值,如果是数字则-30,是字母则-37。
我的12位是43 - 37=C  ; C SHL 4=C0    ; 7位是37 - 30=7 ;
C0 + 7=C7     此处的得数(C7)和程序给的D 求模,要求余数为0!

所以简单穷举一下,找到符合条件的第12、7位。第12位3,第7位4
33-30=3 ;3 SHL 4=30  ;34-30=4; 30+4=34 ;34 % D=0
当然,还有其它可行的选择。

我的试炼码AE315678-ABCD-EFGHIJD4再次调整为:AE315648-AB3D-EFGHIJD4

2、取第12、7位试炼码的HEX值,同上进行低位相加,再从表中取值。
3+4=7    [00509044 + 7]处是37,37和第20位比较,所以第20位是 7


其它未用到的各位可以是任意数字或字母!

好了,至此求出一组可用的注册码:AE315648-AB3D-EFGHI7D4


呵呵,很抱歉,如果看不明白的话我也没办法了,我的水平太低,只有这个分析水平了。

—————————————————————————————————
【注册信息保存】:


REGEDIT4

[HKEY_CLASSES_ROOT\CLSID\{4ACAA712-F2A3-44E6-A749-34C3BD05BECB}\Version]
"idx"=hex:86,1f,52,8d,8d,f9
"id"="AE315648-AB3D-EFGHI7D4"

—————————————————————————————————
【整        理】:


一组可用的注册码:AE315648-AB3D-EFGHI7D4
呵呵,还有很多,只要你愿意,你可以自己去找吧。^v^^v^

算法分析: <献给初学者> 之一:【上一篇】
算法分析: <献给初学者> 之七:【下一篇】
【相关文章】
  • [原创]算法浅探——OpenCanvas V2.24 汉化版(1)
  • 调酒师 CollegeBar V8.1 注册算法分析-VB6 下
  • 电脑锁(Lock) V2.1 算法分析
  • 简单算法——Windows设置大师 2003 V2.0 Build 0420
  • ToolbarPro 4.61 Cracked And my Keygen算法分析
  • Talisman Desktop v2.6 算法分析
  • SuperCleaner V2.50 汉化版的算法跟踪
  • supercapture3.0的版注册机!
  • 象棋桥 V2.1算法
  • 狂风汉化百宝箱 XP v2.00a 算号器 算法分析
  • 【随机文章】
  • Cisco 2600系列
  • GBK文本转成UTF-8的小程序
  • HP-UX下共享cdrom到别的主机
  • 25年中国流行全纪录
  • EVC录音详解
  • 是画面比音乐慢?,不是音乐比画面慢耶
  • 用C实现C++的多态---剖析GTK的"对象" (三)
  • 玩转Xwindow 终端
  • IE首页被恶意修改了
  • DBA笔试题
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.