Sublime SVN/SFTP 破解
注: 本文原来发布在CSDN,但是最近发现文章状态变成了审核未通过,原因是版权问题,于是复制到这边。
注2: 本文发布时间较早(2014年),已经失效。在新版本中用"-"来判断新旧Key,有"-",则为旧key,并验证如果不在KEY_FILTER(已知的所有旧Key的Bloom Filter)中就是伪造的Key。新key用椭圆曲线公私钥的方式验证。目前思路有修改bloom_filter.pyc,修改判断逻辑。
以下为原文:
注:使用一段时间后出现
./sublimesvn/commands.py:4230: UnicodeWarning: Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
这种问题,虽然不会弹出对话框,但是svn界面会显示unregistered,重启sublime后正常,明日早起研究
注:测试环境 Ubuntu14.10 Sublime Text 2 2221
window下将sys.path.append('~/.config/sublime-text-2/Packages/SVN')
里的路径改成sublime->perferences->browser package所在的路径
import sys;sys.path.append('~/.config/sublime-text-2/Packages/SVN');config={'email':"your_email_1",'product_key':'test'};from sublimesvn import commands;commands.SvnCommand.setup_elements(config);print commands.SvnCommand.get_prefix()
email填自己的email,product_key暂时随便填
由于sublimesvn的pyc都是python2.6环境下生成的,所以必须调出sublime的console (Ctrl+`),将以上代码复制进去 ,而不能用python,ipython之类的
当然如果还在用python2.6的话忽略以上一句
把最后算出来的值作为product_key和email放入svn.sublime-settings即可
算了一个供试用
SVN
email:cracked_by_jackyzy823 product_key:fb1255-184296-6565ae-ac9efd-2c6c30
SFTP
email:cracked_by_jackyzy823
product_key:a69fef-050040-e39de9-b2720f-64a9fc
但是我用什么email 算出来都是这个值。。。。 更正:因为setup_element 在Svncommand类里有elements时不会覆盖之。。重启一下sublime就好了
在
SublimeText -> Preferences -> Package Settings -> SFTP/SVN -> Setting Users
中增加以下内容 {
"email":"your_email",
"product_key":"calced_product_key"
}
完成激活
sftp
在sftp里get_prefix 并没有单独成为一个函数,虽然可以通过svn的get_prefix破解但是稍微有些麻烦,等有空把get_prefix函数研究透彻再更新。
commands.Svncommand.get_prefix 是通过使用decompile++反编译commands.pyc得到的,但是由于可能代码做了混淆,所以这段代码反编译不是十分清晰。
sftp代替方案
def calc_key_sftp(email):
elements=[email,'sftp_flags','ssh_key_file','psftp'];
key=elements[0];
for e in elements:
key=hmac.new(e.encode('utf-8'),key).digest();
return key;
将email输入函数 将输出值代替以下代码的calc_key_sftp("email") 就可以算出sftp的product_key
注:需安装有sublime svn
import sys;sys.path.append('~/.config/sublime-text-2/Packages/SVN');from sublimesvn import commands;commands.SvnCommand.elements=[0,calc_key_sftp(''email')];print commands.SvnCommand.get_prefix()
与此同时
svn也有同样的不讨好方法
def calc_key_svn(email):
elements=[email,'status','checkout','diff'];
key=elements[0]
for e in elements:
key=hmac.new(e.encode('utf-8'),key).digest();
return key;
注释同sftp
import sys;sys.path.append('~/.config/sublime-text-2/Packages/SVN');from sublimesvn import commands;commands.SvnCommand.elements=[0,calc_key_svn(''email')];print commands.SvnCommand.get_prefix()
更新:
将cal函数 lambda 化
svn
import sys,hmac;sys.path.append('~/.config/sublime-text-2/Packages/SVN');from sublimesvn import commands;calc_key_svn=lambda x: hmac.new("diff",hmac.new("checkout",hmac.new("status",hmac.new(x,x).digest()).digest()).digest()).digest();commands.SvnCommand.elements=[0,calc_key_svn("your_email")];print commands.SvnCommand.get_prefix()
sftp(需在svn存在情况下)
import sys,hmac;sys.path.append('~/.config/sublime-text-2/Packages/SVN');from sublimesvn import commands;calc_key_sftp=lambda x: hmac.new("psftp",hmac.new("ssh_key_file",hmac.new("sftp_flags",hmac.new(x,x).digest()).digest()).digest()).digest();commands.SvnCommand.elements=[0,calc_key_sftp("your_email")];print commands.SvnCommand.get_prefix()
Leave a comment
Note : Your comment will not be displayed until a Github PullRequest have been merged.