Graphviz 简介

符合程序员的以代码生成一切事物的思想,并且类似 HTML ,只定义结构,样式则可以通过第三方工具来进行美化。

例如 oxygen 就是一个可以通过 Graphviz 代码来生成手绘风格图表的网站。

基本概念

Node 就是图的一个结点。

Edge 连接两个结点之前

Graph 定义了整个图片

工具教程

用过 NodeJS 的都了解,有一个 supervisor 命令能够监听目录,一旦发现文件发生改变后自动重启程序。发现 dot 命令并不存在自动监听生成图片的功能,因此改造了下,安装第三方工具 nodemon 来实现文件监听。

1
npm install -g nodemon

然后运行命令 nodemon -e .gv -x "dot -Tpng -o test.png stack.gv" ,便实现了 nodemon 监听指定后缀名的功能,然后执行指定的命令。可惜的是暂时没有找到将发生文件变化的文件名作为变量传入到命令中的方法。

参考

Guide

浏览器使用历史

早期试用

记得最早使用的浏览器是傲游,后来短暂使用了一段时间的搜狗之后就一直改用Firefox,即使Chrome出来后,短暂使用过,但是后面还是继续选择使用Firefox。

Firefox给我的第一印象就是丰富的插件,相比早期的IE和国内一众基于IE内核的浏览器,插件功能更加强大,特别是那会惊为天人的Adblock Plus让我摆脱了页面上各种眼花缭乱的广告。而另外一个插件Downthem All则让我在大多数情况下不需要启动迅雷来多线程下载一个本来就不会花费太多下载时间的文件链接,尤其。

Chrome

虽然后来出现了速度更加快的Chrome,但是一开始的某些插件(例如Adblock)并不完善,并且处于对隐私方面的考虑,仍然坚持使用Firefox。

Chrome也在不停的进步,各种功能不断完善,所以目前我主要会在调试网页的时候试用Chrome。

Firefox缺点

目前使用的感觉主要是实在是太慢了,标签一多经常性的会出现卡死。在Windows下仍然是32位,所以都会单独下载第三方编译版本(例如pcxfirefox),而在Linux/Mac下使用时,则要经常性的重启下。

为了应对Chrome的竞争,近两年来Firefox的采取了更加激进的更新策略,但是随之而来的却是每个版本一旦更新,一些插件就会失效,特别是Autoproxy这个插件,一度让我想放弃Firefox。而近期,则完全抛弃了原有的插件支持,引入了基于WebExtension的插件,增加了插件的通用性,提高了安全性。

Firefox 57试用体验

第一次装上Firefox57后,的确觉得其速度变快很多,但是仔细观察下来,更多的感觉快是显示在了页面加载到完成渲染的过程中,

新版附加组件列表

因为大量的插件不再可用,所有需要重新选择浏览器插件,这是我在Firefox 57上所使用的新版插件列表,基本能够满足我的日常需求。

Evernote Web Clipper

Greasemonkey

虽然有人推荐试用Tampermonkey替代,但是目前为止Greasemonkey对于我仍然能够满足需求。

HTTPS Everywhere

自动跳转到该网站的HTTPS版本,随着HTTPS的不断普及,相信这个插件会逐渐失去其功能。

LastPass

密码管理,类似的还有其他几款管理软件。

Proxy SwitchyMmega

以前的代理插件AutoProxy及后续的第三方更改版本基本每次Firefox一升级就要死一大片然后重新找,现在这个插件是Chrome上的对应移植版本,不用再担心一升级就失效了。目前试用国产中仍然感觉有一些bug。

uBlock Origin

新一代的广告过滤插件,对于Adblock Plus有着较大的优势。目前Adblock Plus已经堕落了,在社区内引起了几次争论,使得大家都对其持怀疑态度。

uMatrix

用于屏蔽网页无关脚本,可以辅助屏蔽第三方追踪脚本,是NoScript的替代品。

Vimium

Vim快捷键插件,但是比原来的Vimperator权限小了很多,页面加载完成后才有效果。

Open Tabs Next to Current

新版插件功能不再有对标签外观和标签位置的更改能力,为此这个插件好像使用了一种方法绕过了限制,能够紧接当前标签新建一个新标签,此外在设置里面可以针对从当前页面打开的链接的标签位置进行配置。

about:config 设置browser.tabs.insertRelatedAfterCurrent 为true

缺少的插件

Down Them All

不再有类似的多线程轻量级下载工具,需要自己额外配置第三方下载软件。

Firefox57不足

目前的问题主要如下:

  1. Firefox57的SwitchyOmega会经常性的出现菜单显示不正常,参考[https://github.com/FelisCatus/SwitchyOmega/issues/1315]

  2. 在Mac下,Firefox57经常性的会出现高CPU占用情况,然后风扇狂转,最终我更换成了Firefox Nightly。

基础

ROP(Return-oriented programming) 是一种通过覆盖堆栈 (Stack) 内容来实现控制返回地址实现执行自定义代码的漏洞利用手段。目前比较流行的教程是蒸米写的Linux ROP系列,本文以此为基础,综合其他文章来详细的讲解Linux ROP利用国产。

构造虚拟机环境

测试过程中需要x86/x64两个环境的Linux系统,因此一般物理机测试起来比较麻烦,可以通过安装虚拟机来构造对应的测试环境。这里我使用 VirtualBox 来安装不同的测试环境,此外我选择基于 Alpine Linux 搭建测试环境,原因是 Alpine Linux 的镜像相对比较小,而且里面是基于 musl libc 实现了系统调用,意味着网上教程中的很多地方需要自己进行针对性的修改,这也是一个挑战。

虚拟机网络配置

为了方便测试,我选择使用 SSH 连接 Linux 主机执行命令,而不是从 VirtualBox 的界面,无法快捷的复制粘贴内外内容。使用 SSH 时需要有一个条件是物理机主动连接到虚拟机,但是默认的虚拟机环境采用 NAT 模式,虚拟机能够访问外网但是物理机无法访问虚拟机,这时可以额外添加一个 Host Only 网络来连接虚拟机。

Alpine Linux 基础环境搭建

需要手动安装 gcc 和 libc-dev 库提供基础编译环境,安装 gdb 提供调试功能。

1
apk add libc-dev gcc gdb

静态分析代码

反汇编程序

为了方便反汇编,可以将 gdb 的语法设置默认为 AT&T 语法改为 Intel 语法,具体方法如下:

1
echo "set disassembly-flavor intel" > ~/.gdbinit

GDB 指令简介

  • b[reak] <行号|函数名|代码地址> 下断点

  • r[un] 运行代码

  • c[continue] 继续运行

  • s/n Step into 单步跟踪进入/Step Over 单步跟踪

  • si/ni 汇编指令集 s/n

  • p [varialbe/register] 打印变量/寄存器

Debug 教程

使用 gdb level1 来加载程序,然后调用 disas vulnerable_function 来反汇编存在漏洞的函数。输入 layout asm 分屏显示汇编代码, b vulnerable_function 下断点,然后 r 开始运行程序,p $eip 打印当前 EIP 寄存器地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
0x00001220 <+0>:	    push   ebp
0x00001221 <+1>: mov ebp,esp
0x00001223 <+3>: push ebx
0x00001224 <+4>: sub esp,0x84

0x0000122a <+10>: call 0x1218 <__x86.get_pc_thunk.ax>
0x0000122f <+15>: add eax,0x2d99
0x00001234 <+20>: sub esp,0x4 // <----a

0x00001237 <+23>: push 0x100 // 256
0x0000123c <+28>: lea edx,[ebp-0x88] // -+
0x00001242 <+34>: push edx // -+-- ebp-0x88为buf地址
0x00001243 <+35>: push 0x0 // STDIN_FILENO
0x00001245 <+37>: mov ebx,eax
0x00001247 <+39>: call 0x1040 <read@plt> // 调用read函数

0x0000124c <+44>: add esp,0x10
0x0000124f <+47>: nop
0x00001250 <+48>: mov ebx,DWORD PTR [ebp-0x4]
0x00001253 <+51>: leave // mov esp,ebp; pop ebp;
0x00001254 <+52>: ret // pop eip; jump eip;

-----------------------

0x0000126f <+26>: call 0x1220 <vulnerable_function> // push eip; jump XX;

汇编代码中有一个函数 __x86.get_pc_thunk.ax 的调用,在此可以暂时忽略这段代码,与 EOP 利用无关,没有任何影响。关于这个函数的详细解释,参考 《什么是__i686.get_pc_thunk.bx?我们为什么需要调用这个?》 一文。

堆栈分析

下面先从理论上对堆栈情况分析一下。首先要注意的是,esp 指针是指向栈顶,即当前已经使用的空间。执行汇编指令到 a 处,堆栈如下:

初始堆栈

通过sini指令执行到read函数之前,此时的堆栈如下图2:

调用read函数前的堆栈

通过调试发现此时堆栈中有两个空位 0xbffffcb0 和 0xbffffc2c,猜测可能是多余的代码导致的。调用完 read 函数,输入内容后,进行堆栈平衡,此时堆栈变成下图:

调用read函数后的堆栈

调用指令 x /8cb 0xbffffc30 可以显示出输入的前 8 个字符。继续往下执行,这时候会返回,会调用 leave 指令再次堆栈平衡,释放函数中的临时变量,并恢复原有函数栈帧的 esp 。最后执行 ret 指令,至此整个执行流完毕。

漏洞原理

很明显,read 函数没有对输入的内容校验长度,导致可以输入超长字符串,利用字符串覆盖 eip(0xbffffcbc) ,则我们就可以控制这个函数的返回地址,实现漏洞利用。通过计算可以得到 0xbffffcbc - 0xbffffc30 = 0x8c,即使用 0x8c + 0x04 长度的字符串覆盖,最后的四字节就可以覆盖成功。对比原文中提供的通过脚本获取覆盖长度脚本,可以发现与我们分析的一致。

生成 Shellcode

很可惜,使用教程中所提供的 shellcode 时存在问题,进程仍然 crash,不过使用 Metasploit 生成要的 Shellcode 却能够正常执行。生成 Shellcode 的具体做法如下,进入 msfconsole,使用 show payloads 可以看到所有支持的 payload。然后 use linux/x86/exec 来选用当前环境的 payload ,输入 info 查看当前 payload 的参数,用 set CMD /bin/s 来生成执行 sh 的 shellcode,最后使用 generate 命令来生成。

执行 Shellcode

最初的想法是在 Alpine 中安装 pwntools 工具本地执行,但是发现安装了一系列软件后,最终因为某个库不支持 x86 环境而安装失败,相关需要安装的库如下,有需要的可以参考下:

1
2
3
apk add --no-cache -X https://mirrors.tuna.tsinghua.edu.cn/alpine/edge/community/ capstone-dev
apk add python3 python3-dev alpine-sdk libffi-dev openssl-dev
pip install pwntools

因为 pwntools 安装失败,所以使用 socat 命令来起服务,socat TCP4-LISTEN:5001,fork EXEC:./level1,这里同样要重新寻找对应的返回地址,因此第一次可以输入一个错误的 Shellcode,然后同样使用gdb level1 core.xxxxx 命令来调试 coredump 文件,显示具体的返回地址,再重新修改 shellcode 中的返回内容。

执行成功

后记

虽然这个教程篇幅不长,但是自己复现整个过程却充满了坎坷,断断续续花了两个月的时间,所幸第一次总是艰难的,后续会应该轻松很多吧,加油!

参考文章列表

VirtualBox虚拟机和Mac或Win主机之间网络相互通信

一步一步学ROP

一步一步学ROP 镜像文

Introduction to Return Oriented Programming (ROP)

栈溢出漏洞的利用和缓解

StackOverFlow之Ret2ShellCode详解

常用GDB指令


Mac下Wine运行心灵终结Mental Omega 3.3

简介

红色警戒(Command & Conquer: Red Alert 2)是经典的游戏,心灵终结是基于尤里的复仇的一个Mod,被称为”几乎完美的尤里的复仇”,2016年底该Mod发布3.3版本。相比原版的红警,阵营间的兵种区分更大,兵种相克更加合理,增加了多种对战模式,玩起来更加有意思。

安装Wine

Wine可以在Linux/Mac平台下模拟执行Window程序

请安装开发版本的Wine以便获得更好的兼容性

1
2
brew cask install wine-devel
brew install winetricks

安装Mental Omega 3.3

请安装3.3.2版本,最早的MentalOmega 3.3.0版本的clientxna.exe无法正常启动,需要后续更新才行,该问题可以参考(https://github.com/CnCNet/xna-cncnet-client/issues/29)

选择一个心灵终结的懒人包,解压之后运行

1
winetricks xna40

会自动安装依赖.net40和xna40,安装完毕后如果直接运行wine MentalOmegaClient.exe仍然会提示缺少.NET组件,但是可以通过wine Resources/clientxna.exe来开启程序绕过检查。

Wine

其他优化

关于Wine的字体优化,可以参考WINE界面与字体美化全攻略,及我的常用WINE程序截图展示

目前遇到的Bug

  • 1.会经常性的在命令行窗口弹出错误信息:

winedevice.exe(18227,0xb0004000) malloc: *** error for object 0x40203bb2: pointer being freed was not allocated

  • 2.在长时间运行红警后,会出现闪退现象

更新日志

2019.06.22 更新最新的 Wine 使用情况。

参考文档

【WineHQ】解决UTF8乱码问题


破解某网站m3u8视频资源

背景

某个视频教学网站资源即将超过有效期,因此尝试将网页上的视频下载到本地。

过程

1. 登录验证

这部分非常简单,模拟提交登录表单,并及时保存对应的Cookie即可

2. 视频播放流程

这个网页上使用了一个Flash播放器,然后通过该Flash文件读取m3u8文件进行播放。

HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,m3u8,是HTTP Live Streaming直播的索引文件。该文件包含了这个视频的一系列视频分片,Flash播放器或者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0xe532855feb3e18366b8e7ea0c11f3116
#EXTINF:10.066667,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg0
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x48586a2ac8397fbce9565480259c1b94
#EXTINF:10.000000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg1
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x928f18982f6ee1a7e36cfa8f36979c3a
#EXTINF:10.000000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg2
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x6651941d56de8af0c7d4bee9ae33a8de
#EXTINF:10.000000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg3
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x90df003d61ba2ef9413fdaf521cfce15
#EXTINF:10.000000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg4
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0xc7773183806b8d3d7e44811076ed5b66
#EXTINF:2.200000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg5
#EXT-X-ENDLIST

m3u8内容如上所示,解析时一般是根据EXT-X-KEY中的METHOD的加密方法和URI链接下载密钥内容,最终结合IV解密后续的分片url。

3. 变种

上述是正常的播放过程,但是对该网站解析时却失败了,解密出来的结果却不是正常的视频,多次尝试后,唯一的剩下的可能性便是这个Flash播放器采用了变种HLS协议。

使用ffdec打开下载得到的Flash播放文件,阅读其中的代码,果然并非标准的HLS协议。

在Mac上配置Android开发环境

在Mac上配置Android开发环境,通常是直接下载安装Android Studio并运行其中的配置,有太多的手工操作,需要多次确认。因此我选择使用Homebrew来安装对应的软件。

Homebrew可以自动安装多个Mac相关软件,以命令行程序为主,而Homebrew Cask包负责安装Mac上的App应用,安装时可以直接搜索,不必去各个网站单独下载,并且可以通过brew upgrade进行统一更新,免去了逐一手动更新的痛苦,目前大部分开发相关的应用都可以直接安装,基本能够达到替换App Store。

配置基本android开发环境包

正如上文所述,使用Homebrew进行软件管理的目的,所有软件均不会从官网下载,而只通过命令行安装。

1
2
3
4
5
brew install ant
brew install maven
brew install gradle
brew install android-sdk
brew install android-ndk

允许android命令来安装Android开发环境,关于所需的包,可以参考知乎-Android SDk Manager里面到底哪些东西是必须下载的?

安装HAXM

这是唯一一步需要sudo操作的安装

1
brew cask install intel-haxm

安装Android Studio

1
brew cask install android-studio

允许Android Studio后,记得配置Android SDK路径为/usr/local/opt/android-sdk


在无Root权限系统中安装Linuxbrew

Linuxbrew

Homebrew是Mac系统下著名的软件安装管理系统,其特点是不需要root权限即可编译安装Linux下的各种软件,通过修改路径来优先使用安装的软件包。而Linuxbrew则是其Linux移植版本,同样可以在不需要root权限的情况下,在.linuxbrew下完整建立一个运行环境,并在环境变量里面优先使用。

因为目前我使用的一个系统是Centos5.4版本,无root权限,gcc、python等版本均非常旧,而且无法自由安装软件提供工作效率,所以选择Linuxbrew来安装需要的软件。但是实际上整个安装过程也是非常艰难的。

安装过程

虽然Linuxbrew号称不需要root权限,但是实际安装的时候还是需要满足一定的条件,目前主要条件如下:

  • Ruby 1.8.6 or newer
  • GCC 4.2 or newer
  • Linux 2.6.16 or newer
  • 64-bit x86 or 32-bit ARM platform

可惜现有的系统不满足前两个条件,意味着需要在没有root权限下实现这亮点。

Ruby依赖

Linuxbrew是基于ruby的,而Centos5.7的ruby版本是1.8.5,仅仅相差了一个小版本号,却无法运行。因为没有root权限,所以选择采用rvm升级安装ruby。

默认rvm是编译安装的,但是显然当前版本没有安装必要的devel包,所以是无法编译成功的,看到安装过程中会首先去搜索precompiled binary,猜测可能有不需要编译的ruby版本提供,经过一番搜索,果然是可以的,运行rvm list remote可以看到支持当前系统的ruby预编译版本,就选择了一个最低版本ruby-1.9.3-p551,但是很不幸,应该是网络问题无法直接下载,需要手动从下载链接进行下载。

对于下载的包,运行rvm mount -r ruby-1.9.3-p551.tar.bz2 --binary加载,会自动把包内的文件释放出来,此时会提醒运行缺少libyaml,但是发现好像并不会引起其他问题。

Git依赖

坑爹的是git也没有安装,第一想法当然是直接释放git的rpm包,但是运行的时候一直有错误提醒:

$ git clone https://github.com/nvie/gitflow.git
Cloning into gitflow…
fatal: Unable to find remote helper for ‘https’

后得知是缺乏libcurl相关库,但是最初并不知道,因此选择重新编译git,官网提示需要如下库

1
sudo yum install curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel

自然是按照对应的依赖,然后下载解压对应的包,增加到include路径中,然后进行编译,但是事实证明这个过程非常艰难,最终没有编译成功,有兴趣的同学可以尝试下看看。

幸运的从网上找到了一个Centos rpm包库,然后根据需要的包名选择下载,s使用命令rpm2cpio *.rpm | cpio -div释放rpm包文件到了本地的~/usr目录下,并确认这些文件及so能够正常在环境变量里面

1
2
3
4
export PATH=$PATH:~/usr/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/usr/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:~/usr/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/usr/include

随后编译git,并放入~/usr/bin下,能够正常运行git。

Standalone模式安装Linuxbrew

在Standalone模式下,Linuxbrew会搭建一个完全脱离现有系统的编译环境和运行环境,运行Linuxbrew的软件时不再依赖系统原有的的编译器和库。

虽然说是Standalone模式,仍然需要一个编译器来首先编译出一个gcc,但是CentOS5.4的默认gcc版本过旧,必须要求最低4.4版本才行。依然尝试下载对应的rpm包,然后需要注意的是,这些包可能存在依赖,所以需要运行命令rpm -Uvh --test *.rpm来查看是否已经安装,否则仍然需要手动安装。我正是因为libstdc++44-devel-4.4.0没有安装导致耽误了两天的时间。具体的包如下:

libstdc++44-devel-4.4.0 gcc44-4.4.0 gcc44-gfortran-4.4.0 gcc44-c++-4.4.0

安装glibc的时候,官方指南有一句提示:

before this, you may want to brew edit glibc to produce compatibility for your particular kernel, for example:
“–enable-version=2.6.18”

我并未搞懂--enable-version参数的作用,只是在查找glibc编译选项时,看到需要开启对应内核的支持--enable-kernel=

剩下的安装过程可以参考官方指南,大体流程就是先编译出gcc,再编译glibc,然后重新编译依赖这个glibc的gcc,完成整个编译工具链,最终安装基础的软件包,安装ruby、git替换原有的库。

此外安装Git的依赖选项homebrew/dupes/tcl-tk过程中还有有一个小意外,参考(https://github.com/Homebrew/linuxbrew/issues/369) ,brew install tcl-tk --without-tk

最后ruby安装的时候报错,就先凑合着用rvm吧,可能后面再过一阵子fixbug就好了

其他小问题

  1. 旧版git会遇到各种HTTPS的问题,例如提示git 证书问题

git config –global http.sslVerify false

  1. 安装时候提示tmp目录问题

Error: parent directory is world writable, FileUtils#remove_entry_secure does not work; > abort: “/tmp/homebrew20160101-27874-8ry2dn” (parent directory mode 40777)

参考链接 (https://github.com/Homebrew/homebrew/issues/39475) 设置export HOMEBREW_TEMP=~/.tmp/,或者修改文件~/.linuxbrew/Library/Homebrew/config.rb内的temp内容

  1. 下载问题

下载不稳定,所以经常无法下载,可以手动下载然后把文件放到~/.cache/Homebrew下,如果没有正常识别出缓存的话,可以本地搭个简单的http服务器(python -m SimpleHTTPServer),然后brew edit package去修改下载链接

使用zsh

安装zsh后,自动安装oh-my-zsh会出现检测不到zsh的问题(当然是因为不在默认的shell路径中了),需要手动下载这个安装脚本,并且设置其中的CHECK_ZSH_INSTALLED为1。因为没有权限切换默认的shell,所以基本是不能用zsh的,不过有个曲线救国的方法,就是安装tmux并且让tmux启动时自动调用zsh,以后每次启动tmux就启动调用zsh。设置方法为在文件.tmux.conf中写入:

1
set-option -g default-shell ~/.linuxbrew/bin/zsh

后续更新记录

Linuxbrew更新情况

2016年四月Homebrew和Linuxbrew都进行了目录结构的更改,将原有的包分割成了brew和Homebrew-core两个包,需要进行重新调整。

新的安装方法

最新的Homebrew已经不再需要上述如此复杂的方法了,可以参考最新的安装方法(https://github.com/Linuxbrew/brew/wiki/CentOS6) ,通过HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_BUILD_FROM_SOURCE=1 brew install gcc --without-glibc 进行安装编译,但是其他的依赖安装仍然需要同样的方法进行设置。

不在支持CentOS5旧版本

最新的glibc-2.23要求linux内核至少为2.6.16,因此最新的Linuxbrew已经无法安装再CentOS5的旧版本。如果硬要安装,个人感觉可以搜索homebrew-core的glibc为2.19历史版本覆盖最新的homebrew-core来进行安装,但是我因为gmp编译问题,并未安装成功。

总结

为了能够在自由安装软件也是醉了,折腾了好久,不过安装完毕后,也是非常舒服的。

在Linux/Mac上经常要使用各种软件库来下载资源,但是这些资源链接经常被墙,或者速度较慢,因此需要改用国内的镜像站点来加快速度。

常见开源镜像站点

这些站点包含常见各种的Linux软件源。

中国科技大学开源镜像
清华大学开源镜像
阿里云开源镜像

其中中国科技大学使用的是https,因此在大多数情况下推荐使用(2016年底科大源曾长期处于不稳定状态,目前已经恢复),阿里云镜像适合阿里云的服务器使用,可以免流量且速度快。

具体一些推荐配置

python

网上大多推荐豆瓣的源,但是豆瓣的源仍然是http协议,新版pip会提示警告,所以还是换成科大源吧(除非是低版本Linux不支持https链接)。此外,使用阿里源还遇到过几次同步不及时的问题。

node

推荐使用阿里源,主要是提供额外的cnpm命令,可以方便的安装。

Ruby

淘宝的Ruby镜像已经改由Ruby-China维护,所以请使用Ruby-China的镜像

1
2
3
4
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem sources -l
https://gems.ruby-china.org
# 确保只有 gems.ruby-china.org

Android

使用腾讯Bugly镜像,将Android SDK Manager的代理设置为android-mirror.bugly.qq.com:8080

homebrew

homebrew自身内容是放在github上的,如果更新速度慢,可以换成清华的镜像

1
2
$ cd /usr/local
$ git remote set-url origin git://mirrors.tuna.tsinghua.edu.cn/homebrew.git

homebrew-science或者homebrew-python也可以参考其页面进行修改。不过如果不是处于极其艰难的情况,不建议改这个,因为无法确保各个的软件包的hash未被篡改。

homebrew大多数的软件源都是在homebrew.bintray.com上的,速度同样非常慢,有人也做了份国内镜像。

设置环境变量:

1
export HOMEBREW_BOTTLE_DOMAIN=http://7xkcej.dl1.z0.glb.clouddn.com

Docker Hub

国内基本斗士要注册的,科大源有个反向代理,因为Docker配置比较麻烦,请具体参考Docker镜像使用帮助

pyenv

同样设置环境变量

1
export PYTHON_BUILD_MIRROR_URL="http://pyenv.qiniudn.com/pythons/"

注意事项

对于这些第三方源,并不能完全保重其安全性,所以会存在一定的风险下载到经过篡改的软件包。

更新

2017.01.21 更新多条源记录

虚拟机监控部分

Agent

主要功能:

使用SimpleXMLRPCServer建立一个服务器监听Cuckoo发送的数据。

dll注入

使用了远程DLL注入技术,

参考文档远程DLL注入技术

监控

系统基础设置

字体

利用MacType渲染字体,一直比较喜欢使用系统默认的雅黑字体,有人对雅黑字体进行了修改,将其和Consolas结合优化。作者时RobertLee,原文链接是雅黑-Consolas混合字体,2008年5月22日更新~,貌似很少有贴作者信息的。

常用软件

Total Commander

文件夹命名使用”数字+中文拼音首字母+中文描述”,Ctrl+Q快速预览文件

CCleaner

Altrun/ALMRun

快速启动软件,前者好长时间没有更新了,可以使用后者替代

Everything

不解释

KeyTweak

用于将CapsLock键和右Ctrl键交换,将Ctrl键放到更加容易接触到的位置。

编辑工具

Vim

使用spf-13配置,比较方便,虽然同时也会有很多坑,需要自己慢慢修改。但是插件无法后台运行,因此速度比较慢。

Notepad++

用于替代记事本的轻量级编辑器

Sublime Text

有Vim模式,运行速度相对VIM快,但是编码比较头疼,在Windows下面我会用来替代Vim

编程工具

Visual Studio 2013

基本设置:选择深色主题,开启多处理器编译,开启行号

常用插件:

  • Visual Assist X: 不解释

注:Visual Assist X最新版无法直接搜索到VC6的安装路径,需要在注册表中HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App Paths\msdev.exe指定实际路径。这有可能是绿色版导致的。

参考http://tunps.com/newest-vax-support-on-vc-6

  • VsVim: 我是VIM党

  • Disable Mouse Wheel Zoom: 禁用滚轮缩放代码

  • TroutZoom: 固定代码缩放比率

Eclipse设置

基本设置:开启行号

常用插件:

  • Eclipse Color Theme: 配色很重要

  • viPlugin: 我是Vim党

0%