Linux黑客的python编程之道

所需积分/C币:9 2017-10-13 21:49:54 1.1MB PDF
18
收藏 收藏
举报

作者花了很多事件讲解调试器,因为调试器就似乎hacker 的手术刀:从第二章调试原理, 第五章Immunity 的应用和扩展,到第六章和第七章的hooking 以及注入技术的介绍(用于内 存的控制和处理)。 本书的第二部分就是对fuzzers 的介绍。第八章会讲解基础的fuzzer 原理,并且构建一 个简单的file fuzzer。第九章,介绍强大的Sulley fuzzing 框架,并且使用它fuzz 一个真正 的FTP 服务器。第十章,学习构建一个Windows 驱动fuzzer。 第十一章,介绍IDA(最常用的静态反汇编工具)的Python 扩展。十二章,详细讲解 PyEmu,一个基于P
这章我们会简单的讲解, Python25的安装, Eclipse配置,以及如何编写C兼容的 Python 代码。 就逆向的趣味性而言, Windows是最好的目标。无数的工具和广泛的使用人群,使得代 码廾发和 Crack都变得更容易,所以木书的大部分代码都基」 Windows(任何你能搞的到的 Windows版本) 少部分例了也能运行在32位的 Linux上。无论是安装在 VMware( VMware提供免费版 本,不同为版权担心)上还是实机上,都行。 Linux版本众多,本书推荐基于 Red hat的发布半 台: Fedora Core7 or Centos5。 VMWARE Marc在网站上提供了免费的版本。这些虚拟机用于逆工程,漏洞分析,或者任何 程序的调试,同时和主机完全独立廾来。 主稈序下载链接htt:/Www.vmware.com/appliances/, Prayer程序下载链接htp:/www.vmware.com/products/player 12 Python.5 Linuxer可以跳过这个步骤,大部分 Linux都內置了 Python。 Windows下可以通过独立 的安装包进行安装 12.1 Windows Python Windows的安装版本可以从 Python主页上下载htt python。org/ftp/ python./2.5.l/ python-2.5.mnsi。双击,一步一步的按指示安装就行。在默认的 主目录C: Python25/下,安装了 python. exe和默认的库 提示建议大家安装 Immunity调试器,其包含了很多必须的附加程序,其中就有 Python 25。在后面的章节中,我们也会使用到 Immunity。下载页面 htp:! debugger. immunityinc:com(要用代理还要填写些资料)。 12.2 LLinux Python 如果需要在 Linux上手工安装 Python的话,可以按如下的步骤进行。这里使用 Red hat 的衍生版,并且这个过程使用root权限。 第一步,下载 Python2.5源码并解压: cd /usr/local/ #wgethttp:/python.org/ftp/python/2.5.i/python-2.5.1.tgz tar -ZXvf Python-2.5.1.lgz mv Python. 5. 1 Pvthon25 cd python25 代码解压到 Isr/local/ Python25之后,就要编译安装了 # / configure -prefix=/usr /local/Python25 make & make install #f pwd /usr/local/ Python25 python Python2.1(r251:54863,Mar142012,07:39:18) IGCC 3.4.6 20060404(Red hat 3.4.6-8)on Linux2 Type help", "copyright"," credits" or"license"for more information 现在我们就拥有了个交互式的 Python Shell,能够自由的操作 Python和 Python库了 输入个语句测试下 >> print"Hello World! Hello world! >> exite 很好!-切工作正常。为了让系统能够找到 Python计吋器的路径,需要编辑/ root /bashrc 文件(用户名/ bashrc)我个人比较喜欢nano,不过你可以使用你喜欢编辑器(个人推荐vim嘿 嘿)。打开/ root/ bashrc,在文件底部加入以下代码 export PATH=/usr/local/ Python25/: SPATH 这样每次执行 python命令的时侯,就不用输入完整的 python路径了。下次用root登录 的时候,就在任何shel下输入 python就能得到一个交互式的 Python Shell了。 为了方便的开发代码,下面让我们配置自己 IDE(ntegrated development environment) (我的开发环境如下 ActivcPvthon, UliPad或者 Script. NET, ipython或者 bpython。调试,自动 提示,参数说明全都有了。) 1.3 Eclipse PyDev 为了快速的的开发调试 Python程序,就必须要使用一个稳定的IDE半台。这里作者推 荐的时候 Eclipse(跨平台的IDE)和 PyDev。 Eclipse以其强大的可定制性而出名。下面让我们 看看和安装和凰置它们 1从htp;/ww: eclipse。org/ downloads/下载压缩包 2解压到C: eclipse 3运行C: Eclipscicclipsc.cxe 4第一次运行,会询问在哪里设置工作区的主目录;使用默认的就行,将 Use this as de faull and do not ask again勾上,点击OK。 5 Eclipse安装好以后,选择 Help Software Updates Find and Install 选择 Search for new features to install然后点击Next 7点击 New remote site 8在Name后面填上 PyDev Update,在URl后面填上htt: pydev. sourceforge. net/updates, 点击OK确认,接着点击 Finish, Eclipse会自动升级 PyDev 9过一会儿,更新窗凵就会出现,找到顶端的 PyDev Update,选上 PyDev,单击Next继 步 10阅读PyDv协议,如果同意,在 I accept thc tcrms in the liccns agrecment选上。 11单击Next,和 Finishe eclipse开始安装PyDe扩展,全部完成后,单击Istl!Al 12最后一步,在 PyDev安装好之后,单击Yes, eclipse会重新启动并加载PyDv 使用如下步骤軋置 Eclipse,以确保 PyDev能正确的调用 Python解释器执行脚木, Eclipse驱动后,选择 Window preferences 2.扩展 PyDev,选择 Interpreter 3.在对话框顶端的 Python Interpreters中点击New 4.浏览到C: Python25 python.exe,然后点击Open 个对话框将会列出 Python中已经安装了的库。 6.再次点击OK完成安装。 在开始编码前,需要创建一个Pyev工程。本书的所有代码都可以在这个工程中打开。 1.依次选择File->New-> Projcct 2.展开PyDe选择 PyDev Project,点击Next继续 3.将工程命名为 Gray Hat Python.点击 Finish Eclipse窗口自动更新之后,会看到 Gray Hat Python工程出现在屏幕左上角。现在石击 sec文件夹,选择New-> PyDev Module。在Name字段输入 chapterl-test,点击 Finish。就会 看到,工程面板被更新了, chaptcrl- tcst. py被加到列表中。 在 Eclipse中运行 Python脚本,重要单击工具栏上的 Run as(由绿圈包围的白色箭头)按 钮就行了。要运行以前的脚本,可以使用快捷键 CTRL-F11。脚本的输出会显示在 Eclipse 底端的 Console面板。现在万事俱备只欠代码 1.3.1 hacker :ctypes ctypes是强大的,强大到本书以后介绍的几乎所有库都要基于此。使用它我们就能够调 用动态链接库中函数,同时创建各种复杂的C数据类型和底层操作函数。毫无疑问, types 就是本书的基础。 132 使用 ctypes的第一步就是明白如何解析和访问动态链接库中的函数。一个 dynamically linked library(被动态连接的库)其实就是一个二进制文件,不过一般自己不运行,而是由别 的程序调用执行。在 Windows上叫做 dynamic link libraries dll动态链接库,在 Linux上叫 做 shared objects(SO)共享库。无论什么平台,这些库中的函数都必须通过导出的名字调用, 之后再在内存中找山貞止的地址。所以止常情况下,要调用函数,都必须先解析出函数地址, 不过 ctypes替我们完成了这一步。 types提供了三种方法调用动态链接库:cdl).wind),和 oleds()。它们的不同之处就在 于,函数的调用方法和返回值。cdlO加载的库,其导出的函数必须使用标准的cdcl调用 约定。wind(方法加载的库,其导出的函数必须使用 stdcall调用约定(Win32API的原生约 定)。 olesno方法和 windle类似,不过如果函数返回一个 HRESULT错误代码,可以使用 COM函数得到具体的错误信息。 调用约定 调用约定专指函数的调用方法。其中包括,函数参数的传递方法,顺序(压入栈或 者传给寄存器),以及函数返回时,栈的平衡处理。下面这两种约定是我们最常用到的 cdecl and sidcall cdec调用约定,数的参数从右往左依次压入栈内,函数的调用者, 在睬数执行完成后,负责函数的平衡。这种约定常用于x86架构的C语言里。 In c int python rocks(reason one, reason two, reason three) In x86 Assembly push reason three push reason two push reason one call python rocks 12 从上面的汇编代码中,可以清晰的看岀参数的传递顺序,最后·行,栈指针增加了 12个字节(三个参数传递个函数,每个被压入栈的指针都占4个字节,共12个), 使得函数调用之后的栈指针恢复到调用前的位置。 下面是个 stdcall调用约定的了例子,用于Win32API。 In c int my socks(color one color two, color three) In x86 Assembly push color three push color two push color one call my socks 这个例子里,参数传递的顺序也是从右到左,不过栈的平衡处理出函数 my socks 自己完成,而不是调用者。 最后一点,这两种调用方式的返回值都存储在EAX中。 下面做个简单的试验,直接从C库中调用 printi()函数打印·条消息, Windows中的C库 位于C: WINDOWSISyStem32 msvcrt. dl, Linux中的C库位于/ lib/libc.so.6。 chapterl-printf py Code on Windows from ctypes import msvert= cdll msvcrt message string="Hello world! n Imsvcrl printr( testing: %s", message string) 输出结果见如下: C: Python25> python chapterl-printf py Testing: Hello world! C: Python25> Linux卜会有略微不同: chapterl-. py Code on Linux from ctypes import求 libC= CDllolibCSo 6") mcssagc string ="Hcllo world! n" libc. printf( Testing: %os", message string) 输出结果如下 python/root/chapter l-printf py Testing: Hello world! # 可以看到 ctypes调用动态链接库中的函数有多简单 133 C 使用 Python创建一个C数据类型很简单,你可以很容易的使用由C或者C++些的组件。 Listing l-1显小三者之间的对于关系 C TyPe Python Type ctypes Type racter string h wchar t I-charactcr Unicode string c wchar Int/long c byte aI ong short c short unsigned short int/long c ushort g unsigned int int/long c uint ong g unsigned lon int/on c ulong ong long int/long c longlong unsigned long long int/long c ulonglong float float double float c double char *(NULL terminated) string or none c char p wchar L*(NULL terminated) unicode or none c wchar p int/long o oid Listing11 Python与C数据类型映射 请把这章表放到随时很拿到的地方。 ctypes类型仞始化的值,大小和类型必须符合定义 的要求。看下血的例子。 C: Python25> python. exe Python25(r25:51908,sep192006,09:52:17)[MSCv.131032bt(ntel) on win32 Type", "copyright","credits"or" license"for more information > from types import >>>cnt() c long(o) >>>c char p( Hello world! c char p(Hello world!) >>>c ushort(-5) c ushort(65531) Di>i>c short(-5) short(-5) >>> seitz=c char p("loves the python") >>> print seitz c char p(loves the python) >>> print seitz. value loves the python exito) 最后一个例子将包含了" oves the python"的字符串指针赋值给变量seiz,并通过 sci. valuc方法间接引用了指针的内容, 13.5 结构和联合是非常重要的数据类型,被人量的适用于WIN32的API和 Linux的lbc中 个结构变量就是组简单变量的集合(所有变量都占用空间)些结构内的变量在类型上没 有限制,可以通过点加变量名来访问。比如 beer recipe. amt barley,就是访问 beer recipe结 构中的 amt barley变量 struct beer recipe int amt barley Int amt water I Py thon class beer recipe(structure) ficlds =D imt barle (amt water",c int) 如你所见, ctypes很简单的就创建了一个C兼容的结构 联合和结构很像。但是联合中所有变量同处一个内存地址,只占用一个变量的内存空间, 这个空间的大小就是最大的那个变量的大小。这样就能够将联合作为不同类型的变量操作访 unIon ong barley int: har barley char[8 ,barlcy amount In Python class barlcy amount( Union) field (barley long",c long), barley int",c int) ("barley char",c char*8), 如果我们将一个整数赋值给联合中的 barley int,接着我们就能够调用 barley char,用 字符的形式显示刚才输入的66。 chapterl-unionspy from ctypes import x class barley amount Union) ficlds=[ barley long c long). int", c int),

...展开详情
试读 127P Linux黑客的python编程之道
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 分享宗师

关注 私信
上传资源赚钱or赚积分
最新推荐
Linux黑客的python编程之道 9积分/C币 立即下载
1/127
Linux黑客的python编程之道第1页
Linux黑客的python编程之道第2页
Linux黑客的python编程之道第3页
Linux黑客的python编程之道第4页
Linux黑客的python编程之道第5页
Linux黑客的python编程之道第6页
Linux黑客的python编程之道第7页
Linux黑客的python编程之道第8页
Linux黑客的python编程之道第9页
Linux黑客的python编程之道第10页
Linux黑客的python编程之道第11页
Linux黑客的python编程之道第12页
Linux黑客的python编程之道第13页
Linux黑客的python编程之道第14页
Linux黑客的python编程之道第15页
Linux黑客的python编程之道第16页
Linux黑客的python编程之道第17页
Linux黑客的python编程之道第18页
Linux黑客的python编程之道第19页
Linux黑客的python编程之道第20页

试读结束, 可继续阅读

9积分/C币 立即下载