02 快速定位关键点并爆破

news2024/11/26 5:58:03

vm所进行的代码级的保护是对于软件保护的最后一层

1、API断点法

如何切换到程序的代码节的位置?

》od点击e->双击xxx.exe即可

程序需要读取文本框输入的内容,所以肯定会调用GetWindowText函数,所以可以ctrl+g然后输入GetWindowText进行下断

》但是有个问题就是稍微碰一下界面它就会卡死,一直断下来,因为他会渲染,一直刷新控件(你想啊,它进行界面渲染肯定也需要知道文章才能渲染呀,那它怎么知道edit里面的文字是什么?》也是通过的getwindowstext获取的啊!!!)》所以如果标签比较少的话,我们可以给他下条件断点,也就是把这个标签窗口的句柄给他排除出去(按钮事件被其他事件干扰到)

下条件断点:shift+f2 》[esp+4!=0x00290642]

这样只有我们点击注册按钮才会断下程序,现在断下来的情况就是读取我们编辑框的内容了

读取注册码》判断注册码是否合法》提示窗口

》直接ctrl+f8自动步过,直到程序卡住在cal xxx(其实就是messagebox等待我们点击) 

然后我们编辑标签:对准call点击鼠标右键,修改他的标签,因为他会全部修改,所以有可能就能顺藤摸瓜往前翻一翻找到提示成功的call

如果条件断点断不下来!!!: 

od汉化版bug之一 》汉化版bug之一:换成英文原版即可

 把条件断点删掉,然后在函数头部打一个断点

找到关键爆破点!!!!-> je jmp(je跳到jmp的下面)

也叫关键跳:

2、字符串搜索法

全部搜索一遍,它会自动把这些搜索到的字符串添加注释,可以对破解起到提示的作用,所以一定要养成随手搜索字符串的习惯!

但是有些时候会出现搜索不到字符串的情况出现

》od搜不到不代表其他工具搜不到,可以使用ida来进行搜索

在ida当中:view -> opensubview -> strings -> ctrl+f进行搜索,但是ida默认不支持中文搜索:右键ida属性 -> 快捷方式 -> 目标后面加上-dCULTURE=all

这样相当于给了ida一个启动的属性,就不用在命令行反复输入指令了

有些时候需要来回切换编码格式才能有效地进行逆向

ida里的交叉引用:

点击搜索到的字符串,进入如下界面,然后点击unk_480911,按下x键,进入交叉引用界面,然后直接双击进去,可以进入引用字符串的那部分函数的位置

如何保存在od当中修改后的文件?

然后点击全部复制,之后会弹出下面的这个框:

然后选中修改的区域,右键,保存文件,改成破解后xxx.exe即可

如何处理随机基址的问题?

有时候我们运行别人vs或者什么编写的软件,每次进来的时候,点击e,会发现模块的基地址会发生变化 》这是连接器干的好事,如何去除随即基址?

使用PE工具CFF:打开 》可选头 》dllcharacter 》把dll can move属性去掉 》保存,就🆗了

这样每次打开,模块就都是同一个基地址了

编写代码的时候如何规避?

3、alt+k暂停法

输入注册码,点击注册,然后点击暂停,点击K,查找函数的调用堆栈

调用堆栈怎么来的?使用微软提供的dbghelp.dll来加载调试包和打印调用堆栈

在堆栈当中push一个数据,然后是层层往上面垒的 

4、内存访问断点

在od中文搜索引擎当中搜不到的字符串,比如关键的“注册失败”,但是在内存当中不一定搜不到

点击M,查找:注册失败 

它的提示消息的旁边放的就是注册码,有些网络验证就是这样找的

在字节开始的位置下内存访问断点 

然后一路f8往回跟,同样能够找到关键破解位置 

5、硬件访问断点

先把刚刚的内存访问断点删除

但是点击注册,为什么没有断下来?

是因为od里面的反反调试插件导致的,od本身其实可以断下来的,让我们误以为是因为软件加了反调试的原因而走错了方向,但是其实是你自己的od本身出了问题。有的是汉化版的问题,有的是插件的问题。

换成x96dbg:

 

再下硬件访问断点:

之后顺利断下来了,证明是od的问题,而不是软件带有反调试 

所以以后遇到这种情况,也要考虑调试器的问题,一个搞不定,就换一个调试器试试

x64dbg修改后如何保存?

右键》补丁》修补文件》另存为:破解版.exe即可 

dbg版本为何要jmp到函数入口点?

》增量链接,方便以后修改

怎么找控制台程序的通用的入口点?

自动步过到停下来为止

然后f7进去,继续自动步过到停下来为止

最终我们会找到main函数(要记得先搜索字符串,这样便于确定)

od里面有时候程序会假死,还没打印字符串程序就卡死了

我们只需要点T,把所有线程恢复就好了 

自动跟踪停下来的条件?》因为程序里面写了一个scanf所以自动步过会停下来

使用自动步过来分析易语言程序,分析vm的时候也同样会用到

好的,今天的学习就到这里了,喜欢的话多多点赞+收藏+关注哦!我们下期再见!❤❤❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT 和 Elasticsearch:分面、过滤和更多上下文

作者:Luca Wintergerst 在最近的一篇博客文章中,我们讨论了 ChatGPT 和 Elasticsearch 如何协同工作以帮助更有效地管理专有数据。 通过利用 Elasticsearch 的搜索功能和 ChatGPT 的上下文理解,我们演示了如何改进结果。 在这篇文章中&#…

制造业数字化转型难?低代码带来曙光

概要:制造业企业在数字化转型中一直面临着许多困难和挑战,中小企业更是如此。天翎低代码平台通过自身可视化设计、私有化部署、灵活性、扩展性和兼容性等特性,帮助制造业企业更好地完成数字化转型目标。不仅如此,天翎还推出了微鳄…

iview tree树形控件多选,自定义内容

项目中需要一个iview框架的树形控件,需要里面包含以下功能 1、控件宽度可展开,可缩小2、树形控件可搜索,并且定位到搜索的节点3、控件可以一键勾选,一键取消4、控件图标自定义5、 点击最后一个节点时可以进入到二级节点,点击上一节点可返回完整代码:listToTree文件 效果图: 具…

标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜

标准模版库 https://blog.csdn.net/shaozheng0503/article/details/129101932?ops_request_misc%257B%2522request%255Fid%2522%253A%2522168802585416800211563089%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id1688025854168…

前端判断img图片未能正确加载时显示一个默认图片。img标签onerror事件设置了本地默认图片还是不显示的问题

前端img标签中引用后端交给的图片地址时,有可能这个路径下图片被删除或者损坏了,那么页面在加载img图片时就显示为,太丑了。 img标签有个onerror事件,就是当图片未被正确加载的时候调用此事件,写的时候在onerror事件里…

安装国产系统Kylin-Desktop实战

前言 随着国产化系统的呼声越来越高,再加上今年6月红帽公司发表声明,只有付费才能拿到代码的通告,学习国产化势在必行。 在众多的国产化系统中,我选择了排名比较高的系统,今天我们就一起来安装下麒麟的操作系统 &…

习题-集合框架

目录 1.打印信息 2.ArrayList的使用 User类 测试类 3.Set的使用 汽车类 测试类 4.ArrayList使用 5.新闻 新闻类 测试类 6.返回索引 7.删除重复QQ 8.Map集合操作 9.成绩排序 学生类 测试类 10.Map基础题 学员类 测试类 11.遍历Map综合-国家名称 12.Collec…

1. Linux手写简单的线程池

目录 一、线程池的概念二、线程池的核心组件三、数据结构设计1、任务队列2、线程池 四、接口设计1、创建线程池2、销毁线程池3、抛出任务的接口 五、实现一个线程池及测试1、测试单生成者——多消费者2、测试多生产者——多消费者3、thrd_pool.h4、thrd_pool.c5、main.c6、thrd…

<C语言> 操作符

1.算术操作符 加法():用于将两个操作数相加。减法(-):用于将第一个操作数减去第二个操作数。乘法(*):用于将两个操作数相乘。除法(/):…

使用JavaScript获取随机数序列

使用Javascript 生成随机数 要在 Javascript 中生成随机数,可以使用 Math 对象的 random() 方法。该方法返回一个大于等于 0 小于 1 的伪随机浮点数。 Javascript中的 Math.random() 函数是一个用于生成随机数的内置函数。 MDN 官方解释 Math.random() 函数返回…

idea常用快捷方式,保姆级!图文并茂【建议收藏】

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 给大家分享一下idea在开发过程中使用的快捷方式把,可以极大的提升生产力,提高自己的开发速度,需要在开发中不断地使用,…

《Linux操作系统编程》 第十章 线程与线程控制: 线程的创建、终止和取消,detach以及线程属性

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

arcgis-elasticsearch矢量数据导入及索引设计工具

插件说明 插件支持单图层导入和多图层同时导入,依赖elasticsearch包和urlLib包,使用之前请用pip安装,具体的依赖包的requirements.txt文件放在压缩包里面了。 pip install -r requirements.txt插件下载地址:https://download.cs…

DocuSign:在全球电子签名市场具有巨大上涨潜力的SaaS股

来源:猛兽财经 作者:猛兽财经 总结 (1)DocuSign的核心电子签名业务还在持续增长,尽管在疫情后增速有所放缓,但第一季度的收入已经达到了6.61亿美元,增长率为12%。 (2)Do…

Linux:通过wget下载安装mysql数据库(5.7版本)

目前,主要使用的MySQL有5.7和8.0两个版本,在安装上,5.7和8.0版本基本一致,区别只在于配置root密码和远程登陆上不同。本次将以5.7版本作为对象,进行后续安装。 1.wget下载MySQL安装文件 下载完成,得到mysq…

PySpark如何输入数据到Spark中?【RDD对象】

PySpark支持多种数据的输入,在输入完成后,都会得到一个:RDD类的对象RDD全称为弹性分布式数据集(Resilient Distributed Datasets),PySpark针对数据的处理,都是以RDD对象作为载体,即: •数据存储…

ansible实训-Day3(playbook的原理、结构及其基本使用)

一、前言 该篇是对ansible实训第三天内容的归纳总结,主要包括playbook组件的原理、结构及其基本使用方式。 二、Playbook 原理 Playbook是Ansible的核心组件之一,它是用于定义任务和配置的自动化脚本。 Ansible Playbook使用YAML语法编写,可…

Linux 学习记录42(C++篇)

Linux 学习记录42(C篇) 本文目录 Linux 学习记录42(C篇)一、class 类1. 类中的this指针(1. this指针的格式(2. 使用this指针 2. 类中特殊的成员函数(1. 构造函数>1 格式/定义>2 调用构造函数的时机>3 构造函数的初始化列表 (2. 析构函数>1 功能/格式>2 析构函数…

Redis的数据复制到另一台Redis

Redis的数据复制到另一台Redis 最近用到一个问题,需要把Redis的数据复制到另一台Redis,现在总结下解决问题的方法 解决方法一: redis-dump导出 [root ~]# redis-dump -u :password172.20.0.1:6379 > 172.20.0.1.jsonredis-load导入 [ro…

快速打造属于你的接口自动化测试框架

目录 1 接口测试 2 框架选型​​​​​​​ 3 环境搭建 4 需求 5 整体实现架构 6 RF用例实现​​​​​​​ 7 集成到CICD流程 总结: 1 接口测试 接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程…