黑基网 首页 学院 电脑技术 查看内容

一个软件破解的简单分析

2006-2-20 00:46| 投稿: computer

摘要: 【软件名称】computer Alarm Clock【应用平台】Win9x/NT/2000/XP【软件大小】660KB(package)【软件限制】功能限制【破解声明】破解只是感兴趣,无其它目的。失误...
【软件名称】computer Alarm Clock【应用平台】Win9x/NT/2000/XP【软件大小】660KB(package)【软件限制】功能限制【破解声明】破解只是感兴趣,无其它目的。失误之处敬请诸位大侠赐教!【破解工具】fi.exe ollydbg.exe【软件简介】Computer Alarm Clock is a desktop program with full-featured alarm system, that allow an user to set multiple alarms. Each alarm can be set to play MP3 songs, CDtracks, videos and MPEG movies or just display a message. Computer Alarm Clock can be vastly customized and the whole package size is 660 Kb only! ========================================================================================【分析过程】用户名:ligyuan试验码:123456789这个软件不知道是什么时候下的,今天有时间就安装后看了下,软件无壳,未注册,每次启动都要弹出注册窗口,软件注册后要重启后进行验证,估计是读注册表或文件,bp RegQueryValue ,CreateFileA 下断点,读取文件时被拦下,F2取消断点,ALT+F9返回,初跟10几步后发现没有什么重要的地方,继续下CreateFileA断点,F9,再次被断下,F2取消断点,ALT+F9返回,一路F8来到这里:00490D9C  |.  85C0          test eax,eax                 ;用户名长度00490D9E  |.  7E 19         jle short cac.00490DB9       00490DA0  |.  BA 01000000   mov edx,1                    ;下面是计算用户名字符的ASCII的和00490DA5  |>  8B4D F8       /mov ecx,dword ptr ss:[ebp-8]00490DA8  |.  8A4C11 FF     |mov cl,byte ptr ds:[ecx+edx-1]00490DAC  |.  81E1 FF000000 |and ecx,0FF00490DB2  |.  014D DC       |add dword ptr ss:[ebp-24],ecx00490DB5  |.  42            |inc edx00490DB6  |.  48            |dec eax00490DB7  |.^ 75 EC         \jnz short cac.00490DA500490DB9  |>  8D55 F8       lea edx,dword ptr ss:[ebp-8]00490DBC  |.  8B45 DC       mov eax,dword ptr ss:[ebp-24]00490DBF  |.  E8 647FF7FF   call cac.00408D28             ;把和转换为10进制值00490DC4  |.  8D4D EC       lea ecx,dword ptr ss:[ebp-14]00490DC7  |.  BA 01000000   mov edx,100490DCC  |.  8B45 F8       mov eax,dword ptr ss:[ebp-8]00490DCF  |.  E8 30A1FAFF   call cac.0043AF04             ;把10进制值的最低位的值放入存储空间(r1)00490DD4  |.  8D4D E8       lea ecx,dword ptr ss:[ebp-18]00490DD7  |.  BA 01000000   mov edx,100490DDC  |.  8B45 F8       mov eax,dword ptr ss:[ebp-8]00490DDF  |.  E8 04A1FAFF   call cac.0043AEE8             ;把10进制的最高位值放入存储单元(r2)00490DE4  |.  8D8D 04FEFFFF lea ecx,dword ptr ss:[ebp-1FC]00490DEA  |.  BA 04000000   mov edx,400490DEF  |.  8B45 F4       mov eax,dword ptr ss:[ebp-C]00490DF2  |.  E8 F1A0FAFF   call cac.0043AEE8             ;取注册码的前4位00490DF7  |.  8B85 04FEFFFF mov eax,dword ptr ss:[ebp-1FC]00490DFD  |.  8D4D E4       lea ecx,dword ptr ss:[ebp-1C]00490E00  |.  BA 01000000   mov edx,100490E05  |.  E8 FAA0FAFF   call cac.0043AF04             ;把前4位的最低位值放入存储单元(c1)00490E0A  |.  8D8D 00FEFFFF lea ecx,dword ptr ss:[ebp-200]00490E10  |.  BA 08000000   mov edx,800490E00490E15  |.  8B45 F4       mov eax,dword ptr ss:[ebp-C]00490E18  |.  E8 CBA0FAFF   call cac.0043AEE8             ;取注册码的前8位00490E1D  |.  8B85 00FEFFFF mov eax,dword ptr ss:[ebp-200]00490E23  |.  8D4D E0       lea ecx,dword ptr ss:[ebp-20]00490E26  |.  BA 01000000   mov edx,100490E2B  |.  E8 D4A0FAFF   call cac.0043AF04            ;把注册码的前8位最后一位放入存储单元(c2)00490E30  |.  C683 900B0000>mov byte ptr ds:[ebx+B90],000490E37  |.  8B45 EC       mov eax,dword ptr ss:[ebp-14]00490E3A  |.  8B55 E4       mov edx,dword ptr ss:[ebp-1C]00490E3D  |.  E8 AE3DF7FF   call cac.00404BF0            ;r1与c1比较00490E42      75 23         jnz short cac.00490E67       ;不等,就跳00490E44  |.  8B45 E8       mov eax,dword ptr ss:[ebp-18]00490E47  |.  8B55 E0       mov edx,dword ptr ss:[ebp-20]00490E4A  |.  E8 A13DF7FF   call cac.00404BF0            ;r2与c2比较00490E4F      75 16         jnz short cac.00490E67       ;不等就跳 00490E51  |.  8B45 F0       mov eax,dword ptr ss:[ebp-10]00490E54  |.  BA F40E4900   mov edx,cac.00490EF4         ;  ASCII "a1"00490E59  |.  E8 923DF7FF   call cac.00404BF0            ;注册码前两位与“a1”比较00490E5E  |.  75 07         jnz short cac.00490E67       ;不等就跳00490E60  |.  C683 900B0000>mov byte ptr ds:[ebx+B90],100490E67  |>  80BB 900B0000>cmp byte ptr ds:[ebx+B90],000490E6E  |.  75 18         jnz short cac.00490E88       ;注册正确,跳向成功  00490E70  |.  80BB 9C0B0000>cmp byte ptr ds:[ebx+B9C],000490E77      74 0F         je short cac.00490E88  ========================================================================================【分析总结】        这个软件我不知道作者是怎么想的  ,00490E70 这个比较我不知道是用来干什么的,不过对于我们来说又多了一个 暴破的地方。我们可以直接把 00490E6E 和 00490E77的条件跳转改为无条件跳转,就可以对软件进行完整暴破。该软件虽然采取了重启验证的方法,注册信息放在同目录下的clapeoq.lst文件中但是验证部分却过于简单,只要找到了地方,很快就能把它的算法注册机作出来,下面是一个简单的注册程序程序,写的不好,不要见笑。#include #include #include #include void Getchar(int i);void main(){        time_t tt;        char name[100];        long name_str_sum=0;        printf("Input your name:";        gets(name);        for(int i=0;i<(int) strlen(name);i++)                name_str_sum+=name[i];        printf("your Id is:a1";        Getchar(1);        printf("%d",name_str_sum%10);        Getchar(3);        do{                name_str_sum/=10;        }while(name_str_sum>=10);        printf("%d",name_str_sum);        srand((unsigned) time(&tt));        Getchar(rand()%10);  printf("/n";}void Getchar(int i){        char str[10];        int transf=0;        time_t t;        for(int count=0;count                srand((unsigned) time(&t)*rand());                transf=rand()%94;                str[count]=transf+33;                time_t t;        }        str[i]='\0';        printf("%s",str);}Input your name:ligyuanyour Id is:a1/1ppe7fG?0正确注册这个程序有几处不完善的地方,就是没有考虑它小于8位的注册码,实现不难,但是要花额外的代码,人太懒,不好意思。就连它的分析都没有F7进去,哈哈,简单分析吗,就简单的分析喽。很会找理由吧。。。。。。。。
小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论


新出炉

返回顶部