hopper修改软件_签名问题

用hopper 修改app 保存时

这里我知道是因为加了签名的东东

问题:
1) 签名文件机制对于一个文件来说是怎么样的呢?比如保存在文件的二进制上嘛?
2) hopper hex修改是 要破坏 签名,那么保存后 再次签名上就行了嘛? 怎么签名?
3) 前面用到过一个 ent.xml 这个是签名文件吗?每个app都能用它签名还是?我认为每个app 的签名都不同的?
4) 在选择是否修改时 我也可以选择不去掉签名 但是修改后的app 有校验就不行了,如果遇到这种情况怎么办?

我换了 ldid 也是加不上签名 不知道怎么回事
➜ Documents ./ldid Sent.xml /Applications/Reveal.app/Contents/MacOS/Reveal
minimal/mapping.h(54): _assert(false); errno=2
➜ Documents ldid -Sent.xml /Applications/Reveal.app/Contents/MacOS/Reveal
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate: file not in an order that can be processed (link edit information does not fill the __LINKEDIT segment): /Applications/Reveal.app/Contents/MacOS/Reveal
ldid/ldid.cpp(989): _assert(WEXITSTATUS(status) == 0); errno=0

  1. 是保存在二进制上的;
  2. 用joedj编译的ldid,论坛里搜一下;
  3. 那个不是签名,那个是权限的一种表现形式;
  4. 如果有校验,需要针对它的校验方式做特定处理,没有通用的方案

我发现不是 签名问题 我新下载的joedj ldid
执行 ldid -e xxx
得到空
问题1)是否说明没有签名? 因为后面签名就出错了
问题2)如果没有签名 那么我用 hopper修改后保存时就弹框说 被 signed了 这是什么情况?
问题3)用 hex edit pro 修改 和 hopper 修改 好像不太一样 因为 Hopper 会提示,然后hex edit pro不会提示
但是最后app 报错类型不一样
hopper 修改的提示 需要signed的 hex edit pro 修改的直接说 崩溃 也不知道是不是校验
新下载的ldid 和old 比较
问题4)是不是不是签名的问题了?
➜ bin file ldid
ldid: Mach-O 64-bit executable x86_64
➜ bin file ldid_old
ldid_old: Mach-O universal binary with 2 architectures
ldid_old (for architecture i386): Mach-O executable i386
ldid_old (for architecture x86_64): Mach-O 64-bit executable x86_64

ldid -S binary

才是签名,-e是提取其中的entitlements。签名和entitlements是2个概念

➜ bin ldid -S /Applications/Reveal.app/Contents/MacOS
minimal/mapping.h(54): _assert(false); errno=21

ldid -e xxx 不是提取 entitlement 我对原 reveal 进行 lidd -e xxx 然后得到空
hopper 修改保存为新 程序 提示 需要signed的
hex edit pro 修改的直接说 文件 damaged 的 推测是 文件校验
为什么 hopper 修改的 和 hex edi pro 修改的不同呢?

你是在修改OSX上的文件?这个我就不大清楚了,论坛里有patch Reveal的帖子,你问问他们

另外,hex editor我用得不多,它只是一个单纯的十六进制编辑器,针对所有平台,只修改不分析,所以不提示是正常的;而hopper主要针对的是苹果系统的可执行二进制文件,会在修改的同时分析,所以会提示。我估计是这样的

我下了新版的reveal看了一下,1.5版本添加了自身的验证,突破也比较简单
找到这个方法-[IBAAppDelegate verifyCodeSignature]
第一个je改成jmp就好