熟悉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(顺便破解一个小工具)的更多相关文章

  1. Windows PE 第一章开发环境和基本工具使用

    第一章 Windows PE 基本工具 1.1开发语言MASM32 1.1.1设置开发环境 这个不细说了,我在整理Intel汇编的时候详细的说了环境搭建以及细节.地址是:http://blog.csd ...

  2. 决胜Flutter 第一章 熟悉战场

    欢迎参加“决胜Flutter” 实训课程,这里是你此次实训之旅的起点. 本章将带您快速了解移动开发的现状,然后向您介绍Flutter的发展历史以及优势特点,最后一起动手,搭建高效的开发环境. 由于Fl ...

  3. 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法

    第一章 熟悉Objective -C   编写高质量iOS与OS  X代码的52 个有效方法   第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...

  4. 从零开始的程序逆向之路 第一章——认识OD(Ollydbg)以及常用汇编扫盲

    作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43041-1-1.html 0×00 序言: 1.自从上次笔者调戏完盗取文件密码大黑客后, ...

  5. Windows PE第九章 线程局部存储

    线程局部存储(TLS) 这个东西并不陌生了,之前写过了一个关于这个的应用,利用静态TLS姿势实现代码段静态加密免杀或者所谓的加壳思路.地址在这:http://blog.csdn.net/u013761 ...

  6. iOS 52个技巧学习心得笔记 第一章 熟悉OC

    1 .简单了解OC2 .在类的头文件中尽量少引入其他头文件3 .多用字面量语法 少用与之等价的方法 4 .多用类型常量 少用 #define 预处理指令5 .用枚举表示状态,选项,状态码 .简单了解O ...

  7. 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈

    题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...

  8. 防止ssh暴力破解的小工具denyhosts

    DenyHosts 简介 DenyHosts 是 Python 语言写的一个程序软件,运行于 Linux 上预防 SSH 暴力破解的,它会分析 sshd 的日志文件(/var/log/secure), ...

  9. 《java入门第一季》之Math类一个小案例获取任意数值范围内随机数

    Math:用于数学运算的类. import java.util.Scanner; /* * 需求:请设计一个方法,可以实现获取任意范围内的随机数. * * 分析: * A:键盘录入两个数据. * in ...

随机推荐

  1. 漏洞复现-CVE-2016-4437-Shiro反序列化

        0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)(兼顾反弹shell的攻击机) 0x01 影响版本 Shiro <= ...

  2. AtCoder Beginner Contest 171-175 F

    171 F - Strivore 直接把初始字符当成隔板,统计的方案数会有重复 为了避免重复情况,规定隔板字母尽可能最后出现,即在隔板字母后面不能插入含隔板字母的字符串 所以在隔板字母后插入的字符只有 ...

  3. 微信小程序在Android和Ios端的获取时间兼容性问题

    an端 var time = new Date() 例如:2020-01-01 01:01:00   ios端 var time = new Date() 例如:2020/01/01 01:01:00 ...

  4. springboot注解之@Import @Conditional @ImportResource @ConfigurationProperties @EnableConfigurationProperties

    1.包结构 2.主程序类 1 @SpringBootApplication(scanBasePackages={"com.atguigu"}) 2 public class Mai ...

  5. python基础学习之函数基础和部分内置函数

    在函数调用的时候,必备参数必须要传入 函数定义: def  函数名: 代码块pass return  返回值 函数名命名规则: 字母.数字和下划线组成,和变量命名规则一致 pass在这里表示什么都没有 ...

  6. Lzzy高级语言程序设计之while循环

    public class Mq2 { public static void main(String[]args) { int b = 3; while (b < 7) { System.out. ...

  7. python工业互联网应用实战11—客户端UI

    这个章节我们将演示用户端界面的开发,当前演示界面还是采用先实现基本功能再逐步完善的"敏捷"模式.首先聚焦在功能逻辑方面实现普通用户与系统的交互,普通用户通过url能查看到当前任务的 ...

  8. AOE网与关键路径

    声明:图片及内容基于https://www.bilibili.com/video/BV1BZ4y1T7Yx?from=articleDetail 原理 AOE网 关键路径 数据结构 核心代码 Topo ...

  9. kubernetes 降本增效标准指南| 资源利用率提升工具大全

    背景 公有云的发展为业务的稳定性.可拓展性.便利性带来了极大帮助.这种用租代替买.并且提供完善的技术支持和保障的服务,理应为业务带来降本增效的效果.但实际上业务上云并不意味着成本一定较少,还需适配云上 ...

  10. 北航OO第一单元作业总结(Retake)

    前言:当我写这篇博客的时候,我的心情是复杂的,因为这实际上是我第二次写这篇博客--我今年重修的这门课.我对去年的成绩心有不甘--在激烈的竞争下,我虽然尽可能完成了所有作业(仅一次作业未通过弱测),但爆 ...