shenhaiyu 发表于 2006-12-13 10:12:32

易通文件夹锁2006 V3.0.5.0 一劳永逸的自注册破解方法

【破文标题】易通文件夹锁2006 V3.0.5.0 一劳永逸的自注册破解方法
【破文作者】藍色の夢
【作者邮箱】[email protected]
【作者主页】https://www.chinapyg.com
【破解工具】OD,W32Dasm,ASPackDie
【破解平台】XP SP2
【软件名称】易通文件夹锁2006 V3.0.5.0
【软件大小】3128K
【原版下载】http://www.etongsoft.net
【保护方式】壳,注册码
【软件简介】
    四大保护功能,三种保护方式。集文件夹锁、文件锁、磁盘锁、增强锁于一体。提供锁定、隐藏、移动三种
保护方式。防删除、复制等,是您文件资料的安全屏障。
    1.文件夹保护功能:文件夹保护功能具有文件夹加锁和文件夹深度隐藏两种文件夹保护方式。用户可以通过
右击想要保护的文件夹,选择[易通加锁/解锁]菜单来实现保护,也可以直接进入软件主界面的文件夹锁功能区
里面进行保护与解除保护。同时,保护后的文件夹可以防止复制,删除等亲作。
    2.文件保护功能:文件保护功能具有文件加锁和文件深度隐藏两种文件保护方式。用户可以通过右击想要保
护的文件,选择[易通文件加密]菜单来实现保护,也可以直接进入软件主界面的文件锁功能区里面进行保护与
解除保护。
    3.磁盘保护功能:磁盘保护功能具有磁盘驱动器加锁和磁盘驱动器隐藏两种磁盘保护方式。用户可以进入软
件主界面的磁盘锁功能区里面进行选择需要保护的磁盘驱动器。另外还提供了禁止使用USB设备,如U盘,USB
移动硬盘等USB接口设备和禁止USB存储设备的写入功能等,保护您的资料不能通过U盘、移动硬盘等外接设备
带走。
    4.增强保护功能:增强加锁功能目前为您提供了文件夹移动保护、程序锁、文件夹伪装、高强压缩加密等功
能。在以后软件的升级版本中我们还会努力为您提供更多、更实用的加锁保护功能!
【破解声明】学习飘云阁tigerisme斑竹的文章时发现只有算法分析,没有提供简单的破解思路,我就多此一举
的补充上了!
------------------------------------------------------------------------
【破解过程】

【分析过程】
    前辈们对于易通文件夹锁的分析已经很是深入了,但对于像我这样的菜鸟来说,每次破解都得挂上OD跟上
半天才能搞到注册码实在很不爽,爆破掉吧还需要改很多地方,于是想到了让程序自注册这种极其简单却非常
有效的方法,拿来与大家分享。

    脱壳使用ASPackDie轻松搞定(易通所有文件都是ASP的壳),启动OD调试CDirLock.exe,经前辈们的分析可
以肯定这个程序是调用了ETDirLock.dll进行注册加密,于是我们可以下bp MessageBoxA断点,然后运行并填
入假码 11111-22222-33333-44444 后断下,打开反汇编窗口,在这里找到如下代码进行分析(注册名:shenhaiyu)。

    (主要内容参考了 tigerisme、meiyou、网游难民 等前辈的文章,对他们表示衷心的感谢)。

0180220C    55                     push ebp                            ; 注册算法入口
0180220D    8BEC               mov ebp,esp
0180220F    B9 0B000000      mov ecx,0B
01802214    6A 00                push 0
01802216    6A 00                push 0
01802218    49                     dec ecx
01802219^ 75 F9               jnz short etdirloc.01802214
0180221B    53                     push ebx
0180221C    8BD8               mov ebx,eax
0180221E    33C0               xor eax,eax
01802220    55                     push ebp
01802221    68 82248001      push etdirloc.01802482
01802226    64:FF30            push dword ptr fs:
01802229    64:8920             mov dword ptr fs:,esp
0180222C    8D55 F4             lea edx,dword ptr ss:
0180222F    8B83 20030000   mov eax,dword ptr ds:
01802235    E8 1EDAFAFF      call etdirloc.017AFC58
0180223A    8B45 F4             mov eax,dword ptr ss:    ; 注册名=ebp-C送eax
0180223D    8D55 F8             lea edx,dword ptr ss:
01802240    E8 D76CF7FF      call etdirloc.01778F1C
01802245    837D F8 00      cmp dword ptr ss:,0      ; 注册名与0比较,防止名为空
01802249    0F84 80000000   je etdirloc.018022CF
0180224F    8D55 EC             lea edx,dword ptr ss:
01802252    8B83 24030000   mov eax,dword ptr ds:
01802258    E8 FBD9FAFF       call etdirloc.017AFC58
0180225D    8B45 EC             mov eax,dword ptr ss:   ; 第一组注册码送eax
01802260    8D55 F0             lea edx,dword ptr ss:
01802263    E8 B46CF7FF       call etdirloc.01778F1C
01802268    837D F0 00      cmp dword ptr ss:,0   ; 第一组注册码与0比较
0180226C    0F85 9A000000   jnz etdirloc.0180230C
01802272    8D55 E4             lea edx,dword ptr ss:
01802275    8B83 2C030000   mov eax,dword ptr ds:
0180227B    E8 D8D9FAFF      call etdirloc.017AFC58
01802280    8B45 E4             mov eax,dword ptr ss:
01802283    8D55 E8             lea edx,dword ptr ss:
01802286    E8 916CF7FF       call etdirloc.01778F1C
0180228B    837D E8 00      cmp dword ptr ss:,0
0180228F    75 7B                jnz short etdirloc.0180230C
01802291    8D55 DC            lea edx,dword ptr ss:
01802294    8B83 30030000   mov eax,dword ptr ds:
0180229A    E8 B9D9FAFF      call etdirloc.017AFC58
0180229F    8B45 DC         mov eax,dword ptr ss:
018022A2    8D55 E0         lea edx,dword ptr ss:
018022A5    E8 726CF7FF   call etdirloc.01778F1C
018022AA    837D E0 00      cmp dword ptr ss:,0
018022AE    75 5C         jnz short etdirloc.0180230C
018022B0    8D55 D4         lea edx,dword ptr ss:
018022B3    8B83 34030000   mov eax,dword ptr ds:
018022B9    E8 9AD9FAFF   call etdirloc.017AFC58
018022BE    8B45 D4         mov eax,dword ptr ss:
018022C1    8D55 D8         lea edx,dword ptr ss:
018022C4    E8 536CF7FF   call etdirloc.01778F1C
018022C9    837D D8 00      cmp dword ptr ss:,0
018022CD    75 3D         jnz short etdirloc.0180230C
018022CF    68 30000400   push 40030
018022D4    8D55 D0         lea edx,dword ptr ss:
018022D7    B8 9C248001   mov eax,etdirloc.0180249C
018022DC    E8 DB4BFEFF   call etdirloc.017E6EBC
018022E1    8B45 D0         mov eax,dword ptr ss:
018022E4    E8 3B2BF7FF   call etdirloc.01774E24
018022E9    50            push eax
018022EA    8D55 CC         lea edx,dword ptr ss:
018022ED    B8 B4248001   mov eax,etdirloc.018024B4
018022F2    E8 C54BFEFF   call etdirloc.017E6EBC
018022F7    8B45 CC         mov eax,dword ptr ss:
018022FA    E8 252BF7FF   call etdirloc.01774E24
018022FF    50            push eax
01802300    6A 00         push 0
01802302    E8 3D56F7FF   call <jmp.&user32.MessageBoxA>; jmp 到 user32.MessageBoxA
01802307    E9 EC000000   jmp etdirloc.018023F8
0180230C    8D55 C8         lea edx,dword ptr ss:
0180230F    8B83 24030000   mov eax,dword ptr ds:
01802315    E8 3ED9FAFF   call etdirloc.017AFC58
0180231A    FF75 C8         push dword ptr ss:      ; 第一组注册码 ebp-38=11111
0180231D    8D55 C4         lea edx,dword ptr ss:
01802320    8B83 2C030000   mov eax,dword ptr ds:; eax=5
01802326    E8 2DD9FAFF   call etdirloc.017AFC58
0180232B    FF75 C4         push dword ptr ss:      ; 第二组注册码 ebp-3C=22222
0180232E    8D55 C0         lea edx,dword ptr ss:
01802331    8B83 30030000   mov eax,dword ptr ds:; eax=5
01802337    E8 1CD9FAFF   call etdirloc.017AFC58
0180233C    FF75 C0         push dword ptr ss:      ; 第三组注册码 ebp-40=33333
0180233F    8D55 BC         lea edx,dword ptr ss:
01802342    8B83 34030000   mov eax,dword ptr ds:; eax=5
01802348    E8 0BD9FAFF   call etdirloc.017AFC58
0180234D    FF75 BC         push dword ptr ss:      ; 第四组注册码 ebp-44=44444
01802350    8D45 FC         lea eax,dword ptr ss:
01802353    BA 04000000   mov edx,4                     ; edx=4
01802358    E8 8F29F7FF   call etdirloc.01774CEC
0180235D    8D55 B8         lea edx,dword ptr ss:
01802360    8B83 20030000   mov eax,dword ptr ds:
01802366    E8 EDD8FAFF   call etdirloc.017AFC58
0180236B    8B55 B8         mov edx,dword ptr ss:; 注册名送edx
0180236E    8B45 FC         mov eax,dword ptr ss:    ; 假注册码送eax
01802371    E8 4E4FFEFF   call etdirloc.017E72C4             ; 调用算法call(1)
01802376    84C0            test al,al                                 ; 标志位检验
01802378    74 46         je short etdirloc.018023C0          ; 标志位判断,关键跳(但在此文不重要)
0180237A    68 40000400   push 40040
0180237F    8D55 B4         lea edx,dword ptr ss:
01802382    B8 9C248001   mov eax,etdirloc.0180249C
01802387    E8 304BFEFF   call etdirloc.017E6EBC
0180238C    8B45 B4         mov eax,dword ptr ss:
0180238F    E8 902AF7FF   call etdirloc.01774E24
01802394    50            push eax
01802395    8D55 B0         lea edx,dword ptr ss:
01802398    B8 E4248001   mov eax,etdirloc.018024E4
0180239D    E8 1A4BFEFF   call etdirloc.017E6EBC
018023A2    8B45 B0         mov eax,dword ptr ss:
018023A5    E8 7A2AF7FF   call etdirloc.01774E24
018023AA    50            push eax
018023AB    6A 00         push 0
018023AD    E8 9255F7FF   call <jmp.&user32.MessageBoxA>; 注册成功提示****************
018023B2    A1 2CC18001   mov eax,dword ptr ds:
018023B7    8B00            mov eax,dword ptr ds:
018023B9    E8 82D0FCFF   call etdirloc.017CF440
018023BE    EB 38         jmp short etdirloc.018023F8
018023C0    68 30000400   push 40030
018023C5    8D55 AC         lea edx,dword ptr ss:
018023C8    B8 9C248001   mov eax,etdirloc.0180249C
018023CD    E8 EA4AFEFF   call etdirloc.017E6EBC
018023D2    8B45 AC         mov eax,dword ptr ss:
018023D5    E8 4A2AF7FF   call etdirloc.01774E24
018023DA    50            push eax
018023DB    8D55 A8         lea edx,dword ptr ss:
018023DE    B8 28258001   mov eax,etdirloc.01802528
018023E3    E8 D44AFEFF   call etdirloc.017E6EBC
018023E8    8B45 A8         mov eax,dword ptr ss:
018023EB    E8 342AF7FF   call etdirloc.01774E24
018023F0    50            push eax
018023F1    6A 00         push 0
018023F3    E8 4C55F7FF   call <jmp.&user32.MessageBoxA>; 注册失败提示****************
018023F8    33C0            xor eax,eax
018023FA    5A            pop edx
018023FB    59            pop ecx
018023FC    59            pop ecx

=============================================================
算法Call(1)
017E72DA    55            push ebp                        ; 算法Call(1)开始
017E72DB    68 1A747E01   push etdirloc.017E741A
017E72E0    64:FF30         push dword ptr fs:
017E72E3    64:8920         mov dword ptr fs:,esp
017E72E6    C645 FF 00      mov byte ptr ss:,0
017E72EA    B8 50697E01   mov eax,etdirloc.017E6950
017E72EF    E8 64F8FFFF   call etdirloc.017E6B58
017E72F4    84C0            test al,al
017E72F6    74 0C         je short etdirloc.017E7304
017E72F8    A1 2CC18001   mov eax,dword ptr ds:
017E72FD    8B00            mov eax,dword ptr ds:
017E72FF    E8 3C81FEFF   call etdirloc.017CF440
017E7304    B8 04677E01   mov eax,etdirloc.017E6704
017E7309    E8 4AF8FFFF   call etdirloc.017E6B58
017E730E    84C0            test al,al
017E7310    74 0C         je short etdirloc.017E731E
017E7312    A1 2CC18001   mov eax,dword ptr ds:
017E7317    8B00            mov eax,dword ptr ds:
017E7319    E8 2281FEFF   call etdirloc.017CF440
017E731E    B8 18687E01   mov eax,etdirloc.017E6818
017E7323    E8 30F8FFFF   call etdirloc.017E6B58
017E7328    84C0            test al,al
017E732A    74 0C         je short etdirloc.017E7338
017E732C    A1 2CC18001   mov eax,dword ptr ds:
017E7331    8B00            mov eax,dword ptr ds:
017E7333    E8 0881FEFF   call etdirloc.017CF440
017E7338    8D45 F4         lea eax,dword ptr ss:
017E733B    E8 BCFAFFFF   call etdirloc.017E6DFC                   ; 调用算法call(2)-根据硬盘号取得机器码
017E7340    8D4D F0         lea ecx,dword ptr ss:
017E7343    8BD7            mov edx,edi                                 ; edi=注册名
017E7345    A1 7CDC8001   mov eax,dword ptr ds:
017E734A    E8 BDFCFFFF   call etdirloc.017E700C                  ; 调用算法call(4)-注册算法
017E734F    8B45 F0         mov eax,dword ptr ss:      ; EDX中存的就是注册真码
017E7352    8BF2            mov esi,edx                                    ;!!!!!关键所在,请看后文分析!!!!!!!
017E7354    E8 17DAF8FF   call etdirloc.01774D70               ; 由算法call(2)得出真正注册码
017E7359    0F85 A0000000   jnz etdirloc.017E73FF
017E735F    B2 01         mov dl,1
..........
017E7419    C3            retn                            ; 算法Call(1)结束

=============================================================
算法Call(2)-根据硬盘号取得机器码
017E6DFC    55            push ebp                        ; 算法Call(2)开始-根据硬盘号取得机器码
017E6DFD    8BEC            mov ebp,esp
017E6DFF    33C9            xor ecx,ecx
017E6E01    51            push ecx
017E6E02    51            push ecx
017E6E03    51            push ecx
017E6E04    51            push ecx
017E6E05    51            push ecx
017E6E06    53            push ebx
017E6E07    8BD8            mov ebx,eax
017E6E09    33C0            xor eax,eax
017E6E0B    55            push ebp
017E6E0C    68 AD6E7E01   push etdirloc.017E6EAD
017E6E11    64:FF30         push dword ptr fs:
017E6E14    64:8920         mov dword ptr fs:,esp
017E6E17    8D45 FC         lea eax,dword ptr ss:
017E6E1A    E8 5DFEFFFF   call etdirloc.017E6C7C
017E6E1F    8D55 F8         lea edx,dword ptr ss:
017E6E22    8B45 FC         mov eax,dword ptr ss:    ; L407S8SG            =ebp-4送eax
017E6E25    E8 F220F9FF   call etdirloc.01778F1C
017E6E2A    8B55 F8         mov edx,dword ptr ss:    ; ebp-8=L407S8SG,送edx
017E6E2D    8D45 FC         lea eax,dword ptr ss:
017E6E30    E8 D7DBF8FF   call etdirloc.01774A0C
017E6E35    837D FC 00      cmp dword ptr ss:,0      ; L407S8SG与0比较,判断是否有硬盘
017E6E39    74 22         je short etdirloc.017E6E5D
017E6E3B    8D45 F4         lea eax,dword ptr ss:
017E6E3E    50            push eax
017E6E3F    33C9            xor ecx,ecx
017E6E41    BA 12000000   mov edx,12                      ; edx=12
017E6E46    8B45 FC         mov eax,dword ptr ss:    ; L407S8SG=ebp-4送eax,硬盘ID转移
017E6E49    E8 FA000000   call etdirloc.017E6F48          ; 调用算法Call(3)-机器码算法
017E6E4E    8B55 F4         mov edx,dword ptr ss:    ; 由前个Call得出“14121011813951089292015”
017E6E51    B8 7CDC8001   mov eax,etdirloc.0180DC7C
017E6E56    E8 6DDBF8FF   call etdirloc.017749C8
017E6E5B    EB 28         jmp short etdirloc.017E6E85
017E6E5D    8D45 F0         lea eax,dword ptr ss:
017E6E60    50            push eax
017E6E61    8D45 EC         lea eax,dword ptr ss:
017E6E64    E8 2FFDFFFF   call etdirloc.017E6B98
017E6E69    8B45 EC         mov eax,dword ptr ss:
017E6E6C    33C9            xor ecx,ecx
017E6E6E    BA 12000000   mov edx,12
017E6E73    E8 D0000000   call etdirloc.017E6F48
017E6E78    8B55 F0         mov edx,dword ptr ss:
017E6E7B    B8 7CDC8001   mov eax,etdirloc.0180DC7C
017E6E80    E8 43DBF8FF   call etdirloc.017749C8
017E6E85    8BC3            mov eax,ebx
017E6E87    8B15 7CDC8001   mov edx,dword ptr ds:
017E6E8D    E8 36DBF8FF   call etdirloc.017749C8
017E6E92    33C0            xor eax,eax
017E6E94    5A            pop edx
017E6E95    59            pop ecx
017E6E96    59            pop ecx
017E6E97    64:8910         mov dword ptr fs:,edx
017E6E9A    68 B46E7E01   push etdirloc.017E6EB4
017E6E9F    8D45 EC         lea eax,dword ptr ss:
017E6EA2    BA 05000000   mov edx,5
017E6EA7    E8 ECDAF8FF   call etdirloc.01774998
017E6EAC    C3            retn                            ; 算法Call(2)结束

=============================================================
算法Call(3)--机器码算法
017E6F48    55            push ebp                        ; 算法Call(3)开始--机器码算法
017E6F49    8BEC            mov ebp,esp
017E6F4B    83C4 EC         add esp,-14
017E6F4E    53            push ebx
017E6F4F    56            push esi
017E6F50    57            push edi
017E6F51    33DB            xor ebx,ebx
017E6F53    895D EC         mov dword ptr ss:,ebx
017E6F56    895D F0         mov dword ptr ss:,ebx
017E6F59    894D F4         mov dword ptr ss:,ecx
017E6F5C    8955 F8         mov dword ptr ss:,edx
017E6F5F    8945 FC         mov dword ptr ss:,eax
017E6F62    33C0            xor eax,eax
017E6F64    55            push ebp
017E6F65    68 FA6F7E01   push etdirloc.017E6FFA
017E6F6A    64:FF30         push dword ptr fs:
017E6F6D    64:8920         mov dword ptr fs:,esp
017E6F70    8B45 FC         mov eax,dword ptr ss:
017E6F73    E8 B4DCF8FF   call etdirloc.01774C2C          ; L407S8SG=eax
017E6F78    8BF8            mov edi,eax
017E6F7A    85FF            test edi,edi
017E6F7C    7E 61         jle short etdirloc.017E6FDF
017E6F7E    BE 01000000   mov esi,1
017E6F83    8B45 FC         mov eax,dword ptr ss:    ; L407S8SG=ebp-4送eax
017E6F86    0FB64430 FF   movzx eax,byte ptr ds:[eax+esi->; 逐位取硬盘ID ASCII值“L407S8SG”,送eax
017E6F8B    99            cdq
017E6F8C    F77D F8         idiv dword ptr ss:       ; L407S8SG逐位取,每位ASCII码除12,结果
                                                                                 整数放eax,余数放edx
017E6F8F    8BDA            mov ebx,edx                     ; 余数放edx并送ebx
017E6F91    33DE            xor ebx,esi                     ; 余数逐位与1,2,3……15进行xor运算,结果记
                                                                           和起来就是机器码
017E6F93    837D F4 01      cmp dword ptr ss:,1      ; 与1比较
017E6F97    75 2A         jnz short etdirloc.017E6FC3   ; 不相等就跳,如果不跳,就走下面的计算
017E6F99    8BC3            mov eax,ebx
017E6F9B    B9 24000000   mov ecx,24
017E6FA0    99            cdq
017E6FA1    F7F9            idiv ecx
017E6FA3    8BDA            mov ebx,edx
017E6FA5    8D45 F0         lea eax,dword ptr ss:
017E6FA8    8A93 90B78001   mov dl,byte ptr ds:[ebx+180B790>
017E6FAE    E8 A1DBF8FF   call etdirloc.01774B54
017E6FB3    8B55 F0         mov edx,dword ptr ss:
017E6FB6    8B45 08         mov eax,dword ptr ss:
017E6FB9    E8 76DCF8FF   call etdirloc.01774C34
017E6FBE    8B45 08         mov eax,dword ptr ss:
017E6FC1    EB 18         jmp short etdirloc.017E6FDB
017E6FC3    8D55 EC         lea edx,dword ptr ss:
017E6FC6    8BC3            mov eax,ebx                     ; E送eax
017E6FC8    E8 6B21F9FF   call etdirloc.01779138          ; 将值转化为十进制
017E6FCD    8B55 EC         mov edx,dword ptr ss:   ; 由前面的Call将codeA逐个由16位转成十
                                                                                        进制,即59365498545897452114
017E6FD0    8B45 08         mov eax,dword ptr ss:
017E6FD3    E8 5CDCF8FF   call etdirloc.01774C34
017E6FD8    8B45 08         mov eax,dword ptr ss:
017E6FDB    46            inc esi
017E6FDC    4F            dec edi
017E6FDD^ 75 A4         jnz short etdirloc.017E6F83   ; 循环计算
017E6FDF    33C0            xor eax,eax
017E6FE1    5A            pop edx
017E6FE2    59            pop ecx
017E6FE3    59            pop ecx
017E6FE4    64:8910         mov dword ptr fs:,edx
017E6FE7    68 01707E01   push etdirloc.017E7001
017E6FEC    8D45 EC         lea eax,dword ptr ss:
017E6FEF    BA 02000000   mov edx,2
017E6FF4    E8 9FD9F8FF   call etdirloc.01774998
017E6FF9    C3            retn                            ; 算法Call(3)结束

=============================================================
算法call(4)-注册算法
017E700C    55            push ebp                        ; 算法call(4)开始-注册算法
017E700D    8BEC            mov ebp,esp
017E700F    83C4 E0         add esp,-20
017E7012    53            push ebx
017E7013    56            push esi
017E7014    57            push edi
017E7015    33DB            xor ebx,ebx
017E7017    895D E0         mov dword ptr ss:,ebx
017E701A    895D E4         mov dword ptr ss:,ebx
017E701D    894D F4         mov dword ptr ss:,ecx
017E7020    8955 F8         mov dword ptr ss:,edx
017E7023    8945 FC         mov dword ptr ss:,eax
017E7026    33C0            xor eax,eax
017E7028    55            push ebp
017E7029    68 19717E01   push etdirloc.017E7119
017E702E    64:FF30         push dword ptr fs:
017E7031    64:8920         mov dword ptr fs:,esp
017E7034    8B45 F4         mov eax,dword ptr ss:
017E7037    E8 38D9F8FF   call etdirloc.01774974
017E703C    8B45 FC         mov eax,dword ptr ss:
017E703F    E8 E8DBF8FF   call etdirloc.01774C2C
017E7044    85C0            test eax,eax
017E7046    0F84 B2000000   je etdirloc.017E70FE
017E704C    8B45 F8         mov eax,dword ptr ss:
017E704F    E8 D8DBF8FF   call etdirloc.01774C2C
017E7054    85C0            test eax,eax
017E7056    0F84 A2000000   je etdirloc.017E70FE
017E705C    8D45 E4         lea eax,dword ptr ss:
017E705F    E8 10D9F8FF   call etdirloc.01774974
017E7064    8B45 FC         mov eax,dword ptr ss:
017E7067    E8 C0DBF8FF   call etdirloc.01774C2C
017E706C    8945 EC         mov dword ptr ss:,eax
017E706F    8B45 F8         mov eax,dword ptr ss:
017E7072    E8 B5DBF8FF   call etdirloc.01774C2C
017E7077    8945 E8         mov dword ptr ss:,eax
017E707A    BF 01000000   mov edi,1                     ; EDX置1
017E707F    BB 01000000   mov ebx,1                     ; EBX置1
017E7084    C745 F0 0100000>mov dword ptr ss:,1   ; =1
017E708B    8B45 FC         mov eax,dword ptr ss:    ; 求出注册码,循环开始
017E708E    0FB64438 FF   movzx eax,byte ptr ds:[eax+edi->; 机器码ASCII码逐位放入EAX
017E7093    2B45 F0         sub eax,dword ptr ss:   ; 减去 SS:中的值
017E7096    03C7            add eax,edi                     ; 加上EDI
017E7098    8B55 F8         mov edx,dword ptr ss:
017E709B    0FB6541A FF   movzx edx,byte ptr ds:[edx+ebx->; 用户名ASCII码逐位放入EDX
017E70A0    33C2            xor eax,edx                     ; 上面两个数异或运算
017E70A2    03C3            add eax,ebx                     ; 上面得到的值加上EBX
017E70A4    99            cdq                           ; 扩展指令
017E70A5    33C2            xor eax,edx                     ; eax xor edx
017E70A7    2BC2            sub eax,edx                     ; eax-edx
017E70A9    8BF0            mov esi,eax                     ; eax转移
017E70AB    8BC6            mov eax,esi
017E70AD    B9 24000000   mov ecx,24                      ; ECX的值为24
017E70B2    99            cdq                           ; 扩展指令
017E70B3    F7F9            idiv ecx                        ; EAX中的值除以24,余数放在EDX中
017E70B5    8BF2            mov esi,edx                     ; EDX中的值放在ESI中
017E70B7    8D45 E0         lea eax,dword ptr ss:
017E70BA    8A96 90B78001   mov dl,byte ptr ds:[esi+180B790>; 找到内存密码表中相应的值,把
                                                                                             这些值连接起来就是真码
017E70C0    E8 8FDAF8FF   call etdirloc.01774B54
017E70C5    8B55 E0         mov edx,dword ptr ss:
017E70C8    8D45 E4         lea eax,dword ptr ss:
017E70CB    E8 64DBF8FF   call etdirloc.01774C34
017E70D0    3B7D EC         cmp edi,dword ptr ss:   ; EDI中的值和机器码位数比较
017E70D3    7D 03         jge short etdirloc.017E70D8
017E70D5    47            inc edi
017E70D6    EB 05         jmp short etdirloc.017E70DD
017E70D8    BB 01000000   mov ebx,1
017E70DD    3B5D E8         cmp ebx,dword ptr ss:   ; EBX中的值和用户名位数比
017E70E0    7D 03         jge short etdirloc.017E70E5
017E70E2    43            inc ebx
017E70E3    EB 05         jmp short etdirloc.017E70EA
017E70E5    BB 01000000   mov ebx,1
017E70EA    FF45 F0         inc dword ptr ss:       ; SS:中的值加1
017E70ED    837D F0 15      cmp dword ptr ss:,15    ; SS:的值和15h比较,控制
                                                                                       循环次数
017E70F1^ 75 98         jnz short etdirloc.017E708B   ; 循环结束
017E70F3    8B45 F4         mov eax,dword ptr ss:
017E70F6    8B55 E4         mov edx,dword ptr ss:
017E70F9    E8 CAD8F8FF   call etdirloc.017749C8
017E70FE    33C0            xor eax,eax
017E7100    5A            pop edx
017E7101    59            pop ecx
017E7102    59            pop ecx
017E7103    64:8910         mov dword ptr fs:,edx
017E7106    68 20717E01   push etdirloc.017E7120
017E710B    8D45 E0         lea eax,dword ptr ss:
017E710E    BA 02000000   mov edx,2
017E7113    E8 80D8F8FF   call etdirloc.01774998
017E7118    C3            retn                            ; 算法Call(3)结束

===========================================================
【破解总结】
在这里给出的Call算法2-4并不是本文的关键,我只是将前辈们的分析成果一起放到这里方便大家研究。
经过四个Call的分析可以得出这样的结论:当 Call(1) retn 的时候程序立即在 01802376 处进行标志位
检验,所以真假码的对比判断必定在 Call(1) 中完成。
下面进入 Call(1) 中,一步一步跟下去会发现程序在 017E734A 调用 Call(4) 计算注册码,先不管
Call(4) 接着来到下两句 017E7352,你会惊奇的发现 esi 和 edx 两个寄存器中分别存放着真假注册
码。而且是将 edx 中的假码覆盖写入 esi 的真码,很明显是要将假码压入堆栈在 017E7354 调用
Call(2) 比较。
怎么样,脑子中是不是出现一个很坏的念头:把 017E7352 的 mov esi,edx 改为 mov edx,esi 会有
什么后果。哈哈,恭喜你想对了,这样一来堆栈中存的就全都是程序自己算出来的真码啦,不管程序
运行到哪里都是用两个真码进行比较,自然就会成功注册了。
既然已经找到要改的地方了,接下来可以使用 W32Dasm 打开 ETDirLock.dll 定位到 017E7352 将
8BF2 mov esi,edx 改为 8BD6 mov edx,esi,然后覆盖原文件,运行软件随意输入用户名与注册码,
哈哈,提示什么?成功注册了。
再验证一下,将原文件覆盖回去,运行软件,嗯,仍然是注册版。只要保留修改后的 ETDirLock.dll
文件就可以不用OD跟码,一劳永逸的让程序自己注册了。

这是偶发表的第一篇破文,所有分析是建立在前辈们的成果基础上的,希望不要被大家耻笑为抄袭
用鸡蛋砸我哦,有兴趣的朋友请自己动手啊~~

还要提示的一点是,易通其他软件算法都是差不多的,可以用这种思路破解易通其他软件^^

另外有朋友说我的文章是摘自看雪论坛的,呵呵,其实那是我自己发的,只是想多几个途径发表,不知道
是否犯了规矩,希望大家多指正.

[ 本帖最后由 藍色の夢 于 2006-12-27 13:44 编辑 ]

zhimingcom 发表于 2006-12-13 10:17:26

精彩!!!:victory:

glts 发表于 2006-12-13 10:53:10

顶啊~~好文~~

shenhaiyu 发表于 2006-12-13 11:22:15

自己顶一下,呵呵。初次发表文章,很多东西都不会,刚注意到格式还有些欠佳,不够整齐,就把折行弄了一下。其他内容太多了,所以我犯个懒不整理了,大家凑和看吧

shenhaiyu 发表于 2006-12-13 11:30:17

我本来想用keymake做个内存补丁了,可是发现 易通 有反内存补丁的功能,无法用
注册机,一运行画面一闪就退出了,真是让人。。。。那位高手有高招希望指点一下
如何解决这种情况,在这先谢谢了

q23966 发表于 2006-12-13 14:38:01

十分感谢啊!

hangyubin 发表于 2006-12-13 16:36:28

说得很详细!谢谢!学习!

ks5678909 发表于 2006-12-13 16:47:53

学习了,就象看天书,楼主厉害:lol:

yunfeng 发表于 2006-12-13 17:31:54

好文章,学习了。

ZHOU2X 发表于 2006-12-13 18:09:27

学习一下……支持!!!!
页: [1] 2
查看完整版本: 易通文件夹锁2006 V3.0.5.0 一劳永逸的自注册破解方法