今天在收集资料中无意发现一段算法代码,虽然很简单,但十分经典,适合学习进阶用,大家一起来分析一下吧,看完了你会有很大的收获的
有效注册码为 01234567881=5009990001
代码如下:
0047C43A |. 8B8C24 2C01>mov ecx,dword ptr ss:[esp+12C] ; 把01234567881=5009990001 (注册码)放到ecx里
0047C441 |. B3 0C mov bl,0C
0047C443 |. BA 09000000 mov edx,9 //这里别去多想,注册码我省略了部分,因为是双重验证,这里只给了一重验证!
0047C448 |. 8A41 04 mov al,byte ptr ds:[ecx+4] ; 依次读入0123456788
0047C44B |. 04 05 add al,5
0047C44D |> 02040A /add al,byte ptr ds:[edx+ecx]
0047C450 |. 42 |inc edx
0047C451 |. 83FA 13 |cmp edx,13
0047C454 |.^ 7C F7 \jl short Jensoft.0047C44D
0047C456 |. BA 15000000 mov edx,15
0047C45B |> 02040A /add al,byte ptr ds:[edx+ecx] ; 依次读入5009990001
0047C45E |. 42 |inc edx
0047C45F |. 83FA 1F |cmp edx,1F
0047C462 |.^ 7C F7 \jl short Jensoft.0047C45B
0047C464 |. 884424 10 mov byte ptr ss:[esp+10],al
0047C468 |. B8 09000000 mov eax,9
0047C46D |> 8A1408 /mov dl,byte ptr ds:[eax+ecx] ; 依次取0123456788 的16进制值
0047C470 |. 2ADA |sub bl,dl ; b1=b1-dl
0047C472 |. 40 |inc eax
0047C473 |. 83F8 13 |cmp eax,13
0047C476 |.^ 7C F5 \jl short Jensoft.0047C46D //没读完继续读,读完了就向下
0047C478 |. B8 15000000 mov eax,15
0047C47D |> 8A1408 /mov dl,byte ptr ds:[eax+ecx] ; 依次取5009990001的16进制值
0047C480 |. 2ADA |sub bl,dl
0047C482 |. 40 |inc eax
0047C483 |. 83F8 1F |cmp eax,1F
0047C486 |.^ 7C F5 \jl short Jensoft.0047C47D //没读完继续读,读完了就向下
下面是关键运算部分:
0047C488 |. 8B5424 10 mov edx,dword ptr ss:[esp+10]
0047C48C |. 889C24 2401>mov byte ptr ss:[esp+124],bl
0047C493 |. 8B8424 2401>mov eax,dword ptr ss:[esp+124]
0047C49A |. 81E2 FF0000>and edx,0FF
0047C4A0 |. 25 FF000000 and eax,0FF
0047C4A5 |. BE D7000000 mov esi,0D7
0047C4AA |. 0FAFC2 imul eax,edx
0047C4AD |. 99 cdq
0047C4AE |. F7FE idiv esi
0047C4B0 |. 0FBE71 05 movsx esi,byte ptr ds:[ecx+5]
0047C4B4 |. 885424 10 mov byte ptr ss:[esp+10],dl
0047C4B8 |. 889424 2401>mov byte ptr ss:[esp+124],dl
0047C4BF |. 8B4424 10 mov eax,dword ptr ss:[esp+10]
0047C4C3 |. 33D2 xor edx,edx
0047C4C5 |. 25 FF000000 and eax,0FF
0047C4CA |. 8BE8 mov ebp,eax
0047C4CC |. 8A5404 14 mov dl,byte ptr ss:[esp+eax+14]
0047C4D0 |. 3BF2 cmp esi,edx ; 对比 esi和edx
0047C4D2 |. 74 0E je short Jensoft.0047C4E2 ; 相等就是正确的注册码,否则就是错误跳向OVER
-----------------请大家一起分析,并给出算法,他是怎么让esi 和 edx 相等的~~
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)