首页
社区
课程
招聘
程序如何判断序列号对错
发表于: 2011-5-9 16:16 3597

程序如何判断序列号对错

2011-5-9 16:16
3597
小弟对破解很感兴趣,前几天亲手找了个软件按自己看到的知识去破解,暴破是暴破了(破解低级阶段),但我想看看软件注册的算发,但在追踪的过程中,遇到不懂的地方。
(这个论坛都说不要在这里公开国内软件,我找的偏偏是国内的,所以不方面公开说软件名称)
我想朋友们帮我看看判断序列号对错的这段代码:
1.        用OD载入软件,下断后,运行,输入假的:
产品序号:111111111111122
注册码: eyu
2. 断在下面这里:
004960F8  |.  8B45 E0       mov     eax, dword ptr [ebp-20]
004960FB  |.  E8 38DEFFFF   call    00493F38   (跟进去,看看)
00496100  |.  84C0          test    al, al
00496102      74 29         je      short 0049612D
00496104  |.  8D55 D4       lea     edx, dword ptr [ebp-2C]
00496107  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0049610A  |.  8B80 00030000 mov     eax, dword ptr [eax+300]
00496110  |.  E8 5397FAFF   call    0043F868
00496115  |.  8B45 D4       mov     eax, dword ptr [ebp-2C]
00496118  |.  8D55 D8       lea     edx, dword ptr [ebp-28]
0049611B  |.  E8 C424F7FF   call    004085E4
00496120  |.  8B45 D8       mov     eax, dword ptr [ebp-28]
00496123  |.  E8 38E3F6FF   call    00404460
00496128  |.  83F8 0F       cmp     eax, 0F
0049612B      74 0F         je      short 0049613C
0049612D  |>  B8 0C684900   mov     eax, 0049680C          ;  产品序号输入错误!
00496132  |.  E8 51ADF9FF   call    00430E88
00496137  |.  E9 83050000   jmp     004966BF

1.        “产品序号输入错误”提示是从00496102跳过来的,所以决定跟进去004960FB的call  
4.下面是跟进后的代码,有些看不懂想请教各位朋友。
00493F38  /$  55            push    ebp
00493F39  |.  8BEC          mov     ebp, esp
00493F3B  |.  33C9          xor     ecx, ecx
00493F3D  |.  51            push    ecx
00493F3E  |.  51            push    ecx
00493F3F  |.  51            push    ecx
00493F40  |.  51            push    ecx
00493F41  |.  51            push    ecx
00493F42  |.  8945 FC       mov     dword ptr [ebp-4], eax
00493F45  |.  33C0          xor     eax, eax
00493F47  |.  55            push    ebp
00493F48  |.  68 CA3F4900   push    00493FCA
00493F4D  |.  64:FF30       push    dword ptr fs:[eax]
00493F50  |.  64:8920       mov     dword ptr fs:[eax], esp
00493F53  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
00493F56  |.  50            push    eax
00493F57  |.  8B45 FC       mov     eax, dword ptr [ebp-4]   (把序列号放进eax)
00493F5A  |.  E8 0105F7FF   call    00404460      (通过此call算出序列号的位数)       
00493F5F  |.  8BC8          mov     ecx, eax
00493F61  |.  83E9 02       sub     ecx, 2   (下面的计算需要去掉序列号最后两位)
00493F64  |.  BA 01000000   mov     edx, 1
00493F69  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
2.        00493F6C  |.  E8 4F07F7FF   call     004046C0     (通过此call序列号去掉序列号最后两位,如我输入的111111111111122到了这里就是1111111111111)
00493F71  |.  8D45 F0       lea     eax, dword ptr [ebp-10]
00493F74  |.  50            push    eax
00493F75  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
00493F78  |.  E8 E304F7FF   call    00404460
00493F7D  |.  8BD0          mov     edx, eax
00493F7F  |.  4A            dec     edx
00493F80  |.  B9 02000000   mov     ecx, 2
00493F85  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
00493F88  |.  E8 3307F7FF   call    004046C0         (此call是取系列号的最后两位)
00493F8D  |.  8D55 EC       lea     edx, dword ptr [ebp-14]
00493F90  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
00493F93  |.  E8 80FEFFFF   call    00493E18   
00493F98  |.  8B45 F0       mov     eax, dword ptr [ebp-10]   
00493F9B  |.  8B55 EC       mov     edx, dword ptr [ebp-14]  
(到了这里时候,EAX是22,ECX是1,EDX是25,我弄不明白这个25是怎样得来的?)
00493F9E  |.  E8 0906F7FF   call    004045AC  
00493FA3  |.  75 06         jnz     short 00493FAB
00493FA5  |.  C645 FB 01    mov     byte ptr [ebp-5], 1
00493FA9  |.  EB 04         jmp     short 00493FAF
00493FAB  |>  C645 FB 00    mov     byte ptr [ebp-5], 0
00493FAF  |>  33C0          xor     eax, eax
00493FB1  |.  5A            pop     edx
00493FB2  |.  59            pop     ecx
00493FB3  |.  59            pop     ecx

小弟现在只能破解皮毛,所以恳请教朋友们指点:
问题1:
00496100  |.  84C0          test    al, al
00496102      74 29         je      short 0049612D
上面反汇编中,  test    al, al      这里的al是指哪个寄存器?
问题2:
上面判断序列号的对错中,我弄不明白这个25是怎样得来的?
问题3:
这断代码只是判断系列号是否正确,好象只使用系列号后面两位与去掉最后两位的前面部分,这到底什么意思?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
晕,没有人回复,请问版主:是这样的问题不该问,还是没人愿意回答呢?
2011-5-11 09:40
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
题1:
00496100  |.  84C0          test    al, al
00496102      74 29         je      short 0049612D
上面反汇编中,  test    al, al      这里的al是指哪个寄存器?
问题2:
上面判断序列号的对错中,我弄不明白这个25是怎样得来的?
问题3:
这断代码只是判断系列号是否正确,好象只使用系列号后面两位与去掉最后两位的前面部分,这到底什么意思?

题一:al是eax寄存器的低8位
题二:关于这个25你要去跟踪[ebp-14]里值的变化,你就会明白25如何来的了。
题三:你要跟进去看啊,要不把软件下载共享吧,呵呵
2011-5-11 11:03
0
雪    币: 63
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
1.AL是EAX寄存器的低8位

2.
00493F8D  |.  8D55 EC       lea     edx, dword ptr [ebp-14]
//这里将EBP-14地址送到EDX
00493F90  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
00493F93  |.  E8 80FEFFFF   call    00493E18   
00493F98  |.  8B45 F0       mov     eax, dword ptr [ebp-10]   
00493F9B  |.  8B55 EC       mov     edx, dword ptr [ebp-14]  
//这里看他的值变成25了

3.加上后面两位,如果不影响你破解的结果的话,只有作者知道其作用,当然你可以在软件中看下其它的地方有没有用到。可能会有以下几个作用
1)限制软件功能,根据其中的编码不同,对软件功能进行限制,如不同的版本(试用版,旗舰版。。。)
2)将序列号填充以凑整数位序列号,没有具体作用
2011-5-11 13:00
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢两位的指点,我再去研究研究。
2011-5-11 16:03
0
游客
登录 | 注册 方可回帖
返回
//