最新编译打包gVim7.4.100

2026-04-13 修正错误 吐槽 Vim官网实在太保守,提供的下载链接才是7.4最开始的版本,自从 Vim7.4发布以来,到今天已经有了上百个补丁包(到目前为止,最新的补丁是patch-131)。而且Vim7.4对很多脚本的支持做得更好了,比如对Python,Lua,TCL等的支持。但是Vim官网的链接不仅陈旧,而且没有打开对LUA、TCL、Perl等脚本的支持。 我的最新编译打包 鉴于Vim官网的不给力,我自己编译打包了最新的gVim(7.4.100),同时打开了LUA、Perl、TCL和Python脚本支持,并且正在自己的32位和64位机器上很顺畅地使用。 如果你准备用neocomplete插件,那么你来对了,这个编译包就是为了这个目的准备的。 所以今天拿出来与大家分享。 下载链接 下载地址:百度云 使用方法 下载安装gVim7.4.100.exe 为了可以在Vim中交互使用LUA、Python等脚本,需要把我的压缩包内的相应的运行时库复制到你的安装目录下 对于x64位系统需要注意: 为了能在鼠标右键菜单中使用Edit with Vim等命令,必须把我的x64目录下的gvimExt.dll复制到安装目录下 享受

2013年12月28日 · 1 分钟 · Jid

10分钟破解Sublime Text 3 Build 3059/3061/3062

更新 经过了差不多半年,Sublime Text的作者又开始更新了,可惜今年的更新频率远比不上前些年。难道作者不想玩了? 2014年5月5号,作者在Dev频道上放出了更新Build 3062, 功能略有增加。 下面是我修改过的sublime text, 包括了Windows 32/64, Linux 32/64 及 MacOS: 下载 Sublime Text Build 3062 下载 Sublime Text Build 3059 全部版本下载 3059,3061下载链接请转到:sublime text 完美破解 准备工具 IDA :强大的反汇编工具,目前最新的可用的版本是6.1, 可以到我的共享下载IDA6.1 winhex : 强大的十六进制编辑器,为了实现爆破必须有一个可用的十六进制编辑器。额,在这里用Vim确实不方便。可以到我的共享下载winhex 17.2 sublime text原程序,到官网下载吧,我推荐下载Protable版,解压后即可用。对MacOS用户,道理是一样的,下载dmg镜像文件后直接解压即可得到名为Sublime Text的可执行程序 体验sublime text,发现突破点 下面我的说明都是以sublime text windows 32位的程序为例进行说明,在其他平台上的表现完全一致。 打开sublime text程序,相信你已经把准备工作做好了。打开程序后新建文件随便写一些文字,然后狂按Ctrl+S进行保存,这时就会弹出注册对话框。如下图: 看看这个对话框的标题:This is an unregistered copy,这就是我们的突破口。 下面就开始搞。 分析程序,找到关键位置 用IDA加载sublime text可执行程序,你应该知道自己把可执行程序放哪里了。IDA分析程序要正经花些时间,等分析完了按一下Space键,就是按一下空格键。(感觉自己很麻婆) 在IDA里找菜单Search–>text(Alt+t), 打开搜索文本对话框,在搜索框内输入This is an,开始搜索,如下图: 现在程序跳到了.text:004C3FE2位置,这是一个很关键的函数,咱们对这个函数稍微分析一下,在IDA里面按F5,把汇编程序编译为C程序。 ...

2013年12月24日 · 1 分钟 · Jid

Sublime Text 3 Build 3059 Windows/Linux/32/64/MacOS 完美破解

2026-04-13 修正错误 更新,最新的下载链接如下: Dropbox: Sublime Text Build 3059 Sublime Text在这个时候放出了最新Beta版,尤其是增加了很多的功能后,实在让人兴奋。但是我原来写的注册机却不能用了,见到这个情况实在是心痒,所以立马找出好久不用的IDA开始Hack。(ST的开发者,对不住了!可惜我囊中羞涩,不然一定会买一个License的。) 这次的更新比原来有更强的防护措施,之前的版本有一个最重要的函数,只要让这个函数总是返回0就可以把ST破解掉了。这个的版本则在原来的基础上加了防护,还是同一个函数,但是这个函数要在注册的时候返回0,而在软件开启的时候返回1. 实在有点搞不定。 所以虽然现在把windows下的两个版本(32和64)的破解了,但是还不能写成注册机,Linux版的也还没开始做。今天就先把破解后的两个版本拿出来与大家交流,有愿意谈论这个软件的可以在本文后面留言。 sublime text 3059 Windows x32 sublime text 3059 Windows x64 sublime text 3059 Linux x32 sublime text 3059 Linux x64 sublime text 3059 MacOS 使用方法:本程序不是完整的程序,仅仅是sublime_text.exe, 所以要先到官网上下载程序并安装,然后把我的程序复制过去即可。 注意:本程序仅仅是交流学习用,不可用于其它目的。 更新: 目前已经能破解Windows/Linux/MacOS下的全部版本,目前还差真正能用的注册机。(2013.12.22) 补充说明:对于MacOS用户,由于我上传的程序不是dmg安装包,而仅仅是sublime text的可执行程序, 所以为了能顺利使用,你应该先从官网下载安装程序,然后安装。安装后再把我的文件复制到你的安装目录下, 大概这个位置:Sublime Text/Sublime Text.app/Contents/MacOS.

2013年12月19日 · 1 分钟 · Jid

Linux 从源码编译安装 Vim

为什么自己编译 系统包管理器安装的 Vim 通常没有开启 Python、Lua 等脚本支持,导致一些插件(如 YouCompleteMe、Neocomplete)无法使用。 编译步骤 1. 安装依赖 # Debian/Ubuntu sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev \ libgtk2.0-dev libatk1.0-dev libbonoboui2-dev libcairo2-dev \ libx11-dev libxpm-dev libxt-dev python-dev ruby-dev lua5.2 \ liblua5.2-dev libperl-dev git 2. 配置 ./configure --with-features=huge \ --enable-rubyinterp \ --enable-luainterp=dynamic \ --enable-pythoninterp \ --with-python-config-dir=/usr/lib/python2.7/config \ --enable-perlinterp \ --enable-cscope \ --enable-tclinterp \ --enable-multibyte \ --enable-clipboard \ --prefix=/usr 各选项说明: 选项 作用 --with-features=huge 开启几乎所有功能 --enable-rubyinterp Ruby 脚本支持 --enable-luainterp=dynamic Lua 动态加载 --enable-pythoninterp Python 2 支持(YCM 需要) --enable-perlinterp Perl 脚本支持 --enable-cscope Cscope 代码浏览 --enable-multibyte 多字节字符(中文支持) ⚠️ 不要同时开启 Python 2 和 Python 3,会导致 YouCompleteMe 无法正常工作。 ...

2013年11月2日 · 1 分钟 · Jid

Debian 开启 bash_completion 自动补全

问题 Debian 默认的 bash 自动补全功能不完整——按 Tab 只能补全文件名和命令名,无法补全 apt-get 的子命令、systemctl 的服务名等。 原因 bash_completion 包其实已经预装了,只是默认被注释掉了。 解决方法 方法一:全局生效(需要 root) 编辑 /etc/bash.bashrc,找到被注释掉的这段代码: # if ! shopt -oq posix; then # if [ -f /usr/share/bash-completion/bash_completion ]; then # . /usr/share/bash-completion/bash_completion # elif [ -f /etc/bash_completion ]; then # . /etc/bash_completion # fi # fi 去掉每行前面的 #,保存,重新登录即可。 方法二:仅当前用户 把上面取消注释后的代码段追加到 ~/.bashrc 末尾,然后执行: source ~/.bashrc 验证 输入 apt-get in 然后按 Tab,应该能自动补全为 apt-get install。

2013年10月15日 · 1 分钟 · Jid

Git 记住密码:避免每次 pull/push 都输入凭据

问题 每次 git pull 或 git push 都要输入用户名和密码,非常繁琐。 解决方法 Linux / macOS(凭据缓存) # 缓存密码 1 小时(3600 秒) git config --global credential.helper 'cache --timeout=3600' # 或缓存 8 小时 git config --global credential.helper 'cache --timeout=28800' 要求 Git 版本 ≥ 1.7.10。 Windows(凭据管理器) 安装 Git Credential Manager for Windows,安装后 Git 会自动使用 Windows 凭据管理器存储密码。 新版 Git for Windows 已内置此功能,无需额外安装。 永久存储(所有平台) # 明文存储在 ~/.git-credentials(不推荐在共享电脑上使用) git config --global credential.helper store 安全提示 cache 模式:密码仅存在内存中,超时后自动清除,相对安全 store 模式:密码以明文保存在磁盘上,方便但不安全 推荐使用 SSH key 或个人访问令牌(PAT)替代密码认证

2013年10月15日 · 1 分钟 · Jid

修改sublime_text主题(Solarized)

最近发现Solarized主题很耐看,尤其是Dark主题喜欢得不行。所以把常用的工具的主题都设置成了*Solarized(Dark)*样式。 但是,sublime_text自带的Solarized(Dark)有一点让人不满意: 选中文本的颜色太浅,几乎分辨不出来。 故而决定修改sublime_text的Solarized(Dark)主题。 2026-04-13 修正错误 修改方法: 在sublime_text程序所在目录下的Packages目录下找到Color Scheme-Default.sublime-package。(注:.sublime-package文件其实是一个文件包,类似于.zip文件) 打开Color Scheme-Default.sublime-package(打开方式就是打开zip文件的方法),在里面找到文件Solarized (Dark).tmTheme,打开该文件。 修改Solarized (Dark).tmTheme 把第23行的**#0A2933** 改为 #EEE8D5,保存退出,重新打开sublime_text,看一下效果。 OVER! 补充:关于sublime_text的Packages 目前的sublime_text的工具及插件流行使用.sublime-package后缀的压缩文件,而不是像原来sublime_text2的时候把程序存放在文件夹中。这是sublime_text3很大的不同点。 以上的修改方法完全适用于sublime_text2/sublime_text3。

2013年7月13日 · 1 分钟 · Jid

黑客组织称将击溃朝鲜网络 朝全境断网应对

中广网北京6月25日消息(记者朱敏)据中国之声《新闻纵横》报道,63年前的今天,朝鲜战争爆发,而63年后的同一个日子,朝鲜将迎来一场虚拟世界的战争。知名的国际"黑客"团体"匿名者"宣称,今天要对朝鲜网络发起攻击,击溃朝鲜的内部网络。朝鲜因此提前一周关闭了国内所有互联网,拦截"匿名者"的强势来袭。 而这并不是"匿名者"第一次攻击朝鲜网络,在今年4月15日,也就是朝鲜太阳节这一天,朝鲜部分网站已经遭到"匿名者"攻击,只是这一次,它的野心更大,要向内部网站进攻。“匿名者"此次进攻是炫耀技术还是有政治目的?朝鲜将如何应对? 4月15日正是朝鲜过太阳节的喜庆日子,然而,这一天朝鲜有5家网站突然被一个带有《V字仇杀队》面具和英文"北朝鲜"字样的红色旗子覆盖,全面瘫痪。这是黑客在这一天送给朝鲜所谓的"礼物”,而这些"不速之客"出自著名的国际黑客团体"匿名者",他们宣称是故意破坏朝鲜庆祝节日的气氛。更可怕的是,今天,“匿名者"又要来了,这一次,来势更猛,新华社驻平壤记者杜白羽: 杜白羽:“匿名者"宣称,将于6月25日也就是朝鲜战争爆发的日子,对朝鲜发动名为"渗透朝鲜内部"的网络攻击,可借机动摇朝鲜体制。 韩国《中央日报》今年5月曾援引这一"黑客"团体成员的话说,“2013年6月25日将成为朝鲜悲剧的日子”。报道提及,“匿名者"将攻击朝鲜全国内部网络"光明网"以及"我们民族之间”、“民族通信”、“黎明”、“朝鲜新报"等网站。对于这一威胁,朝鲜一方面说,“匿名者"并不了解朝鲜内部网站,“光明网"在朝鲜根本不存在,另一方面,朝鲜却为应对这次黑客攻击切断了国内网络。在平壤的新华社记者杜白羽也无法上网。 杜白羽:朝鲜从上周二也就是18日起,已经无法通过电脑连接国际互联网,据我了解,现在在朝鲜的外国人除了用卫星应急上网之外,应该都无法正常连线国际互联网,同时3G手机上网服务也已暂停。朝鲜的互联网主管部门在断网的前一天,也就是17日,向驻朝使团发来照会称,由于遭到日益猖獗和露骨的网络袭击决定将国际互联网暂停一段时间,但朝方没有对互联网可能恢复的日期做出回应,因此,具体何时能恢复网络仍是未知,现在在朝外国人的工作和生活也因此变得与世隔绝。 断网给像杜白羽这样的新闻从业者带来工作上的诸多不便,但是杜白羽说,朝鲜的普通民众却没有觉得断网的日子和平时有什么不一样。 杜白羽:朝鲜国内的普通民众一般无法连接国际互联网,只有少数人有由于工作原因可能接触到互联网。因而,普通民众对于网络攻击一事并没有概念。至于3G手机业务,朝鲜民众只能使用某些特定3G服务,例如短信、彩信和视频电话,但不能连接全球互联网,也不能拨打国际长途电话或与在朝外国人通话。 那么,“匿名者"究竟是一个什么样的"黑客组织”,以至于让朝鲜关掉所有网络来应对?来看看它的"光辉"历史。 这个闻名于世的"黑客"团体"匿名者"曾经入侵过宗教组织山达基教会,攻击过与维基解密断绝往来的公司,比如,万事达、Visa等等,今年4月还入侵朝鲜官方新闻网站、5月入侵菲律宾网站等等。 它连续在全球的高调出击,引发了人们越来越多的关注。也因此被冠以 “维基解密"的继承者、“对世界网络威胁最大的组织"等各种名号,而它却称自己只是为了维护互联网自由,经得起道德考验。 那么,“匿名者"这次针对朝鲜的攻击是个人性质还是有组织的呢?朝鲜只能靠关闭网络来应对吗?北京邮电大学经济管理学院姜奇平说,像这种实力的国际"黑客"团体攻击朝鲜网络是很容易的。 姜奇平:对于这些黑客来说,他们要攻陷朝鲜的网站应该是比较容易的,这个对他们来说达不到真正的炫耀的目的,只不过是在表达自己的一种好恶。实际上,黑客攻击行为有很强的个人性,当然也有有组织发动的,但两者之间有明显的区别。国家支持的往往是深入到硬件的攻击手法,而个人的黑客攻击经常是即兴的,它的攻击主要是软件攻击,这种黑客攻击和其他攻击有所不同,它学起来很容易,经常一个教程就可以使一个没有什么基础的小青年能够攻克很重要的网站,这些属于传统黑客以逞能为主,就是通过攻陷一些网站来显示自己技术高超。 那么,针对朝鲜的攻击是个人性质还是有组织的呢?就"匿名者"这一团体本身而言,是非政府性质的。然而,由于被攻击对象是朝鲜而使得这场攻击的背后策划者引人质疑。朝中社就指责,美国和韩国在幕后"与这一‘黑客’团体勾结”。对此,姜奇平认为: 姜奇平:像这种攻击朝鲜的,显然,至少它在价值观上是不太认同朝鲜的情况,和那种纯的技术黑客还是有所不同的。 面对来势汹汹的黑客攻击,朝鲜关闭了所有国际互联网。这就是朝鲜的应对措施吗?如果黑客没有提前通知,朝鲜网站难道只能坐等被袭吗?姜奇平说,朝鲜目前的网络防御能力便是如此,而这与其不开放的网络机制有关。 姜奇平:一般来说呢,黑客攻防一般它的技术水平都是在激烈的开放条件下,矛和盾此消彼长,这样水平容易提高,如果说采取技术封闭措施的话,防守技术也很难提高,我认为它好像不是技术类型的问题,而是管理体制的问题,它有点像一个大的局域网,这样的话从技术角度讲不利于防守技术的提高。 转自:中国广播网

2013年6月25日 · 1 分钟 · Jid

关于'eh vector constructor/destructor iterator'的讨论及类的内存分布模型

[原理分析] 在用IDA反汇编C++程序的时候,经常会看到这样的语句:“call eh vector constructor iterator”或“eh vector destructor iterator”。 第一反应:这是在调用某个std::vector对象的构造函数或析构函数。但进一步的阅读发现跟std::vector的实现对不上号,就是说程序中并没有声明std::vector对象。 其实,这是调用new或delete导致的,即 T * tt = new T[100]; delete [] tt; 其中,T是自定义类,并且自定义了构造函数或析构函数。 说到这里估计有人就会恍然大悟了。道理就是这么简单! “eh vector constructor/destructor iterator”按字面上理解,就是:数组-构造-迭代器或数组-析构-迭代器。 它发生在创建一个自定义类的数组时,C++在分配内存后自动迭代调用类的构造函数以初始化每一个数组元素,或析构。 但,这里有一个问题:new的时候知道数组的大小,但是delete的时候没有指定数组个数,那么C++是怎么知道对多少个对象调用析构函数,并且释放多大内存呢? C++程序员大概都有这样的疑问。 答案就是C++在创建数组的时候,在分配内存的头四个字节保存数组大小,从第4个字节开始才是数组内容,返回的时候也是返回的第4个字节之后的内存,所以导致大家感觉不到数组长度。 下面以一个简单的程序示范一下数组的创建过程、销毁过程、类的构造和析构、对象的内存分布模型,编译器是VC6.0,相信很多人都是在windows上搞反汇编的。 [示范程序] class demo_B { public: demo_B(); ~demo_B(); void set_value(int a, float b); private: int a_; float f_; }; demo_B::demo_B() { a_ = 1; f_ = -1.0; } demo_B::~demo_B() { a_ = -1; f_ = 0.0; } void demo_B::set_value(int a, float b) { a_ = a; f_ = b; } void test_foo(int n) { demo_B * buffer = new demo_B[n]; delete [] buffer; } int main(int argc, char const *argv[]) { test_foo(10); return 0; } 关键函数void test_foo(int n);用IDA反汇编如下: ...

2013年5月22日 · 3 分钟 · Jid

Source Insight 3.5.x 序列号算法分析

⚠️ 本文仅用于逆向工程学习和算法分析交流,请勿用于商业用途。 算法概述 Source Insight 3.5.x 的序列号格式为 SI3US-XXXXXX-XXXXX,由两部分组成: 中间数(6 位):随机生成,但排除一些特定值(mask 表中的 32 个值、全相同数字等) 校验码(5 位):由中间数通过固定算法计算得出 核心算法 /* * Source Insight 3.5.x 序列号算法 * 可用 VC/GCC 编译 */ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <time.h> /* 提取数字 v 的第 i 位 */ unsigned int digit(unsigned int v, unsigned int i) { v = v % (int)pow(10, i); return v / (int)pow(10, i - 1); } /* 生成大范围随机数 */ long lrand() { if (RAND_MAX == 0x7FFF) return (long)((rand() << 16) | rand()); else return rand(); } int main() { /* 被排除的中间数值 */ const unsigned int mask[32] = { 0x3039, 0x1E240, 0x5464E, 0x6F855, 0x8AA52, 0xA5BF5, 0x980D0, 0xBADD0, 0x980D0, 0x30448, 0x30379, 0x8AF93, 0x30379, 0x7B9, 0xF2F90, 0x9FF66, 0x8AA52, 0xF3A0, 0x30379, 0x8AA52, 0x62AF, 0x2AD, 0x71FDC, 0x5A124, 0xFFB2, 0xB96D8, 0x2B18E, 0x4CDE4, 0x71FDC, 0x1068C, 0x765C3A63, 0x745C3533 }; /* 校验码计算的变换表 */ const int i_dat[10] = {0x96, 0x95, 0x10, 0x23, 7, 0x15, 8, 3, 16, 17}; srand((unsigned int)time(NULL)); while (1) { unsigned int d = 0; unsigned int mid_number = 0; char resp[128]; /* 生成合法的 6 位中间数 */ while (1) { d = lrand() % 1000000; if (d < 100000 || d % 111111 == 0) continue; /* 排除 mask 表中的值 */ int i; for (i = 0; i < 32; ++i) { if (mask[i] == d) break; } if (i == 32) break; } mid_number = d; /* 计算校验码 */ int i; for (i = 0; i < 6; ++i) { d = (i_dat[i] ^ (digit(mid_number, 6 - i) + 48)) + 4 * d; } d = d % 100000; if (d < 10000) continue; printf("Serial number: SI3US-%d-%d\n", mid_number, d); printf("Generate another? (y/n): "); memset(resp, 0, 128); scanf("%s", resp); if (resp[0] != 'y' && resp[0] != 'Y') { printf("Good Bye!\n"); break; } } return 0; } 算法要点 中间数必须是 6 位(100000-999999),且不能全相同 32 个 mask 值是被排除的特定数字 校验码通过中间数的每一位与 i_dat 表异或运算后累加得出 校验码必须 ≥ 10000(即 5 位数)

2013年5月21日 · 2 分钟 · Jid