首页
社区
课程
招聘
[原创]新手练习破解
发表于: 2011-2-6 21:05 4855

[原创]新手练习破解

2011-2-6 21:05
4855

最近结束了编程方面什么都想试一下的习惯,开始静下心来研究底层了,听从计算机专业一位老师的建议看看破解、调试有好处,于是猛看了几天破解,拿了一个练习题试了一下,熬了两天,基本也算完成了。。这个题可能很多人做过,但是我破解的时候完全不知道这道题,也算原创吧?呵呵
       
        一、程序截图

       
        输入用户名和密码没有反应
        二、用PEID查看,没有加壳,现在我还只会用工具脱壳
       
        三、放进OD
        选择命令--查找--当前模块中的名称,如图
        
        
在GetDlgItemTextA上设下断点,设置了三个断点,按下F9让程序跑起来,输入futosky  123321,按下OK之后,断在下面这个地方

可以看到最后调用了MessageBoxA,往上找有几句
               CALL r0YALaCC.00401141
               CMP EAX,1
可见调用这里得进行比较并存入EAX最后结果,跟1比较,如果为1,则认证失败,如果用爆破,只需要将JNZ处改为NOP即可,如果要写注册机,看来得分析调用的函数了。
        在CALL r0YALaCC.00401141按F2设下断点,取消其余几个断点,按F7跟进比较函数。如图:


        后面就是一串痛苦的分析:
时间比较久了,放假前分析的,要是一步步再分析写下去,就得长篇大论了。
偷个懒不知道行不行:
当时记录的得到的结论:
1、将用户名进行运算得到结果A,再对A进行运算,得到注册码

2、序列号格式:*****-RAC

3、*****进行运算与用户名运算结果比较,*必须是A-Z的字母

4、用户名长度大于等于5且小于等于20

一开始还想,没学过算法啊,怎么办,后来发现只要将用户名运算结果倒着算回来就可以了,不必先对输入的注册码进行运算再比较用户名运算结果。
结果要用汇编进行运算,用C老计算不对,对比OD里的寄存器对比了很久,郁闷

注册机部分代码:
  _asm               
                 {
                         NOT temp
                         ROR temp,7                    
                 }
                 //第一步运算完毕
        EBX=0;
        ///////////////生成KEY
        char zifu[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
        printf("%s","注册码:");
        while(1)
        {
                if(temp%26==0)
                {
                        temp=temp/26;
                }
                else
                {
                        printf("%c",zifu[temp%26]);
                        temp-=temp%26;
                }
                if(temp<=0)
                        break;
        }
        printf("%s\n","-RAC");

PS:   ROR temp,7
        这里算是个BUG吧,因为用变量代替7老是编译不过,我的汇编也不好。后来因为考试就到这里了,不知道能不能得个邀请码,呵呵,没啥技术含量,得不到也没关系,啥时候自己的驱动学的好了,再给大家贡献自己的一份力量,加油!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
您是做什么工作的?
分析的很透彻,思路很清晰,谢谢你
2011-2-6 22:13
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
對一直都是新手的我,有很大的幫助。

感謝您的分享!
2011-2-6 23:22
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
仔细研究一下。不过都是 Win32 的,没有 *nix 吗?
2011-2-6 23:55
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持,顶楼主。
2011-2-6 23:57
0
雪    币: 862
活跃值: (329)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
6
机械工程及自动化专业
2011-2-7 11:21
0
雪    币: 56
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我还不知道如何入手!
2011-2-7 13:12
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yzk
8
好厉害,这都能。。。。牛X。在写个注册机。。。
2011-2-7 13:24
0
雪    币: 862
活跃值: (329)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
9
我刚装上Ubuntu10.10,不知道好不好弄
2011-2-7 17:38
0
游客
登录 | 注册 方可回帖
返回
//