cygwin与漏洞攻击程序的编译

cygwin与漏洞攻击程序的编译

                             BaiShi   http://baishi.8561.net

 

一.   cygwin

微软视窗下的自由软件cygwin是由已被Red hat收购的cygnus solution开发的自由软件,它是一个在windows平台上运行的unix模拟环境,是一个全功能的Win32应用,它是UNIX应用的一个Porting层,完全兼容于Win32(包括目前使用的Windows 95/98/NT)。该软件项目启动于1995年,主要目的是将GNU开发工具移植到Win32系统上来。

cygnus当初首先把gccgdbgas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin.dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。Windows平台下的C++编译器,基GCC,又完全兼容Window特有的东西,比如对winsock的支持。

Cygwin包含的软件包:
1.
开发包:binutilsbisonbyaccdejagnudiffexpectflexgasgccgdbitclldlibstdc++makepatchtcltixtk等;
 2.UNIX
工具:ashbashbzip2difffileutilsfindutilsgawkgrepgziplessm4sedshellutilstartextutilstime
 3.
各软件包的源程序包。

对于cygwin有如下几种用途

1.学习unix/linux操作环境,在类似 UNIX 的环境工作, 使用常用的 UNIX utilities(可以是 bash shell, 或是在标准的 Win32 command shell),这对必须使用WindowsUnix系统管理员无疑是种解脱。在这方面来说其最大的对手是微软少有的免费的SFUWindows Services for UNIXhttp://download.microsoft.com/download/a/1/c/a1ca7af1-a6e3-46e7-874a-4c5d8c0fb3b7/SFU35SEL_EN.exe

2.unixwindows的应用程序移植,而不必做重大的修改。就如在 UNIX 的标准 build 程序, source configure and make就可以用了。(比如用CygWin+ OpenSSH + Pure-Ftp 替代server-u近一年来server-u狂出数十个漏洞-http://blog.muduo.net/blog.php?job=art&articleid=a_20041201_131804 。当然,这样做也不一定会其到加固安全的作用。Apache就出现过不只一次的不对Unix操作系统和其它衍生平台,只针对非Unix操作系统如WindowsOS2Novell公司的Netware网络操作系统等平台和Cygwin用户的漏洞。)

3.某些特殊的开发工作。

尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。

4. 其他应用。(比如,搭建蜜罐http://demonalex.nease.net/cygwin/index.html
    
    
二. 漏洞攻击程序的编译
    
    

  其实,这也是前面所说的cygwin的第二种用途,对于大虾们在UNIX下编写的C/C++代码,我们需要在UNIX下的C 编译器进行编译。(由于代码编写环境与本地环境的CPU的体系结构可能不同,CPU指令集不同,两者的编译环境就有所不同,有一些与硬件直接相关的代码需要用特定于某一CPU体系结构的汇编来实现。另外,诸多Win32Unix不同特性的代码,如服务和守护进程,消息和型号量,这些都是系统特性决定的机制,无法通过简单源代码移植的。所以,这些源码就只能用GNUgcc编译工具来进行编译、链接,不能直接用在WIN下的编译器编译。)

当然,可以通过VMWareVisusl PC一类的软件,能够虚拟出一台计算机,完整安装Linux系统,以此实现Unix的开发环境。这样Windows有了,Linux也有了。可是,这类虚拟机系统对物理硬件要求很高,且这样系统编译开发出的程序是寄生系统的原生代码,宿主系统不可能执行,反向兼容就成了问题。通俗的讲,寄生系统-虚拟的LINUX下编译的程序在宿主系统-WIN下不可能执行的。

还可以用Windows 上的gcc 的移植版Mingw微软开发的允许WindowsUNIX的计算机之间共享数据、安全信任的SFU 其提供 Interix SDK,其中包含多种用于生成应用程序的工具,如 gcc g++,还包含许多标头文件和库,如 libclibcurses libX11)或Microsoft InterixInterix 子系统已经与 Services For UNIX 整合关于MingwSFU我没有用过,有时间我会去试试,欢迎感兴趣的朋友和我一起交流学习。

要编译成为可在WIN下能够直接执行的程序,应用最广最简单有效的方法是用cygwin,来编译UNIX下编写的C/C++代码,其易用性和有效性在所有 GNU 开发工具的Windows 版中是很显然的 (因为Red hat持续开发cygwin主要目的是将自由软件基金会的GNU开发工具移植到Win32系统上来,是专为程序开发人员设计的,提供的是在 Windows 操作系统下的一个 UNIX 开发环境用来帮助程序开发人员把应用程序从 UNIX/Linux 移植到 Windows 平台当然也可以在Windows平台开发方便移植的UNIX Linux代码,是一个功能强大的工具集。)

其可以在www.cygwin.com下载安装,关于cygwin的安装也不多说了网上有很多相关的文章。主要来说说选择包的安装(嘿嘿,这个也是网上看的拉),因为默认情况下,Cygwin 基本包将不安装 GCC,因此,必须修改默认设置。

将鼠标移动到 Devel 边的加号(+)上,然后点击它展开 Devel 类。

1选择包进行安装

会看到在 Devel 下有许多入口,其中只有三个是您需要的,次序如下:

1.  binutils

2.  gcc

3.  gcc-mingw

不是所有默认的基本包都需要运行 GCC,但它们不太大,因此为简单化,就安装它们。

注意很容易选错包或版本,尤其在重新安装的时候,因为选择窗口中的循环按钮是不标准的。在这一步我们建议的就是多加小心,尤其是有多个 GCC 版本的情况下。

为选择这三个包,点击列 New 中每个双向箭头直到显示每个包的版本号。根据您机器上已安装的以及镜像上所拥有的合适的版本,列入口在各图标间循环:


 如果有多个版本可用,选择数字最大的一个。要下载二进制文件,确保选中了
Bin列的复选框。(当然可以简单的双击“ALL”把Default改变为Install,“全部安装Devel 类”)

安装完毕后,在桌面上会有Cygwin的图标。点击进入环境界面。首先,输入gcc,如果显示“gcc No input files”说明安装成功。将你把要编译的源代码文件也就是后缀名为“.c”文件copyCygwin安装目录的home目录下,在Cygwin  Shell下输入“gcc -o files.exe files.c”进行编译。这样就在Home目录下生成了一个exe文件,该文件要直接在WIN下运行需要将Cygwin1.dll动态连接库文件与编译好的可执行程序放在同一目录下, Cygwin1.dll文件可以在Cygwin下的Bin目录下找到。

----------------------------------------------------
我将Cygwin做为自己在视窗下对UNIX的熟悉的过程,我会继续下去,去接触UNIX。。。它很有趣。

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

附:GCC编译器使用简介。
  通常后跟一些选项和文件名来使用 GCC 编译器。gcc 命令的基本用法如下:
  gcc [options] [filenames]
  选项指定编译器怎样进行编译。

GCC
选项
  GCC 100个编译选项。这些选项中的许多可能永远都不会用到,但一些主要的选项会经常遇到。很多的 GCC 选项包括一个以上的字符,因此必须为每个选项指定各自的连字符。例如, 下面的两个命令是不同的:
  gcc -p -g test.c
  gcc -pg test.c
  第一条命令告诉 GCC 编译 test.c 时为 prof 命令建立剖析(profile)信息并且把调试信息加入到可执行的文件里。 第二条命令只告诉 GCC gprof 命令建立剖析信息。
  没有选项时,GCC 会生成一个名为 a.out 的可执行文件。
  用 -o 编译选项来为将产生的可执行文件用指定的文件名来命名。例如, 将一个叫 count.c C 程序编译为名叫 count 的可执行文件, 要这样输入命令:
  gcc -o count count.c
  -c 选项告诉 GCC 仅把源代码编译为目标代码。缺省时 GCC 建立的目标代码文件有一个 .o 的扩展名。
  -S 编译选项告诉 GCC 在为 C 代码产生了汇编语言文件后停止编译。 GCC 产生的汇编语言文件的缺省扩展名是 .s
  -E 选项指示编译器仅对输入文件进行预处理。当这个选项被使用时, 预处理器的输出被送到标准输出而不是储存在文件里.
  用 GCC 编译 C 代码时, 它会试着用最少的时间完成编译并且使编译后的代码易于调试。 易于调试意味着编译后的代码没有经过优化。必要时,需要让编译器对代码进行优化。
  -O 选项告诉 GCC 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2 选项告诉 GCC 产生尽可能小和尽可能快的代码。 -O2 选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。
  GCC 支持数种调试和剖析选项,常用到的是 -g -pg
  -g 选项告诉 GCC 产生能被 GNU 调试器使用的调试信息以便调试你的程序。GCC 提供了一个很多其他 C 编译器里没有的特性, GCC 里你能使 -g -O (产生优化代码)联用。
  -pg 选项告诉 GCC 在编译好的程序里加入额外的代码。运行程序时, 产生 gprof 用的剖析信息以显示你的程序的耗时情况。


参考:

Windows 中用 GCC 编译 DB2 UDB 存储过程

http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0306haungs/0306haungs.shtml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值