首页
社区
课程
招聘
[原创]Sublime_text注册码验证分析
发表于: 2013-5-22 11:09 21118

[原创]Sublime_text注册码验证分析

2013-5-22 11:09
21118
[摘要]
        Sublime_text作为新一代编辑器,在很多方面都非常出色,而且作者开发非常勤奋,不久的将来必是人间神器。我最喜欢的是sublime_text的可配置性极高,用Python编写插件非常方便。要是哪天我的工资翻倍了,我一定买个License支持一下作者(毕竟大家都是搞软件的)。
        Sublime_text_2.0.1可供大家免费试用,即使没有注册也可以无限制试用;但是sublime_text_3_Beta版却只对已注册用户可用。这一点实在可惜,所以才下定决心琢磨sublime_text的License。
        在很早的时候hiwanz放出来一个破解Sublime_text的比较通用的方法:改两处二进制文件,再加上一个hiwanz提供的序列号。(wanz到底是怎么把序列号算出来的??)大家有兴趣的话可以到wanz的博客上看看他的破解方法:Sublime Text2破解
        但是我感觉wanz的方法不够好。
        下面的分析过程以最常见的正式版sublime_text_2.0.1_build2217为例,分析sublime_text的License验证过程,以期找到一个通用的破解方法。

[准备工具]
1.        OllyDBG(几乎是必须的),可用WinDBG替代,但某些方面还是OllyDBG好用
2.        PEiD(可选)

[分析过程]
1.        先用PEiD看看可执行程序的概况吧。(可以跳过)

可以看到Sublime_text是用VS2008编译的。
而且sublime_text目录下就放着一个msvcr90.dll,所以肯定是用VS2008编译的。
进一步阅读反汇编代码可以发现:
    1.        sublime_text内部使用了Boost::Python库进行开发。
所以才可以方便的用Python开发插件
    2.        sublime_text内部贯彻使用了unicode。
所以sublime_text对中文支持差就有道理了,但已有插件实现中文显示:ConvertToUTF8
上面的分析其实用处不大。
2. 用OllyDbg加载运行sublime_text.exe
        首先用OllyDbg加载并运行(F9) sublime_text.exe,在ST的Help目录下找到Enter License,随便输入几个字母,点确定。然后弹出注册失败对话框:


看到关键字了吗:
        “That license key doesn’t apper to be valid”

        然后在OllyDBG里用超级字符串查找ASCII,Ctrl+F搜索That license key,(兴奋吧!)


        在有红色方框的行上用键盘Enter,来到代码区:004CCE61



看看是从哪里跳到这一行的?004CCD50
往上翻到004CCD50行,



程序是在检查AL,并且咱们知道AL应该是上面一行Call sublime_.004CC450的返回值(你可以到这个函数里看看,文章都在这个函数中!)
现在,在004CCD49位置下断点,再次输入注册码后程序中断到这一行。
然后修改AL的值为1,按F9 ………



        怎么样?很简单吧。

[总结]
1.        通过上面修改AL为1就可以实现暴力破解
所以可以编个内存补丁了。
2.        AL是函数004CC450的返回值,如果能够把函数004CC450的返回值写死为1,那么就一举成功了。
3.        更多精彩请看下一篇文章:《急速破解所有版本Sublime_text(Win/Linux/32/64)》,敬请期待!
        各位要是等不及的话,就先到个人的博客上看这篇文件:ST急速破解(Win/Linux)

[课程]Android-CTF解题方法汇总!

收藏
免费 5
支持
分享
最新回复 (16)
雪    币: 1760
活跃值: (1616)
能力值: ( LV12,RANK:222 )
在线值:
发帖
回帖
粉丝
2
注册机路过
2013-5-22 16:24
0
雪    币: 95
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
大侠说一下思路吧,给个链接也行

我还没有搞明白sublime_text程序校验注册码的逻辑,而且注册码是那么一大串,像是SSL生成的串,不知道怎么分析里面的逻辑。
2013-5-22 17:16
0
雪    币: 371
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
VC++ 8不是VS2005吗
还是说看链接器器 求教
2013-5-24 16:13
0
雪    币: 95
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
PEiD给出的信息不准

Microsoft Visual C++ 8 * 最后有个星号,表示这条数据是由自定义签名数据库匹配出来的

多谢纠正
2013-5-24 17:56
0
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢了,学习
2013-5-26 21:36
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
牛 X ...........................................
2013-5-26 21:39
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这样也能优秀?
2013-5-27 23:23
0
雪    币: 95
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
多谢批评

这一篇的目的是引出下一篇的适用于各版本的通用破解方法
之所以不放在一篇文章里,是怕文章写得太长,没人看完。

在本篇的最后给出了下一篇的链接:急速破解各版本ST

欢迎批评指正
2013-5-28 09:59
0
雪    币: 95
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
多谢批评

这一篇的目的是引出下一篇的适用于各版本的通用破解方法
之所以不放在一篇文章里,是怕文章写得太长,没人看完。

在本篇的最后给出了下一篇的链接:急速破解各版本ST

欢迎批评指正
2013-5-28 10:01
0
雪    币: 32
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
感谢楼主分享
在0x4CC450下的 call 0x46CAF0中
下面有一些ASCII字串(ASCII "Unlimited User License") Jump from 0046CD13
所以我曾以为0x46CAF0才是关键call
2013-6-27 09:58
0
雪    币: 95
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
多谢支持
我是在看到 Call  sublime_.004CC450,然后接着是test al, al,想到这个函数的返回值可能比较有用。然后先是试着在内存中改al,后来是改sublime_.004CC450的返回值。
也是尝试了很长时间。
2013-7-2 23:34
0
雪    币: 4
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
[QUOTE=ingvar;1179726][摘要]
        Sublime_text作为新一代编辑器,在很多方面都非常出色,而且作者开发非常勤奋,不久的将来必是人间神器。我最喜欢的是sublime_text的可配置性极高,用Python编写插件非常方便。要是哪天我的工资翻倍了,我一定买个License支持一下作者(毕竟大家都是搞软件...[/QUOTE]

对汇编不懂,学过点C语言,AL是不是相当于一个函数的返回值,把AL改为1是不是永远都是真?
2013-7-8 21:22
0
雪    币: 95
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
是的,汇编程序通常把AL或EAX作为返回值,反AL设为1,相当与 return 1;或return true;
2013-7-9 15:07
0
雪    币: 4
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
请问如何把AL设成1呢?
2013-7-12 21:25
0
雪    币: 95
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
mov al, 1

就可以
然后你要找到这个汇编语句的十六进制表示和该语句的位置,就可以改了。
2013-7-13 18:30
0
雪    币: 4
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=ingvar;1198575]
mov al, 1

就可以
然后你要找到这个汇编语句的十六进制表示和该语句的位置,就可以改了。[/QUOTE]
非常感谢。
2013-8-15 02:18
0
游客
登录 | 注册 方可回帖
返回
//