Windows PE 第一章 熟悉OD(顺便破解一个小工具)
熟悉OD(顺便破解一个小工具)
上一节了解了OD的简单使用,这次就练习下,目标是破解一款小软件(入门练手用的,没有壳什么的)。
首先我们来看一下这个小软件:
我们的目的是输入任何字符串都可以成功注册,达到破解的目的。
这个东西破解方式很多,而且也不是唯一,逆向这东西很多地方都不是固定的,都是靠分析汇编逻辑细节,靠经验,有的时候还要靠猜,当然更需要的就是耐心。
说下我的分析过程:
1.首先看下有没有加壳:
OK 没有进行加壳处理。
2.加载到OD里:
注意左上角的地址,固定基址。
3.找到一个分析的入口,这个很容易想到就是
那么猜测一下:
if(***) 注册成功...
else 注册失败
我们查找注册失败的这个串的调用地址,应该是能找到他这个弹窗函数,这样我们可以看下这个附近有没有注册成功的串,如果有的话,那么可以简单判断应该是在同一个函数里完成的,也就是破解的位置j*这个语句也可能在这个函数里,如果没有看到那个成功串,只看到了注册失败,那么就有可能这是个失败函数,如果是个失败函数也比较好处理。我们在这打上断电,然后调试到ret的位置,这个时候堆栈应该是平衡的,正确的,我们直接看栈里的下一条地址,这个就应该是调用这个函数call
FunError() 的下一条地址,至于为什么,这里就不解释了,汇编基础知识。同时我们还可以不看堆栈,直接在ret打上断点,然后F8就行了,当然也可以直接找到这个函数的最上面,也就是函数地址,这样可以直接查找谁调用过这个函数,然后再一一排除,不过感觉这样效率不高。
OK,继续往下走,我们可以先文档化的搜索下这个字符串在PE文件里的文件偏移位置:
OK 这里看到 文件偏移地址是81A79
在加上这个工具是固定基址:
所以可以简单计算字符串的内存位置是0x00400000+81A79 = 0x00481A79
那我们可以直接在OD里搜索常量:
然后我们可以分析上下文,来找找注册成功的串在不在,如果在就分析这个函数,否则就找调用这个函数的地方去找注册成功后call的那个函数。
结果是就在附近:
那么好办了,直接分析下这附近的汇编代码就行了。我分析了下,内容我写在注释里:
具体破解思路我也写在了注释里。
4.修改指令,保存文件实现破解jg A.00405D11 -> jl A.00405411
最后的破解结果是:
TIP:
最后提示一下,上面我通过找文件偏移地址然后计算字符串内存加载地址,还有另一种方式就是直接OD插件部分一个功能,插件->中文搜索引擎->ASCII直接搜索到注册失败的这个串,然后直接双击那一行会直接跳转到我们搜索计算后的常量的时候的那一行汇编代码出。然后后续分析流程一样。而且这只是其中一种破解思路,比如如果我们发现成功掉函数A
失败掉函数B
那么我们可以在失败Call B处改成
Call A 等等,根据具体情况而求改相关代码。还有,上面的是大体思路,我没有写OD的详细操作细节,比如怎么搜索东西,怎么改汇编代码,怎么保存等,这些都是基础操作我就不写了,很容易搜到。
Windows PE 第一章 熟悉OD(顺便破解一个小工具)的更多相关文章
- Windows PE 第一章开发环境和基本工具使用
第一章 Windows PE 基本工具 1.1开发语言MASM32 1.1.1设置开发环境 这个不细说了,我在整理Intel汇编的时候详细的说了环境搭建以及细节.地址是:http://blog.csd ...
- 决胜Flutter 第一章 熟悉战场
欢迎参加“决胜Flutter” 实训课程,这里是你此次实训之旅的起点. 本章将带您快速了解移动开发的现状,然后向您介绍Flutter的发展历史以及优势特点,最后一起动手,搭建高效的开发环境. 由于Fl ...
- 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法
第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法 第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...
- 从零开始的程序逆向之路 第一章——认识OD(Ollydbg)以及常用汇编扫盲
作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43041-1-1.html 0×00 序言: 1.自从上次笔者调戏完盗取文件密码大黑客后, ...
- Windows PE第九章 线程局部存储
线程局部存储(TLS) 这个东西并不陌生了,之前写过了一个关于这个的应用,利用静态TLS姿势实现代码段静态加密免杀或者所谓的加壳思路.地址在这:http://blog.csdn.net/u013761 ...
- iOS 52个技巧学习心得笔记 第一章 熟悉OC
1 .简单了解OC2 .在类的头文件中尽量少引入其他头文件3 .多用字面量语法 少用与之等价的方法 4 .多用类型常量 少用 #define 预处理指令5 .用枚举表示状态,选项,状态码 .简单了解O ...
- 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈
题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...
- 防止ssh暴力破解的小工具denyhosts
DenyHosts 简介 DenyHosts 是 Python 语言写的一个程序软件,运行于 Linux 上预防 SSH 暴力破解的,它会分析 sshd 的日志文件(/var/log/secure), ...
- 《java入门第一季》之Math类一个小案例获取任意数值范围内随机数
Math:用于数学运算的类. import java.util.Scanner; /* * 需求:请设计一个方法,可以实现获取任意范围内的随机数. * * 分析: * A:键盘录入两个数据. * in ...
随机推荐
- Linux速通07 硬盘分区、格式化及文件系统管理
硬件设备与文件名的对应关系 # 在Linux系统中,每个设备都被当作一个文件来对待 # 各种设备在Linux中的文件名 设备 设备在Linux内的文件名 IDE硬盘 /dev/hd[a-d] SCSI ...
- PowerShell的使用
一:基于winserver2008版本powershell2.0的升级(至4.0) (1)首先:查看各版本的Powershell版本,如下所示: (2)打开虚拟机winserv ...
- Debezium实现多数据源迁移(一)
背景: 某公司有三个数据库,分别为MySql.Oracle和PostgreSql.原有业务的数据都是来自于这三个DB,此处委托将原有的三个数据库整合成一个Mysql. 要求: 1.不影响原有系统的继续 ...
- LNMP配置——PHP安装
一.下载 #cd /usr/local/src //软件包都放在这里方便管理 #wget http://cn2.php.net/distributions/php-5.6.30.tar.gz 二.解压 ...
- Python基础(1)——变量和数据类型[xiaoshun]
目录 一.变量 1.概述 Variables are used to store information to be referenced(引用)and manipulated(操作) in a co ...
- 【odoo14】odoo 14 Development Cookbook【目录篇】
网上已经有大佬翻译过odoo12并且在翻译odoo14了.各位着急的可以自行搜索下... 这本书是为了让自己从odoo12转odoo14学习.也是为了锻炼下自己... odoo 14 Developm ...
- 全真教程:Windows环境Jupyter Notebook安装、运行和工作文件夹配置
全真教程:Windows环境Jupyter Notebook安装.运行和工作文件夹配置 @ 目录 全真教程:Windows环境Jupyter Notebook安装.运行和工作文件夹配置 一.Jupyt ...
- 使用quartz.net 完成一个winform版的任务提醒工具
这个任务提醒工具是这样的,是每日定时执行,触发时间为 小时和分钟.每天早上来就可以把当天要做的添加到datagridview中,只记录了标题和内容和时间.双击dgv就查看内容. 如果每天计划重复,也可 ...
- python的类的实际联系--烤地瓜和搬家具
#coding:utf-8 2 class SweetPotato(): 3 def __init__(self): 4 #先初始化对象 5 self.cook_time = 0 6 self.coo ...
- Kubernetes 实战 —— 04. 副本机制和其他控制器:部署托管的 pod
保持 pod 健康 P84 只要 pod 调度到某个节点,该节点上的 Kubelet 就会运行 pod 的容器,从此只要该 pod 存在,就会保持运行.如果容器的主进程奔溃, Kubelet 就会自动 ...