灰帽子Python 学习记录 6

本文介绍了使用Python实现软件中断INT3的过程,包括理论原理、实验步骤及遇到的问题解决方法。实验通过设置INT3中断,成功捕获并处理了一个死循环程序中的中断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

啊啊啊啊啊今天搞了一天总算tm搞定了


topic:软件中断INT3


首先回顾一下理论原理。INT3中断就是将断点位置的操作码的第一个字符替换为CC,然后将原来的字符保存起来。这样遇到CC开头的就会停下,等中断处理完后再用原来的字符替换回去。


实验:运行print_loop.py,里面的内容为一个死循环,不断地调用msvcrt里的printf函数打印数据。然后找到printf函数的地址,在该处设置软件中断


这里需要用到的api有:

GetModuleHandle:通过dll的名字来获取模块的handle

GetProcAddress:通过handle以及函数名来找到对应函数的地址

ReadProcessMemory:对目标进程的内存进行读取操作

WriteProcessMemory:对目标进程的内存进行写入操作


然后遇到的问题如下:

1. 一开始attach python.exe的时候,一直报50号错误。原因:我装的python3.4为32位的。cmd里调用的python却是之前装的64位python2.7,而32位调试器是没法调试64位程序的。后来手动把print_loop.py放到python34文件夹下调用解决。

2. printf打印出的什么东西,都是L,嗯嗯,跟前面说的一样,换成wprintf 

3. GetModuleHandleA不能获取handle。哎,又是宽字符你懂的,改成GetModuleHandleW

4. GetProcAddress不能获取函数地址。这个函数没有A和W的后缀,但是输入参数里的函数名也是字符串,所以还是要转化为byte编码,输入为func_resolve("msvcrt.dll",b"wprintf")

5. c_data = c_char_p((data[count.value:])) 报错:

TypeError: bytes or integer address expected instead of str instance

这个搞了我好久,原因还是一样,呵呵,data是输入的一个字符串"\xCC",python3默认宽字符编码,转化为byte编码就行了。b"\xCC"


最后贴一下实验结果:

Enter pid:282432
OpenProcess Successful, HANDLE 512
Get Module Handle 1963786240
Get Address: 0x75147960
[*]Address of wprintf: 0x75147960
[*] Setting breakpoint at: 0x75147960
Event Code: 3 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 2 Thread ID: 266556
Event Code: 2 Thread ID: 271532
Event Code: 2 Thread ID: 292040
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 6 Thread ID: 261240
Event Code: 2 Thread ID: 263080
Event Code: 1 Thread ID: 263080
[*] Exception address: 0x77e68d20
[*] Hit the first breakpoint.
Event Code: 4 Thread ID: 263080
Event Code: 1 Thread ID: 261240
[*] Exception address: 0x75147960
[*] Hit user defined breakpoint.
Event Code: 2 Thread ID: 307348
Event Code: 2 Thread ID: 262828
Event Code: 4 Thread ID: 292040
Event Code: 4 Thread ID: 271532
Event Code: 4 Thread ID: 266556
Event Code: 2 Thread ID: 277180
Event Code: 4 Thread ID: 262828
Event Code: 4 Thread ID: 307348
可以看到它找到了wprintf函数的地址0x75147960,随后捕捉并处理(就是打印了出来)了该位置发生的中断。


今天的6个小时告诉我,用python3的字符串一定要记得转换编码

本书是由知名安全机构ImmunityInc的资深黑帽JustinSeitz先生主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍.老牌黑客,同时也是Immunity Inc的创始人兼首席技术执行官(CTO)Dave Aitel为本书担任了技术编辑一职。本书的绝大部分篇幅着眼于黑客技术领域中的两大经久不衰的话题:逆向工程与漏洞挖掘,并向读者呈现了几乎每个逆向工程师或安全研究人员在日常工作中所面临的各种场景,其中包括:如何设计?构建自己的调试工具,如何自动化实现烦琐的逆向分析任务,如何设计与构建自己的fuzzing工具,如何利用fuzzing测试来找出存在于软件产品中的安全漏洞,一些小技巧诸如钩子与注入技术的应用,以及对一些主流Python安全工具如PyDbg、Immunity Debugger、Sulley、IDAPython、PyEmu等的深入介绍。作者借助于如今黑客社区中备受青睐的编程语言Python引领读者构建出精悍的脚本程序来——应对上述这些问题。出现在本书中的相当一部分Python代码实例借鉴或直接来源于一些优秀的开源安全项目,诸如Pedram Amini的Paimei,由此读者可以领略到安全研究者?是如何将黑客艺术与工程技术优雅融合来解决那些棘手问题的。   本书适合热衷于黑客技术,特别是与逆向工程与漏洞挖掘领域相关的读者,以及所有对Python编程感兴趣的读者阅读与参考。 目录 第1章 搭建开发环境   1.1 操作系统要求   1.2获取和安装Python 2.5   1.2.1 在Windows下安装Python   1.2.2 在Linux下安装Python   1.3 安装Eclipse和PyDev   1.3.1 黑客挚友:ctype库   1.3.2 使用动态链接库   1.3.3 构建C数据类型   1.3.4 按引用传参   1.3.5 定义结构体和联合体   第2章 调试器原理和设计   2.1 通用寄存器   2.2 栈   2.3 调试事件   2.4 断点   2.4.1 软断点   2.4.2 硬件断点   2.4.3 内存断点   第3? 构建自己的Windows调试器   3.1 Debugee,敢问你在何处   3.2 获取寄存器状态信息   3.2.1 线程枚举   3.2.2功能整合   3.3 实现调试事件处理例程   3.4 无所不能的断点   3.4.1 软断点   3.4.2 硬件断点   3.4.3 内存断点   3.5 总结   第4章 PyDbg——WindoWS下的纯Python调试器   4.1 扩展断点处理例程   4.2 非法内存操作处理例程   4.3 进程快照   4.3.1 获取进程快照   4.3.2汇总与整合   第5章 Immunity Debugger一两极世界的最佳选择   5.1 安装Immunity Debugger   5.2 Immunity Debugger l01   5.2.1 PyCommand命令   5.2.2 PyHooks   5.3 Exploit(漏洞利用程序)开发   5.3.1 搜寻exploit友好指令   5.3.2“坏”字符过滤   5.3.3 绕过Windows下的DEP机制   5.4 破除恶意软件中的反调试例程   5.4 1 lsDebuugerPresent   5.4.2 破除进程枚举例程   第6章 钩子的艺术   6.1 使用PyDbg部署软钩子   6.2 使用Immunity Debugger部署硬钩子   第7章 DLL注入与代码注入技术   7.1 创建远程线程   7.1.1 DLL注入   7.1.2 代码注入   第8章 Fuzzing   第9章 Sulley   第10章 面向Windows驱动的Fuzzing测试技术   第11章 IDAPyrhon——IDA PRO环境下的Pyrhon   第12章 PYEmu——脚本驱动式仿真器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值