blackk 发表于 2011-7-8 13:49:25

高效e人 Ver2.98(Build 243) 算法分析

本帖最后由 blackk 于 2011-7-8 13:54 编辑

【破文标题】高效e人 Ver2.98(Build 243) 算法分析
【破文作者】Blackk
【作者邮箱】[email protected]
【作者主页】Http://Blackk.co.cc
【破解工具】OD
【破解平台】XP SP3
【软件名称】高效e人 Ver2.98(Build 243)
【软件大小】3.96 MB
【原版下载】http://www.gaoxiaoeren.com/download.htm
【破解声明】本解密分析文章仅限用于学习和研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
------------------------------------------------------------------------
【破解过程】bp MessageBoxExA


//算法入口
00B4378C/$55            push    ebp
00B4378D|.8BEC          mov   ebp, esp
00B4378F|.33C9          xor   ecx, ecx
00B43791|.51            push    ecx
00B43792|.51            push    ecx
00B43793|.51            push    ecx
00B43794|.51            push    ecx
00B43795|.51            push    ecx
00B43796|.53            push    ebx
00B43797|.8BD8          mov   ebx, eax
00B43799|.33C0          xor   eax, eax
00B4379B|.55            push    ebp
00B4379C|.68 A038B400   push    00B438A0
00B437A1|.64:FF30       push    dword ptr fs:
00B437A4|.64:8920       mov   dword ptr fs:, esp
00B437A7|.8D55 F8       lea   edx, dword ptr
00B437AA|.8BC3          mov   eax, ebx
00B437AC|.E8 53010000   call    00B43904                         ;取用户名
00B437B1|.8B45 F8       mov   eax, dword ptr
00B437B4|.E8 CB198CFF   call    00405184                         ;取用户名长度
00B437B9|.85C0          test    eax, eax
00B437BB|.75 3E         jnz   short 00B437FB                   ;验证是否输入用户名
00B437BD|.A0 AC38B400   mov   al, byte ptr
00B437C2|.50            push    eax
00B437C3|.B2 01         mov   dl, 1
00B437C5|.A1 08179400   mov   eax, dword ptr
00B437CA|.E8 256DE0FF   call    0094A4F4
00B437CF|.8D55 F4       lea   edx, dword ptr
00B437D2|.E8 6962E0FF   call    00949A40
00B437D7|.8B55 F4       mov   edx, dword ptr
00B437DA|.33C9          xor   ecx, ecx
00B437DC|.A1 E87D8800   mov   eax, dword ptr
00B437E1|.E8 3A59D4FF   call    00889120
00B437E6|.8B93 28030000 mov   edx, dword ptr
00B437EC|.A1 347D8800   mov   eax, dword ptr
00B437F1|.E8 8A51D4FF   call    00888980
00B437F6|.E8 F1EE8CFF   call    004126EC
00B437FB|>E8 D0EAFCFF   call    00B122D0
00B43800|.8945 FC       mov   dword ptr , eax
00B43803|.33C0          xor   eax, eax
00B43805|.55            push    ebp
00B43806|.68 7E38B400   push    00B4387E
00B4380B|.64:FF30       push    dword ptr fs:
00B4380E|.64:8920       mov   dword ptr fs:, esp
00B43811|.8D55 F0       lea   edx, dword ptr
00B43814|.8BC3          mov   eax, ebx
00B43816|.E8 95000000   call    00B438B0                         ;取注册码
00B4381B|.8B55 F0       mov   edx, dword ptr
00B4381E|.8B45 FC       mov   eax, dword ptr
00B43821|.E8 86C9E0FF   call    009501AC                         ;算法CALL


//算法CALL
009501AC/$55            push ebp
009501AD|.8BEC          mov ebp,esp
009501AF|.B9 06000000   mov ecx,0x6
009501B4|>6A 00         /push 0x0
009501B6|.6A 00         |push 0x0
009501B8|.49            |dec ecx
009501B9|.^ 75 F9         \jnz short Efficien.009501B4
009501BB|.53            push ebx
009501BC|.56            push esi
009501BD|.57            push edi
009501BE|.8BF2          mov esi,edx
009501C0|.8BF8          mov edi,eax
009501C2|.33C0          xor eax,eax
009501C4|.55            push ebp
009501C5|.68 85039500   push Efficien.00950385
009501CA|.64:FF30       push dword ptr fs:
009501CD|.64:8920       mov dword ptr fs:,esp
009501D0|.33DB          xor ebx,ebx
009501D2|.8B47 08       mov eax,dword ptr ds:
009501D5|.E8 AA4FABFF   call Efficien.00405184
009501DA|.50            push eax
009501DB|.8B47 0C       mov eax,dword ptr ds:
009501DE|.E8 A14FABFF   call Efficien.00405184
009501E3|.C1E0 02       shl eax,0x2
009501E6|.5A            pop edx
009501E7|.03D0          add edx,eax
009501E9|.83C2 1B       add edx,0x1B
009501EC|.42            inc edx
009501ED|.52            push edx
009501EE|.8BC6          mov eax,esi
009501F0|.E8 8F4FABFF   call Efficien.00405184
009501F5|.5A            pop edx
009501F6|.3BD0          cmp edx,eax
009501F8|.0F85 6C010000 jnz Efficien.0095036A                  ;验证注册码是否37位
009501FE|.8D4D F0       lea ecx,
00950201|.8BD6          mov edx,esi
00950203|.8BC7          mov eax,edi
00950205|.E8 8E010000   call Efficien.00950398
0095020A|.8D45 FC       lea eax,
0095020D|.50            push eax
0095020E|.8B47 08       mov eax,dword ptr ds:
00950211|.E8 6E4FABFF   call Efficien.00405184
00950216|.8BF0          mov esi,eax
00950218|.8B47 0C       mov eax,dword ptr ds:
0095021B|.E8 644FABFF   call Efficien.00405184
00950220|.03F0          add esi,eax
00950222|.8BCE          mov ecx,esi
00950224|.BA 01000000   mov edx,0x1
00950229|.8B45 F0       mov eax,
0095022C|.E8 B351ABFF   call Efficien.004053E4
00950231|.8D45 EC       lea eax,
00950234|.8B4F 0C       mov ecx,dword ptr ds:
00950237|.8B57 08       mov edx,dword ptr ds:
0095023A|.E8 914FABFF   call Efficien.004051D0
0095023F|.8B55 EC       mov edx,
00950242|.8B45 FC       mov eax,
00950245|.E8 16CAABFF   call Efficien.0040CC60                   ;比较前6位是否为EP200-
0095024A|.84C0          test al,al
0095024C|.0F84 18010000 je Efficien.0095036A
00950252|.8D45 E8       lea eax,
00950255|.50            push eax
00950256|.8B47 08       mov eax,dword ptr ds:
00950259|.E8 264FABFF   call Efficien.00405184
0095025E|.8BD8          mov ebx,eax
00950260|.8B47 0C       mov eax,dword ptr ds:
00950263|.E8 1C4FABFF   call Efficien.00405184
00950268|.03C0          add eax,eax
0095026A|.03D8          add ebx,eax
0095026C|.8BD3          mov edx,ebx
0095026E|.83C2 07       add edx,0x7
00950271|.B9 03000000   mov ecx,0x3
00950276|.8B45 F0       mov eax,
00950279|.E8 6651ABFF   call Efficien.004053E4                   ;取注册码第17、18、20位=A组
0095027E|.8B45 E8       mov eax,
00950281|.50            push eax
00950282|.8D45 E4       lea eax,
00950285|.50            push eax
00950286|.8B47 08       mov eax,dword ptr ds:
00950289|.E8 F64EABFF   call Efficien.00405184
0095028E|.8BD8          mov ebx,eax
00950290|.8B47 0C       mov eax,dword ptr ds:
00950293|.E8 EC4EABFF   call Efficien.00405184
00950298|.03D8          add ebx,eax
0095029A|.8BD3          mov edx,ebx
0095029C|.42            inc edx
0095029D|.B9 06000000   mov ecx,0x6
009502A2|.8B45 F0       mov eax,
009502A5|.E8 3A51ABFF   call Efficien.004053E4                   ;取注册码第7、9、10、12、13、15位=B组
009502AA|.8B55 E4       mov edx,
009502AD|.8D45 F8       lea eax,
009502B0|.59            pop ecx
009502B1|.E8 1A4FABFF   call Efficien.004051D0                   ;A、B组组合
009502B6|.8D45 E0       lea eax,
009502B9|.50            push eax
009502BA|.8B47 08       mov eax,dword ptr ds:
009502BD|.E8 C24EABFF   call Efficien.00405184
009502C2|.8BD8          mov ebx,eax
009502C4|.8B47 0C       mov eax,dword ptr ds:
009502C7|.E8 B84EABFF   call Efficien.00405184
009502CC|.8D0440      lea eax,dword ptr ds:
009502CF|.03D8          add ebx,eax
009502D1|.8BD3          mov edx,ebx
009502D3|.83C2 0D       add edx,0xD
009502D6|.B9 06000000   mov ecx,0x6
009502DB|.8B45 F0       mov eax,
009502DE|.E8 0151ABFF   call Efficien.004053E4                   ;取注册码第28、29、30、32、33、34位=C组
009502E3|.8B45 E0       mov eax,
009502E6|.50            push eax
009502E7|.8D45 DC       lea eax,
009502EA|.50            push eax
009502EB|.8B47 08       mov eax,dword ptr ds:
009502EE|.E8 914EABFF   call Efficien.00405184
009502F3|.8BD8          mov ebx,eax
009502F5|.8B47 0C       mov eax,dword ptr ds:
009502F8|.E8 874EABFF   call Efficien.00405184
009502FD|.03C0          add eax,eax
009502FF|.03D8          add ebx,eax
00950301|.8BD3          mov edx,ebx
00950303|.83C2 0A       add edx,0xA
00950306|.B9 03000000   mov ecx,0x3
0095030B|.8B45 F0       mov eax,
0095030E|.E8 D150ABFF   call Efficien.004053E4                   ;取注册码第22、24、25位=D组
00950313|.8B55 DC       mov edx,
00950316|.8D45 F4       lea eax,
00950319|.59            pop ecx
0095031A|.E8 B14EABFF   call Efficien.004051D0                   ;C、D组组合
0095031F|.8D4D F4       lea ecx,

小结:

1. 取注册码第17、18、20位=A组
2. 取注册码第7、9、10、12、13、15位=B组
3. A、B组合(B在前A在后)
4. 取注册码第28、29、30、32、33、34位=C组
5. 取注册码第22、24、25位=D组
6. C和D组合(D在前C在后)

//接下来
00950322|.8D55 F8       lea edx,
00950325|.8BC7          mov eax,edi
00950327|.E8 64010000   call Efficien.00950490                   ;两组数据移位运算
0095032C|.8D45 D0       lea eax,
0095032F|.50            push eax
00950330|.8B4F 04       mov ecx,dword ptr ds:
00950333|.8B55 F8       mov edx,
00950336|.A1 78F79400   mov eax,dword ptr ds:
0095033B|.E8 28FCFFFF   call Efficien.0094FF68                   ;加密运算1
00950340|.8B55 D0       mov edx,
00950343|.8D4D D4       lea ecx,
00950346|.A1 847C8800   mov eax,dword ptr ds:
0095034B|.E8 6CA2F3FF   call Efficien.0088A5BC                   ;加密运算2
00950350|.8B55 D4       mov edx,
00950353|.8D4D D8       lea ecx,
00950356|.8BC7          mov eax,edi
00950358|.E8 DBFDFFFF   call Efficien.00950138                   ;取加密2的奇数位
0095035D|.8B45 D8       mov eax,
00950360|.8B55 F4       mov edx,
00950363|.E8 F8C8ABFF   call Efficien.0040CC60                   ;比较...相等就注册成功


//移位运算入口
00950490/$55            push ebp
00950491|.8BEC          mov ebp,esp
00950493|.51            push ecx
00950494|.B9 09000000   mov ecx,0x9
00950499|>6A 00         /push 0x0
0095049B|.6A 00         |push 0x0
0095049D|.49            |dec ecx
0095049E|.^ 75 F9         \jnz short Efficien.00950499
009504A0|.51            push ecx
009504A1|.874D FC       xchg ,ecx
009504A4|.53            push ebx
009504A5|.56            push esi

按以下方式两组数据交替移位

009504D0|.B9 01000000   mov ecx,0x1
009504D5|.BA 01000000   mov edx,0x1

009504E9|.B9 01000000   mov ecx,0x1
009504EE|.BA 08000000   mov edx,0x8

00950502|.B9 01000000   mov ecx,0x1
00950507|.BA 04000000   mov edx,0x4

0095051B|.B9 01000000   mov ecx,0x1
00950520|.BA 07000000   mov edx,0x7

00950534|.B9 01000000   mov ecx,0x1
00950539|.BA 05000000   mov edx,0x5

0095054D|.B9 01000000   mov ecx,0x1
00950552|.BA 09000000   mov edx,0x9

00950566|.B9 01000000   mov ecx,0x1
0095056B|.BA 02000000   mov edx,0x2

0095057F|.B9 01000000   mov ecx,0x1
00950584|.BA 03000000   mov edx,0x3

00950598|.B9 01000000   mov ecx,0x1
0095059D|.BA 06000000   mov edx,0x6

---------------------------------------

009505BD|.B9 01000000   mov ecx,0x1
009505C2|.BA 07000000   mov edx,0x7

009505D6|.B9 01000000   mov ecx,0x1
009505DB|.BA 08000000   mov edx,0x8

009505EF|.B9 01000000   mov ecx,0x1
009505F4|.BA 06000000   mov edx,0x6

00950608|.B9 01000000   mov ecx,0x1
0095060D|.BA 02000000   mov edx,0x2

00950621|.B9 01000000   mov ecx,0x1
00950626|.BA 04000000   mov edx,0x4

0095063A|.B9 01000000   mov ecx,0x1
0095063F|.BA 03000000   mov edx,0x3

00950653|.B9 01000000   mov ecx,0x1
00950658|.BA 01000000   mov edx,0x1

0095066C|.B9 01000000   mov ecx,0x1
00950671|.BA 05000000   mov edx,0x5

00950685|.B9 01000000   mov ecx,0x1
0095068A|.BA 09000000   mov edx,0x9


移位小结:

假设A组=578123567,B组=023568124

先B组:
A-->B,B-->B,B-->B,A-->B,A-->B,A-->B,B-->B,A-->B,B-->B

再A组:

B-->A,A-->A,A-->A,A-->A,A-->A,B-->A,B-->A,B-->A,B-->A

移位结果:
A组=163713064,B组=525527288


//加密运算1入口
0094FBC8/$55            push ebp
0094FBC9|.8BEC          mov ebp,esp
0094FBCB|.83C4 F0       add esp,-0x10
0094FBCE|.53            push ebx
0094FBCF|.56            push esi

加密运算1是以加密移位后的B组数据为依据

0094FC64|> /8BC3          /mov eax,ebx
0094FC66|. |25 01000080   |and eax,0x80000001
0094FC6B|. |79 05         |jns short Efficien.0094FC72
0094FC6D|. |48            |dec eax
0094FC6E|. |83C8 FE       |or eax,-0x2
0094FC71|. |40            |inc eax
0094FC72|> |85C0          |test eax,eax
0094FC74|. |75 2D         |jnz short Efficien.0094FCA3
0094FC76|. |8BC6          |mov eax,esi
0094FC78|. |E8 5F57ABFF   |call Efficien.004053DC
0094FC7D|. |8D4418 FF   |lea eax,dword ptr ds:
0094FC81|. |50            |push eax
0094FC82|. |8B06          |mov eax,dword ptr ds:
0094FC84|. |0FB64418 FF   |movzx eax,byte ptr ds:   ;偶数位依次放入Eax,参与运算
0094FC89|. |33D2          |xor edx,edx
0094FC8B|. |8A55 F7       |mov dl,byte ptr ss:            ;DL=2
0094FC8E|. |03C2          |add eax,edx
0094FC90|. |83E8 20       |sub eax,0x20
0094FC93|. |B9 5F000000   |mov ecx,0x5F
0094FC98|. |99            |cdq
0094FC99|. |F7F9          |idiv ecx
0094FC9B|. |83C2 20       |add edx,0x20                            ;((Eax-18) Mod 5F)+20
0094FC9E|. |58            |pop eax
0094FC9F|. |8810          |mov byte ptr ds:,dl
0094FCA1|. |EB 2B         |jmp short Efficien.0094FCCE
0094FCA3|> |8BC6          |mov eax,esi
0094FCA5|. |E8 3257ABFF   |call Efficien.004053DC
0094FCAA|. |8D4418 FF   |lea eax,dword ptr ds:
0094FCAE|. |50            |push eax
0094FCAF|. |8B06          |mov eax,dword ptr ds:
0094FCB1|. |0FB64418 FF   |movzx eax,byte ptr ds:   ;奇数位依次放入Eax,参与运算
0094FCB6|. |33D2          |xor edx,edx
0094FCB8|. |8A55 F6       |mov dl,byte ptr ss:            ;DL=4
0094FCBB|. |03C2          |add eax,edx
0094FCBD|. |83E8 20       |sub eax,0x20
0094FCC0|. |B9 5F000000   |mov ecx,0x5F
0094FCC5|. |99            |cdq
0094FCC6|. |F7F9          |idiv ecx
0094FCC8|. |83C2 20       |add edx,0x20
0094FCCB|. |58            |pop eax
0094FCCC|. |8810          |mov byte ptr ds:,dl                ;((Eax-16) Mod 5F)+20
0094FCCE|> |43            |inc ebx
0094FCCF|. |4F            |dec edi
0094FCD0|.^\75 92         \jnz short Efficien.0094FC64

运算结果:
525527288 --> 9497696:<

//把得到的数据反转
0094FCDE|> /8B06          /mov eax,dword ptr ds:
0094FCE0|. |8A4418 FF   |mov al,byte ptr ds:
0094FCE4|. |8845 F5       |mov byte ptr ss:,al
0094FCE7|. |8BC6          |mov eax,esi
0094FCE9|. |E8 EE56ABFF   |call Efficien.004053DC
0094FCEE|. |8B55 FC       |mov edx,
0094FCF1|. |42            |inc edx
0094FCF2|. |2BD3          |sub edx,ebx
0094FCF4|. |8B0E          |mov ecx,dword ptr ds:
0094FCF6|. |8A5411 FF   |mov dl,byte ptr ds:
0094FCFA|. |885418 FF   |mov byte ptr ds:,dl
0094FCFE|. |8BC6          |mov eax,esi
0094FD00|. |E8 D756ABFF   |call Efficien.004053DC
0094FD05|. |8B55 FC       |mov edx,
0094FD08|. |42            |inc edx
0094FD09|. |2BD3          |sub edx,ebx
0094FD0B|. |8A4D F5       |mov cl,byte ptr ss:
0094FD0E|. |884C10 FF   |mov byte ptr ds:,cl
0094FD12|. |43            |inc ebx
0094FD13|. |4F            |dec edi
0094FD14|.^\75 C8         \jnz short Efficien.0094FCDE

运算结果:
9497696:< --> <:6967949

//以三个单位为一个小组,进行前移一位运算

0094FD1D|> /8B06          /mov eax,dword ptr ds:
0094FD1F|. |8A4418 FF   |mov al,byte ptr ds:
0094FD23|. |8845 F5       |mov byte ptr ss:,al
0094FD26|. |8BC6          |mov eax,esi
0094FD28|. |E8 AF56ABFF   |call Efficien.004053DC
0094FD2D|. |8B16          |mov edx,dword ptr ds:
0094FD2F|. |8A141A      |mov dl,byte ptr ds:
0094FD32|. |885418 FF   |mov byte ptr ds:,dl
0094FD36|. |8BC6          |mov eax,esi
0094FD38|. |E8 9F56ABFF   |call Efficien.004053DC
0094FD3D|. |8B16          |mov edx,dword ptr ds:
0094FD3F|. |8A541A 01   |mov dl,byte ptr ds:
0094FD43|. |881418      |mov byte ptr ds:,dl
0094FD46|. |8BC6          |mov eax,esi
0094FD48|. |E8 8F56ABFF   |call Efficien.004053DC
0094FD4D|. |8A55 F5       |mov dl,byte ptr ss:
0094FD50|. |885418 01   |mov byte ptr ds:,dl
0094FD54|. |83C3 03       |add ebx,0x3
0094FD57|> |8B45 FC      mov eax,
0094FD5A|. |83E8 02       |sub eax,0x2
0094FD5D|. |3BD8          |cmp ebx,eax
0094FD5F|.^\7E BC         \jle short Efficien.0094FD1D

运算结果:
<:6967949 --> :6<679499

//加密算法2入口
0088A5BC/$53            push ebx
0088A5BD|.56            push esi
0088A5BE|.57            push edi
0088A5BF|.55            push ebp
0088A5C0|.83C4 F8       add esp,-0x8
0088A5C3|.8BE9          mov ebp,ecx

加密运算2是以加密运算1的结果为依据的运算

//加密算法2
0088A5F0|> /8B0424      /mov eax,dword ptr ss:
0088A5F3|. |8B5424 04   |mov edx,dword ptr ss:
0088A5F7|. |0FB67410 FF   |movzx esi,byte ptr ds:   ;字符串ASC码依次放入Eax
0088A5FC|. |8BC6          |mov eax,esi
0088A5FE|. |83E0 0F       |and eax,0xF                           ;Eax=Eax and F
0088A601|. |E8 A6FFFFFF   |call Efficien.0088A5AC                  ;若Eax的值大于≥A,则Eax+37.否则Eax+30
0088A606|. |50            |push eax
0088A607|. |8BC5          |mov eax,ebp
0088A609|. |E8 CEADB7FF   |call Efficien.004053DC
0088A60E|. |5A            |pop edx
0088A60F|. |885418 FF   |mov byte ptr ds:,dl
0088A613|. |43            |inc ebx
0088A614|. |8BC6          |mov eax,esi
0088A616|. |C1E8 04       |shr eax,0x4                           ;将Eax的值右移4位
0088A621|.E8 B6ADB7FF   |call Efficien.004053DC                  ;若Eax的值大于≥A,则Eax+37.否则Eax+30
0088A61E|. |50            |push eax
0088A61F|. |8BC5          |mov eax,ebp
0088A621|. |E8 B6ADB7FF   |call Efficien.004053DC
0088A626|. |5A            |pop edx
0088A627|. |885418 FF   |mov byte ptr ds:,dl
0088A62B|. |43            |inc ebx
0088A62C|. |FF4424 04   |inc dword ptr ss:
0088A630|. |4F            |dec edi
0088A631|.^\75 BD         \jnz short Efficien.0088A5F0

运算结果:
A363C3637393439393

//取加密运算2结果的奇数位为最后结果
00950358|.E8 DBFDFFFF   call Efficien.00950138

得到结果:
A6C679499


将得到的结果和A组数据进行比较,若相同则注册成功

0095035D|.8B45 D8       mov   eax, dword ptr
00950360|.8B55 F4       mov   edx, dword ptr

通过A组数据我们可以分析出A组数据每一位对应的是注册码的第几位,按顺序改成最终结果即可:

修改位数顺序 17、33、30、24、28、10、7、13、20修改注册码

结果:
A6C679499
A组数据:
163713064

可用注册码:
EP200-A12B4457695828416939095A4769890
------------------------------------------------------------------------
【破解总结】

如有错误请大牛指出
------------------------------------------------------------------------
转载请说明出处

GGLHY 发表于 2011-7-8 15:00:51

本帖最后由 GGLHY 于 2011-7-8 15:36 编辑

前排学习!
我猜楼下是老月?/:017

月之精灵 发表于 2011-7-8 15:36:33

我也来学习下哈,

blackk 发表于 2011-7-8 22:33:35

回复 2# GGLHY


    果然被你猜中了/:good

wxq 发表于 2011-7-9 08:49:25

注册成功,算法貌似复杂还不如来个数据签名就无法知道算法了

yunfeng 发表于 2011-7-9 10:32:37

分析得很详细,学习了。

kantal 发表于 2011-7-9 12:49:09

分析得很详细,学习了~~~~

wkxq 发表于 2011-7-11 22:35:39

楼上的所有都 是高手哟,大牛一个接一个

1974eagle 发表于 2011-7-14 10:08:34

注册码确实能用。
已经测试

zaas 发表于 2011-7-15 20:03:17

佩服blakk的毅力。。。原来也跟过,跟了一半嫌烦,放弃了。。。。
页: [1] 2
查看完整版本: 高效e人 Ver2.98(Build 243) 算法分析