这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特出来与博友们学习,希望您喜欢,一起进步。前文了Vulnhub靶机渗透题目bulldog,包括信息收集及目录扫描、源码解读及系统登陆、命令注入和shell反弹、权限提升和获取flag。这篇文章将讲解逆向分析之OllyDbg动态调试工具,包括INT3断点、反调试、硬件断点和内存断点。基础性文章,希望对您有所帮助。 作者作为网络安全的小白,一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,、评论、私聊均可,一起加油喔~ PS:本文参考了github、安全网站和参考文献中的文章(详见参考文献),并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。 作者的github资源: 声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。 前文学习:
前文欣赏: INT3断点对应OD中的F2断点,有时也称为CC断点。为什么叫CC断点呢?因为转换成硬编码之后就是CC,我们来查看CC断点。 首先,我们用OD打开程序TraceMe.exe 打开之后会自动定位至004013A0,接着再下一行增加断点(按F2),即INT3断点。 但OD中并没有显示CC,我们打开Cheat Engine软件。 然后在OD按下F9运行,弹出如下图对话框。 接着在CE中选择该程序TraceMe打开。 然后点击“手动加入地址”,输入地址“4013A1”。 接着选中数据并右键点击“显示未十六进制”。 由于采用小端存储,故“FF6AECCC”是从右往左数的,如下图所示。 如果我们选择“4字节”点击,然后选择“Byte”,可以转换成1个字节,因为CC就占用一个字节,我们主要是观察它的。 为什么OD不显示CC呢? 接着我们分析INT3的原理。程序运行中,OD会检查汇编指令有没有INT3,即机器码有没有CC指令。如果存在,就会引发并捕获这个异常,程序就中断在此处,然后OD会删除INT3,还原原来的代码,接着继续运行我们的程序。 执行流程的原理可归纳为: 优点: 缺点: 为什么要详细介绍断点的原理呢? 接下来我们举个INT3断点的例子,使用OD打开TraceMe.exe程序,设置API断点。 这里勾选“GetDlgItemTextA”函数。 接着输入用户名和序列号,按F9运行程序。 代码会停在“761F4390”位置,我们接着用CE看看它是不是CC断点。 接着以十六进制显示,并只显示一字节,发现的确是CC断点。所以,CC断点很容易被检测出来。 我们编写的软件被爆破时,总会被下INT3断点,我们能不能写个程序防止别人下CC断点,从而保护我们的程序呢?这个就叫反调试,而反反调试是绕过保护过程。 基础知识: 接着我们用VS编写代码讲解。LoadLibrary函数会返回一个句柄,然后调用GetProcAddress函数。GetProcAddress返回值包括:
第一步,我们打开VS编写C++代码。
下列代码是获取MessageBoxA函数的首地址,并判断是否为CC断点。 在VS中输入上述代码。
第二步,运行前,需要简单设置。
第三步,接着运行代码 显示代码正常执行。
第四步,使用OD调试程序 OD打开如下图所示: 然后点击“插件”->“API断点设置工具”->“常用断点设置”,给MessageBoxA下断点。 运行OD,断点位于761E0F40位置,对应user32.MessageBoxA。 继续运行代码。 查看调试信息,发现检测到非法调试,也表明我们的判断没有问题。
第五步,删除断点对比执行结果 发现代码正常运行。
这就是一个INT3断点的反调试过程。 我们进入函数之后,可以将断点下到中间或尾部即可。OD重新打开程序,并找到MessageBoxA的位置。 我们在中间位置下断点,如下图所示 761E0F45处。 接着F9运行程序,发现此时输出“代码正常”,该断点并没有被检测出来,这就是所谓的反反调试。 硬件断点和调试寄存器有关,共有8个调试寄存器DR0~DR7。 原理: 优点: 缺点: 接着我们继续用OD分析TraceMe.exe为例,打开之后定位至004013A0位置。 选择004013B6位置,右键“断点”->“硬件执行”。 这样就增加了一个硬件断点,当CPU运行到该地址会发送一场信息中断。 如何查看硬件断点呢?点击“调试”->“硬件断点”可以查看刚打的硬件断点。 接着按下F9运行程序,它会停在硬件断点位置。 在介绍内存断点之前,首先需要知道什么是内存属性。内存属性包括Read、Write、Execute的组合,即可读、可写、可执行。比如VirtualProtectEx函数,可以改变在特定进程中内存区域的保护属性。 内存断点就是根据内存属性来实现的,比如想对一个地址打个内存访问断点,就是把这个地址的内存属性改为不可访问(不可读写执行),当程序运行到此处时,就会产生一个异常被OD捕获,从而中断程序。 原理: 优点:
接下来我们想在004013D0位置代码增加内存断点,对应代码: 该代码就是一个写操作,edx往ds:[0x405528]中写入一个值。 选择数据窗口中跟随。 然后再数据窗口中选择4个字节,右键“断点”->“内存写入”或“内存访问”。 然后按下F9运行,此时断到了此处。证明我们内存写入断点已经生效。
接下来补充内存读写断点和硬件读写断点的区别。 以刚才的代码为例,我们先删除刚才的内存断点。 接着OD重新打开EXE程序,数据窗口跟随到405528。 选中4字节,设置其为“硬件写入”断点。 运行代码,此时硬件断点断在了下一行位置004013D6。 至此,内存断点和硬件断点介绍完毕! 写到这里,这篇文章就介绍完毕,希望您喜欢~ 这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章,感谢师傅、师兄师弟、师姐师妹们的教导,深知自己很菜,得努力前行。 欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。 (By:Eastmount 2020-05-13 中午12点写于贵阳 https://blog.csdn.net/eastmount/ ) 参考文章:
同时建议先看前一篇文章:逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析文章目录
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其他工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
逆向分析:https://github.com/eastmountyxz/Reverse-Analysis-Case
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通信(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防御初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防御原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防御原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(三)
[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
[网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
[网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
[网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
[网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
[网络安全自学篇] 三十七.Web渗透提高班之hack the box在线靶场注册及入门知识(一)
[网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
[网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
[网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
[网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
[网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
[网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
[网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制作(自启动、修改密码、定时关机、蓝屏、进程关闭)
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客常用DOS命令
[网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取
[网络安全自学篇] 五十五.Windows漏洞利用之构建ROP链绕过DEP并获取Shell
[网络安全自学篇] 五十六.i春秋老师小白渗透之路及Web渗透技术总结
[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
[网络安全自学篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反弹shell
[网络安全自学篇] 五十九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及shell深度提权
[网络安全自学篇] 六十.Cracer第八期——(2)五万字总结Linux基础知识和常用渗透命令
[网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
[网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
[网络安全自学篇] 六十三.hack the box渗透之OpenAdmin题目及蚁剑管理员提权(四)
[网络安全自学篇] 六十四.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现及详解
[网络安全自学篇] 六十五.Vulnhub靶机渗透之环境搭建及JIS-CTF入门和蚁剑提权示例(一)
[网络安全自学篇] 六十六.Vulnhub靶机渗透之DC-1提权和Drupal漏洞利用(二)
[网络安全自学篇] 六十七.WannaCry勒索病毒复现及分析(一)Python利用永恒之蓝及Win7勒索加密
[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析
[网络安全自学篇] 六十九.宏病毒之入门基础、防御措施、自发邮件及APT28样本分析
[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向
[网络安全自学篇] 七十一.深信服之外部威胁防护和勒索病毒对抗
[网络安全自学篇] 七十二.逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析
[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读
[网络安全自学篇] 七十四.APT攻击检测溯源与常见APT组织的攻击案例
[网络安全自学篇] 七十五.Vulnhub靶机渗透之bulldog信息收集和nc反弹shell(三)
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差异备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包
一.常用断点之INT3断点
1.查看INT3断点
其实OD是为了不破坏源代码的完整性,默认隐藏掉了。
2.INT3原理
只有了解每个断点的原理之后,以后做爆破才知道应该下什么样的断点合适。
3.INT3例子
二.INT3断点的反调试与反反调试
它是一个计算机函数,功能是检索指定的动态链接库(DLL)中的输出库函数地址
将指定的模块加载到调用进程的地址空间中
FARPROC GetProcAddress( HMODULE hModule, // DLL模块句柄 LPCSTR lpProcName // 函数名 );
#include <iostream> #include <Windows.h> int main() { //获取MessageBoxA的首地址 FARPROC addr = GetProcAddress(LoadLibrary(L"user32.dll"), "MessageBoxA"); //仅获取首地址的第一个字节 byte byteAddr = *(byte *)addr; //弹框 ::MessageBoxA(NULL, "内容", "标题", MB_OK); //判断地址 if(byteAddr == 0xCC) { //检测到有人在调试我们的程序 退出程序 printf("检测到非法调试"); } else { printf("代码正常"); } getchar(); }
运行结果如下图所示:
接下来我们尝试调试这个EXE程序,用OD打开“ConsoleApplication1.exe”。
接着按下“b”删除断点,继续运行代码。
那么,怎么进行反反调试呢?我们又怎么下INT3断点呢?
三.常用断点之硬件断点原理解析
四.常用断点之内存断点原理解析
mov dword ptr ds:[0x405528],edx
五.总结
1.查看INT3断点
2.INT3原理
3.INT3例子
[1] 动态调试工具之OllyDbg(OD)教程 – B站yxfzedu
[2] [逆向笔记] OD工具使用-逆向TraceMe.exe- 17bdw随手笔记
[3]《加密与解密》段钢等著
[4]《OllyDBG入门教程》看雪学院 – CCDebuger
[5] 160个Crackme006 – 鬼手56大佬
[6] [调试逆向] 硬件断点的原理与实现 – 52PJ VicZ
[7] https://github.com/eastmountyxz/Reverse-Analysis-Case
[8] Cheat Engine 基本用法 – thomas_blog
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算