在mac中创建软件修补程序

时间:2017-07-01 07:02:57

标签: objective-c macos assembly disassembly

我是一名IOS开发人员,我知道目标C.我想创建一个独立的mac应用程序,其唯一的功能是修补同一个mac中可用的另一个应用程序。

假设我的应用程序文件夹中有一个名为X的应用程序。这个应用X有一些不受欢迎的行为。所以我试着修改这个行为。我在Hopper反汇编程序的帮助下分析了应用程序的可执行文件,我发现我必须从00000001003e3790开始更改汇编指令。我更改了那些汇编指令并生成了新的可执行文件。然后我用新的可执行文件替换了旧的可执行文件,然后现在似乎已经消失了不良行为。

由于大多数人都希望删除这种不受欢迎的行为,我决定写一个修补程序并将修补程序分发给他们。

那么如何在我的修补程序应用程序中修改app X的可执行文件中可用的汇编指令,然后用修改后的版本替换原来的汇编指令?

如果有人帮助我朝正确的方向发展,那就太好了。

1 个答案:

答案 0 :(得分:2)

  1. 一般情况下,如果无法在/Applications/中找到,请向用户询问应用包的位置。
  2. 您需要检查该捆绑包中的目标可执行文件是否具有相同的哈希值(可能是CRC,MD5,SHA - 您将其命名)作为修补前的可执行文件。
  3. 如果哈希匹配,则打开文件进行写入,并寻找存储错误指令的预硬编码位置;您可以通过在十六进制编辑器中搜索修补文件来确定该位置,以获得从修补字节开始的足够长的字节字符串。
  4. 最后,你要用你的目标字节重写(a.k.a.补丁)并关闭文件。
  5. [UPD。] [3]的示例代码。

    这不需要任何与ObjC相关的机制,只能使用普通libc构建和运行:

    long PatchSomething(char *name, char *data, size_t offs, size_t size) {
        long file = open(name, O_WRONLY);
        if (file != -1) {
            lseek(file, offs, SEEK_SET);
            write(file, data, size);
            close(file);
        }
        return file != -1;
    }
    

    其中:

    • name是要修补的文件的名称
    • data是要写的数据
    • offs是要放置数据的文件偏移量
    • size是数据大小;
    • 将重写文件中旧字节的size