首页
社区
课程
招聘
[原创]新人首次破解一小程序完成注册机~
发表于: 2011-1-23 18:34 14057

[原创]新人首次破解一小程序完成注册机~

2011-1-23 18:34
14057
小弟最近刚学破解,看了一天视频了,想试试手,于是上网找了点题目练练
下面便是小弟的处女作,程序很简单。但是毕竟自己动手搞出来的注册机,还是蛮激动的,比前两天玩爆破貌似感觉进步了一些,嘿嘿,好了,不扯了,下面进入正题
【文章标题】: 新人首次破解一小程序完成注册机~
【文章作者】: 黄瓜熟了
【软件名称】: 无名
【下载地址】: 网上搜索
【加壳方式】: 无壳
【使用工具】: PEiD、OD
【作者声明】: 记录破解学习,体验学习过程的美妙。。

首先打开 PeiD 查壳,发现没加壳。

打开程序输入用户和序列号如下


发现关键字符串,用OD载入程序,在汇编窗口单击鼠标右键,选择Ultra字符串参考—1.查找ASCII,发现有两个no luck!字符串,只有一个good work!

双击good work这一行,来到主程序窗口,下面果然有一个no luck!在此处按F2下断

F9运行程序,Help->Register,再次输入刚才的账号(随便输个错的也行)
点”OK”后程序会被OD断下(断点的位置没下错,嘿嘿),按F8向下执行
下面第一个retn返回后,不要动,到达下面这个地方

注意了 00401241位置有一个cmp命令,很有可能是我们想要的东西。

00401228    68 8E214000      push Cruehead.0040218E              ; dsds
0040122D    E8 4C010000      call Cruehead.0040137E
00401232    50               push eax
00401233    68 7E214000      push Cruehead.0040217E              ; 43
00401238    E8 9B010000      call Cruehead.004013D8
0040123D    83C4 04          add esp,4
00401240    58               pop eax
00401241    3BC3             cmp eax,ebx
00401243    74 07            je short Cruehead.0040124C
00401245    E8 18010000      call Cruehead.00401362
0040124A  ^ EB 9A            jmp short Cruehead.004011E6
0040124C    E8 FC000000      call Cruehead.0040134D
00401251  ^ EB 93            jmp short Cruehead.004011E6

这里面的00401232    50               push eax
把Cruehead.0040137E中的返回值保存了下来,之后又pop eax,并拿它做比较,可以看出来密码测试与它有关,于是可在00401228处下断之后F9,发现程序果然在这地方被OD断了下来

观察最后cmp要用到eax和ebx但是现在两个值都不清楚,因此下面两个函数都进去看看吧,F7单步进入0040122D处的函数,程序进入如下位置

其中这一行 0040138B    721F        jb short Cruehead.004013AC  
是在AL的值小于’A’时直接跳出来了,输出no luck!,因此账号不能用数字了哦。
00401394    E8 39000000      call Cruehead.004013D2  
这一行为al为小写字母的ASCII码时的情况,单步跟进去看看吧

原来是把al的值减20H,也就是把小写字母变成大写字母了
返回继续F8单步,让程序运行到这一行
0040139C    5E           pop esi                      ; Cruehead.0040218E
下面还有个函数,F7再进去看看

好了,到了关键地方了,这个函数是通过刚才输入的账号 abcd来计算edi的值,很简单,只是把 abcd(此处已经变成ABCD)的值按ASCII码加起来了,即edi=’A’+’B’+’C’+’D’
算好edi后返回到这里

可以看出来再把刚才的edi与5678异或一下,放于eax中然后返回

好了,第一个函数终于计算完成了,下面继续F7单步,进入第二个函数中吧,如下

这个函数简单,只是把密码简单进行一下10进制字符串到16进制的处理,处理后的数放在edi中,然后再用edi与1234H进去异或,存在ebx中返回,至此,上面两个对字符串处理的函数均已经处理完毕,现在开始比较两个函数计算机出来的数了

可以看出来我们刚才输入的账号密码经过运算后是不相同的,下面我们根据刚才所分析的算法写一个注册机,简单用C语言写了个程序测试一下。
#include<stdio.h>

void main()
{
        char str[10];
        int i,sum=0;
        printf("输入账号:");
        scanf("%s",&str);
        for(i=0;str[i]!='\0';i++)
        {
                if(str[i]>='a'&&str[i]<='z')
                        str[i] = str[i] - 0x20;
        }
        for(i=0;str[i]!='\0';i++)
        {
                sum += str[i];
        }
        sum = sum^0x5678^0x1234;
        printf("密码应为:%d\n",sum);
}


下面我们来试试结果正确与否,打开程序输入上述账号密码,得出下面的结果:

再多试几个,发现注册算法没有问题,其中账号长度最长为10

费了一下午时间写这个帖子,大家见笑了。。
Cruehead.1.rar

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (23)
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
2
鼓励一下~~
2011-1-23 19:31
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持楼主……
2011-1-23 19:43
0
雪    币: 277
活跃值: (45)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
嘿嘿。。。谢谢啦~继续学习中
2011-1-23 23:17
0
雪    币: 302
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
鼓励一下。不错。看雪新人辈出。。值得庆贺。。
2011-1-24 12:14
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
6
是不是可以改成这样:
int find(int t)
{
    return (t^0x1234);
}
2011-1-24 13:13
0
雪    币: 277
活跃值: (45)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
对哦。。我开始随便写个就发上去了  现在改了下~ 异或5678后直接再异或1234就OK啦。。嘿嘿
2011-1-24 22:47
0
雪    币: 9
活跃值: (142)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
8
a=a xor 5678
b=a xor 1234
2011-1-25 05:32
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持一下楼主,我是新手,练练好
2011-1-25 19:15
0
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
潜力贴留名.Opera插图补丁.字数补丁..
2011-1-25 19:37
0
雪    币: 277
活跃值: (45)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
额。。。这两天看加密与解密才发现这是书上的例子  纠结~
2011-1-29 13:47
0
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢了,下载了
2011-1-29 20:15
0
雪    币: 783
活跃值: (586)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
支持楼主,,,,,学习
2011-2-13 12:16
0
雪    币: 38
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
果断拿走学习,这个比单纯的去思考有效~
2011-2-13 13:31
0
雪    币: 101
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15

不错
2011-2-17 21:05
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
菜鸟膜拜一下,哈哈
2011-2-25 16:21
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
41+42+43+44=10A
10A XOR 5678=5772

5772转换成10进制=22386。

怎么计算结果与楼主不符。
2011-3-1 00:35
0
雪    币: 8719
活跃值: (2085)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我进来学习一下!
2011-3-1 12:55
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
支持你咯……
2011-3-1 13:00
0
雪    币: 277
活跃值: (45)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
20
结果还是要异或一下0x1234  这一步你没做吧?
2011-3-6 22:03
0
雪    币: 205
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
短小精悍!!!
2011-3-12 01:30
0
雪    币: 630
活跃值: (570)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
支持lz   比我好多了啊我什么都不懂了 汇编
2011-3-13 18:21
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
支持楼主,我现在还没入门呀,看不懂。慢慢开始学
2011-3-18 22:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
我决定要买本 加密与解密 的书了, 楼主加油~
2011-3-19 09:28
0
游客
登录 | 注册 方可回帖
返回
//