TA的每日心情 | 开心 2017-10-25 13:07 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
发表于 2011-5-2 20:42:06
|
显示全部楼层
我研究了下 就是你输入的用户名的十六进制算出来的密文后为必须为双数
比如 我输入用户名:a z r e a l
53 59 62 56 53 3A
S Y b V S :
就拿 (r)来说明
r = b(经过算法计算得到的) = 62
这个call 00401201 |. E8 FAFEFFFF call 00401100 是用户名计算出来的密和输入注册码计算出来密文作比较判断
好我们来看这个注册码计算关键代码:
004011D8 |> /8A5404 30 /mov dl, byte ptr [esp+eax+30] 取假码
004011DC |. |0FBECA |movsx ecx, dl
004011DF |. |81E1 0F000080 |and ecx, 8000000F 取注册码十六进制与8000000F与 为X1 比如 我输入 字符串 a = 61(十六进制) 与 8000000F 进行与运算 所以 ecx=1
004011E5 |. |79 05 |jns short 004011EC
004011E7 |. |49 |dec ecx
004011E8 |. |83C9 F0 |or ecx, FFFFFFF0
004011EB |. |41 |inc ecx
004011EC |> |02CA |add cl, dl 在就把注册码的十六进制 + X1 dl= a =61 + X1 = 62(b) 关键就是这里
004011EE |. |884C04 30 |mov byte ptr [esp+eax+30], cl
004011F2 |. |40 |inc eax
004011F3 |. |3BC6 |cmp eax, esi
004011F5 |.^\7C E1 \jl short 00401
这样看就明白多了 , 如果还不明白的就多调试几次 就明白了
就是 输入用户名 (r) = 通过用户名计算出来的密文(b(62)) = 输入的注册码(a(61)) = 成功
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
x
|