0x00:简介


    PlistEdit Pro是为macOS平台最优秀的属性列表和JSON编辑器。
Mac和iOS开发人员在开发应用程序时必须编辑各种属性列表和JSON文件。PlistEdit Pro通过提供直观和强大的界面,使编辑这些文件变得更容易。除了能够复制、粘贴或拖放属性列表数据之外,PlistEdit Pro还提供了强大的查找和替换功能,以及结构定义,可以方便地访问各种标准属性列表文件中常用的键。
高级用户还可以从PlistEdit Pro的preferences浏览器中获益,该浏览器允许轻松访问macOS用于在系统上存储设置的属性列表。浏览您的首选项,或者立即搜索plist文件的整个文件夹,以获得特定的键或值。PlistEdit Pro还通过它的Applescript支持和它的pledit命令行工具,实现了涉及属性列表的任务的自动化。
官方网址:https://www.fatcatsoftware.com/plisteditpro/
下载地址:https://www.fatcatsoftware.com/plisteditpro/PlistEditPro.zip
破解前,软件不能保存修改后的文件,并且有提示注册的按钮,如图:


0x01:静态分析


    使用Hopper加载目标程序/Applications/PlistEdit\ Pro.app/Contents/MacOS/PlistEdit\ Pro。
动态调试时需要合理的设置断点,这就需要我们先进行静态分析之后找到关键的函数,或者关键的跳转等。
静态分析前,我们先看看软件给我们的提示信息有哪些,因为要破解成注册版,所以我们走一遍注册流程,依次点击“PlistEdit Pro”-->“Registration...”
来到软件注册窗口,填写用户名和注册码后(不知道正确的license是什么,所以此处填写的当然是错误的注册信息)点击“Register”按钮,软件给出如下图所示提示信息:

我们在Hopper中,搜索"The name/serial number combination you have entered is not valid. Please check both the serial number and your name to ensure they exactly match your registration information and try again."这句字符串。
通过查找字符串的调用位置,我们找到了关键判断函数"PERegistrationValidator validationInfoForRegistrationInfo"
在函数的起始位置设置断点,如下图所示:准备下一步的动态调试。


0x02:动态分析


    打开本地调试器,点击运行按钮。重复上一步的注册操作,软件断在我们设置好的断点,如图所示:

点击我们想要跳转的位置,这里我们直接选在第一个跳转的位置,然后点击运行到指定位置的按钮,如图所示:

查看下跳转标记,为成功跳转,如图:

取消ZF标记按钮选中状态,点击单步跟踪按钮,如图:

这一步如此操作是有理由的,如果我们想完整的调试一个函数,尽量让该跳转的地方不跳转,那样就可以分析函数每一步都在做什么。
继续重复上述操作,程序运行结果如图所示:

软件成功注册。

0x03:修改软件

如图所示,只需要修改两个跳转即可完成软件破解。

Plist文件编辑工具PlistEdit Pro 1.9.1动态调试分析的更多相关文章

  1. Linux文件编辑工具——VIM

    Linux文件编辑工具--VIM 1.VIM基本概述 1.1 什么是vim vi 和 vim 是 Linux 下的一个文本编辑工具.(可以理解为 windows 的记事本,或 Notepad++ 1. ...

  2. IDA Pro使用(静态分析+动态调试)

    链接:http://skysider.com/?p=458 IDA Pro使用(静态分析+动态调试) 1.静态分析 IDA FLIRT Signature Database —— 用于识别静态编译的可 ...

  3. 【强大的视频编辑工具】Adobe Premiere Pro CC 2019 for Mac

    [简介] PR CC是视频编辑爱好者和专业人士必不可少的视频编辑工具.它可以提升您的创作能力和创作自由度,它是易学.高效.精确的视频剪辑软件.PR CC提供了采集.剪辑.调色.美化音频.字幕添加.输出 ...

  4. Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装

    1.软件简介    Duplicate Manager Pro 是 macOS 系统上一款重复文件查找工具,可以帮你在 Mac 电脑上查找出磁盘上面的重复文件,然后让你对这些重复文件进行判断并删除,使 ...

  5. FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

    FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...

  6. day59:Linux:编辑工具vim&文件类型&文件属性

    目录 1.Linux编辑工具vim 2.Linux文件类型 3.Linux文件属性 4.今日份Linux练习题 Linux编辑工具vim 1.什么是vim 文本文件的编辑工具,  和windows的n ...

  7. [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)

    [系统安全] 十六.PE文件逆向基础知识(PE解析.PE编辑工具和PE修改) 文章来源:https://masterxsec.github.io/2017/05/02/PE%E6%96%87%E4%B ...

  8. 日志查看工具 logviewer pro的使用

    1.logViewer Pro 介绍 logViewer Pro 是一款log文件查看器,它可以在短短数秒内打开上G的LOG文件,支持高亮某行文字(例如警告,错误),支持Unicode名字,支持查看的 ...

  9. Plist文件和字典转模型

    模型与字典 1. 用模型取代字典的好处 使用字典的坏处 编译器没有自动提醒的功能,需要手敲 key如果写错了编译器也不会报错 2. 模型概念 概念 专门用来存放数据的对象 特点 一般继承自NSObje ...

随机推荐

  1. day47——css介绍、语法结构、选择器、css权重

    day47 今日内容 css介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 语法结构 div{ color:gree ...

  2. AVR单片机教程——旋转编码器

    好久没写这个系列了.今天讲讲旋转编码器. 旋转编码器好像不是单片机玩家很常用的器件,但是我们的开发板上有,原因如下: 旋转编码器挺好用的.电位器能旋转的角度有限,旋转编码器可以无限圈旋转:旋转时不连续 ...

  3. C语言conio.h部分解释

    #include <conio.h> int getch(void);// 从控制台得到下一个字符,以ASCII值返回,并不在屏幕显示该字符 int getche(void);// 从控制 ...

  4. gRPC-拦截器简单使用

    概述 gRPC作为通用RPC框架,内置了拦截器功能.包括服务器端的拦截器和客户端拦截器,使用上大同小异.主要作用是在rpc调用的前后进行额外处理. 从客户端角度讲,可以在请求发起前,截取到请求参数并修 ...

  5. TCP/IP详解 IP路由选择

    TCP/IP详解 IP路由选择 在本篇文章当中, 将通过例子来说明IP路由选择器过程 如图所示, 主机A与主机B分别是处在两个不同的子网当中, 中间通过一个路由连接. 如果主机A请求与主机B进行通行, ...

  6. Docker 使用入门 Hello World

    结合上一篇的所说的内容:现在安装好了Docker 安装好了就要用嘛,所以,先走一个Hello World docker run ubuntu:15.10 /bin/echo "hello w ...

  7. 3、Linux目录操作

    1.目录操作概述 2.ls显示目录内容 命令名称:ls 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 功能描述:显示目录文件 ls  -a    显示目录下的所有文件(包括 ...

  8. Mybatis中使用association及collection进行一对多双向关联示例(含XML版与注解版)

    XML版本: 实体类: package com.sunwii.mybatis.bean; import java.util.ArrayList; import java.util.List; impo ...

  9. Java 之 MyBatis(一)入门

    一.Mybatis 框架概述 (1)mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动.创建连接.创 ...

  10. requests中构造post请求注意点

    构造post请求时需要注意点: 通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. 如果是urlencoded 格式 data=字典如果是js ...