灰帽python之旅4

灰帽python之旅4

ID:37059439

大小:88.51 KB

页数:11页

时间:2019-05-15

灰帽python之旅4_第1页
灰帽python之旅4_第2页
灰帽python之旅4_第3页
灰帽python之旅4_第4页
灰帽python之旅4_第5页
资源描述:

《灰帽python之旅4》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、4PyDBG---纯PYTHON调试器话说上回我们讲到如何在windows下构造一个用户模式的调试器,最后在大家的不懈努力下,终于历史性的完成了这一伟大工程。这回,咱们该去取取经了,看看传说中的PyDbg。传说又是传说,别担心,这个传说是真的,我用人格担保。PyDbg出生于2006年,出生地Montreal,Quebec,父亲PedramAmini,担当角色:逆向工程框架PaiMei的核心组件。现在PyDbg已经用于各种各样的工具之中了,其中包括Taof(非常流行的fuzzer代理)ioctlizer(作者开发的一个针对windwos驱动的fuzzer)

2、。如此强大的东西,不用就太可惜了(Python的好处就是别人有的你也会有)。首先用它来扩展下断点处理功能。接着干些高级的活:处理程序崩溃,进程快照还有将来Fuzz需要用的东西。现在就开工,开工,速度开工!4.1扩展断点处理在前面的章节中我们讲解了用事件处理函数处理调试事件的方法。用PyDbg可以很容易的扩展这种功能,只需要构建一个用户模式的回调函数。当收到一个调试事件的时候,回调函数执行我们定义的操作。比如读取特定地址的数据,设置更更多的断点,操作内存。操作完成后,再将权限交还给调试器,恢复被调试的进程。PyDbg设置函数的断点原型如下:bp_set(a

3、ddress,description="",restore=True,handler=None)address是要设置的断点的地址,description参数可选,用来给每个断点设置唯一的名字。restore决定了是否要在断点被触发以后重新设置,handler指向断点触发时候调用的回调函数。断点回调函数只接收一个参数,就是pydbg()类的实例化对象。所有的上下文数据,线程,进程信息都在回调函数被调用的时候,装填在这个类中。以printf_loop.py为测试目标,让我们实现一个自定义的回调函数。这次我们在printf()函数上下断点,以便读取print

4、f()输出时用到的参数counter变量,之后用一个1到100的随机数替换这个变量的值,最后再打印出来。记住,我们是在目标进程内处理,拷贝,操作这些实时的断点信息。这非常的强大!新建一个printf_random.py文件,键入下面的代码。#printf_random.pyfrompydbgimport*frompydbg.definesimport*importstructimportrandom#Thisisouruserdefinedcallbackfunctiondefprintf_randomizer(dbg):#Readinthevalueo

5、fthecounteratESP+0x8asaDWORDparameter_addr=dbg.context.Esp+0x8counter=dbg.read_process_memory(parameter_addr,4)#Whenweuseread_process_memory,itreturnsapackedbinary#string.Wemustfirstunpackitbeforewecanuseitfurther.counter=struct.unpack("L",counter)[0]print"Counter:%d"%int(counter

6、)#Generatearandomnumberandpackitintobinaryformat#sothatitiswrittencorrectlybackintotheprocessrandom_counter=random.randint(1,100)random_counter=struct.pack("L",random_counter)[0]#Nowswapinourrandomnumberandresumetheprocessdbg.write_process_memory(parameter_addr,random_counter)ret

7、urnDBG_CONTINUE#Instantiatethepydbgclassdbg=pydbg()#NowenterthePIDoftheprintf_loop.pyprocesspid=raw_input("Entertheprintf_loop.pyPID:")#Attachthedebuggertothatprocessdbg.attach(int(pid))#Setthebreakpointwiththeprintf_randomizerfunction#definedasacallbackprintf_address=dbg.func_re

8、solve("msvcrt","printf")dbg.bp_set(print

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。