V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  noli  ›  全部回复第 20 页 / 共 45 页
回复总数  897
1 ... 16  17  18  19  20  21  22  23  24  25 ... 45  
2017-08-09 17:36:56 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

void* cls = objc_getClass("NSString");
void* obj = objc_msgSend(cls, NSSelectorFromString(CFSTR("alloc")));
obj = objc_msgSend(obj, NSSelectorFromString(CFSTR("init")));

你说的这些明明就是平铺直白的 C 函数静态调用。当然对于某种语言来说它可能是什么动态调用,但在 loader 看来,这些函数的入口在编译后就是明确的、固定的,所以就是 静态调用。

我说的是在运行时 生成一个函数,并把这个函数的入口地址放入某个寄存器后跳转执行。

跟 JSPatch 有没有直接调用私有 API 没有关系,有关系的是可以在生成的函数里面去调用私有 API。

https://jspatch.com/Docs/appleFAQ
2017-08-09 16:33:30 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

并不是你说的那个道理。

iOS 本身就允许你自己嵌入类似 python 解释器,lua 解释器,并不违反上架要求。大量游戏都是用 lua 脚本并且 热更新的,你觉得他们是怎么上架的?

但是包括 pypy,luajit,CLR 等等这些是不可以的。

因为解释器能够调用的系统 API 是可以静态检查的,在链接的时候已经写死了,肯定可以检查出是不是有用到私有 API 或者敏感的功能。不开放出来的系统 API 一样调用不了,调用了就不让上架。

但是 JIT 出来的 code 是无法静态检查的而动态检查代价太大。
并且可以绕过 iOS 上架审核并调用 私有 API,那么 iOS 的审核也就废掉了。

JSPatch 之所以被禁是因为后面这一点,JIT 出来可以调用 私有 API 的东西,例如运行时注入修改函数入口地址。
这个才是 JSPatch 被禁止的原因。
实际上,iOS 的 JavascriptCore 也是 JIT,但因为这是 苹果自己的实现,肯定不会调用自己的私有 API,所以可以放心提供给开发者。

苹果如果真的用了 jail,那么什么私有 API 调用根本就不是问题,到内核那里就防住了。

所以你的说法“ iOS 对 JS 的规定也是靠审核而不是系统安全级别的技术实现的” 就是错的,App Store 审核才不看源代码,都是二进制级别的检查。
2017-08-09 16:04:58 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@zhicheng

我觉得我们对“能”字的理解有差异。

在你看来,假设你说 Linux 是“万能” 的,你的“能”字是“应然”。我同意,Linux 可以改造成任何想要的样子和功能,理论上它没有任何先天限制或者不足。

但我认为 Linux 在消费者级别的用户面前是“无能”的,我的“能”是“实然”。譬如说,Linux 比起 Windows 比起 MacOS X 不能提供一个稳定易用的桌面,基于 Linux 的 Android 不能保证用户数据安全和 App 开发者的数据安全。

所以我这样回答你的问题:

Q: 为什么用 Linux 就不能实现“多样性和开放性的同时,保证用户数据的安全性”?
A: Linux 应该可以做到但现在没有做到,但鉴于很多其他 Linux Alternative,例如 iOS, FreeBSD 已经做到了,参考已经做到的,不是一个更好的选择吗?

Q: 为什么不用 jail 就不能实现“多样性和开放性的同时,保证用户数据的安全性”?
A: 我并不否认 jail 以外的安全机制能够实现,就好像我没有排除过 AppArmor 或者 SELinux 或许可以。但是他们不如 jail 的实践经验丰富以及方案成熟。更重要的是,AppArmor 和 SELinux 并不是 Linux 主流,只是部分厂商维护的功能。但 jail 不是。

Q: 为什么从功能机时代就没有一家商业公司使用 FreeBSD 作为移动操作系统?
A: 问题不成立,阿里的 YunOS 是 FreeBSD 改,PS 上面的 OS 是 FreeBSD 改,2 楼的网友回复已经说过了。他们没有声称是 FreeBSD 是 BSD 协议的原因。

Q: 为什么 Google 和 IBM 甚至微软向 Linux 投入巨大的人力物力?
A: 我在 31 楼 给出过我的回答,我复述一遍:GPL 也是一个让大公司愿意投入的因素——因为保证了自己的投入不仅仅是为竞争对手做嫁衣,而且保证竞争对手的投入也可以为自己所用。 这是 GPL 在法律上保证他们安心协作的原因,然而这不是一个技术问题而是一个法律问题或者政治问题,不能说明 Linux (的代码、功能)优秀。

加点私货:OpenSolaris 如果活了下来,Linux 算个毛啊,Sun 对 Solaris 的投入也不小,能说明什么吗?

Q: 为什么苹果没有使用 jail 作为 sandbox 的实现?
A: 因为苹果不需要开源,iOS 也不是一个开放的系统,App Store 需要审核才能发布 App,所以不需要 jail 能提供的灵活程度。但是我想做一个开放的系统。
2017-08-09 15:33:39 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

Android 的 APK 是有签名,可惜的是 Android 并不阻止内存页成为可执行区
也就是说,下载一段外来的代码 JIT 成 bin 后可以执行。
那么任何 APK 签名都是摆设,只要注入攻击者的代码就可以改变 App 原作者期望的行为。
进而冒充 原 App 开发者的功能欺骗用户。
简单来说就是中间人攻击 + 注入。
又,Android 由于丑陋的权限设计( UX 不佳也有很大功劳),用户为图方便动不动就 root,以 root 身份执行注入的恶意代码,简直爽得不能再爽,
什么安全设计都白费。
最近好了点,各大 ROM 终于醒悟。后门不光自己能用,也能被别人爆菊,不再轻易提供 root

iOS 只允许 JS JIT 并且 JS 也只允许从持有开发者指定的 HTTPS 网站上下载。
可以很大程度保证,JIT 出来的 bin 是 app 原开发者想要的行为。
虽然 iOS 这么干比较怂,但好歹还是保护了用户和开发者的。
再加上原本的沙盒,能够较大程度确保 App 和用户数据 的安全。

如果按照严格执行 jail 的模型,把 静态 APK 以外的 JIT 出来的 bin 放在 子 jail 中执行,根本就不需要担心。
开发者可以借助系统或者第三方 SDK 来校验,JIT 出来的功能是否就是自己注入的功能,而不是其他人注入的。
这样不光 JS 可以 JIT (借助 HTTPS 证书验证),任何其他语言都可以 JIT。

在这点上 .net 的模型可能是最安全的,因为每一个 assembly 包括动态从外界获取的分发版本,都可以让开发者签名。也就是所谓的 binary 级别的 code sign。
2017-08-09 14:26:16 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

顺带补充一个,binary code sign 是任何一个支持像 App Store 这样的分发安装第三方应用 OS 所必须考虑的基本内核功能。Linux 内核曾经有过 DigSig,但是后来也没当回事了。

说实话,连这样的 bin 分发数据安全保证都没有,Linux 以及经基于 Linux 的 Android 谈安全,简直就是自欺欺人。

当然,讲真,FreeBSD 也没有。
幸好 iOS 和 WP 都有呢。
2017-08-09 14:18:46 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@zhicheng

我至今没有理解,我哪个行为让你认为我是用宗教的心态做技术。然后又说锤子钉子,我也是 N 脸懵逼的
你给我扣个帽子然后又在这层里面打帽子,让我觉得你的行为很无聊。

不过没关系,我们可以抛开这些次要矛盾继续讨论。

我先声明一下,我个人确实对 FreeBSD 观感甚好,对 jail 的概念比较欣赏。
为了不让讨论的话题变成毫无意义的空中楼阁,我就把 FreeBSD 里面的 jail 机制以及其对 App 隔离的效果,作为一个参考模型来讨论。
但我绝不认为这种程度的敬意,应该被理解为 BSD 宗教。

当然,我还是坚持批判 Android 中的 Linux 权限机制的。
Linux 并不是没有成型的好的安全模型实践,AppArmor 和 SELinux 都是两个比较老牌的,然而并没有受到多大的好评和关注。

请注意,这就是我批评的重点,Linux kernel API 本身其实并没有多少 安全相关的。

不像在 FreeBSD 中,jail 就是一个 kernel 的功能,现成的标准,不需要任何第三方实现,kernel 就有这样的功能。(当然 kernel 剪裁后是另外一回事)。

由于 linux kernel 对 应用隔离 关注度不高,所以我认为 linux 内核社区这么做是短视和肤浅的。

如果这个批评仍觉得勉强,那 cgroup 和 lxc 之后的 docker,关注的依然是 运维部署隔离 着手的便捷性,而不是面向普通用户比较关注的 app 数据安全。
据此,我的看法是,Linux 社区以及基于 linux 上的 Android 并不是一个真正关心像手机用户这样的使用场景的用户。

如果你觉得这样的批评冒犯了你,那言尽于此吧——尽管你不承认,但在我看来这就是 linux 洗脑教。

理论上来说,任何一个 kernel 集成任何一种 sandbox 机制,都不是难上天的事情。开源的软件嘛,有无限的可能。
唯一阻止这些可能的,就是开源社区里的人,是人们的想法和偏好选择,导致了不一样的开源软件之间有差异。

Linux 社区声称自己最有黑客精神,什么都可以搞什么都可以实现。
但是结果是搞什么都搞个半桶水,桌面是这样,手机系统也是这样。

我只是比较不客气认为 linux 社区充满了短视和狂热而已。

回归主题:

如果 @zhicheng 你要做 多样性和开放性的同时,保证用户数据的安全性,符合你说的消费类移动设备的 OS
那样怎么改嘛?

我觉得 FreeBSD 的 Jail 是值得参考的模式。
你认为改一个 安全机制很容易,麻烦你提个建议吧。
2017-08-09 11:37:29 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

你很理解 Android,Android 什么权限都能控制,那你告诉我华为大战微信这么狗血的事情是怎么发生的呗。
Android 权限控制很细致,我不否认,用 XML 定义的嘛。哈哈哈哈~

没有二进制上的安全,任何其他安全机制都是虚的。
这是我对安全的理解。

如果你觉得你对 Android 安全的理解比我多,就拿出来吧。
2017-08-09 11:19:31 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

封闭性是什么?是诅咒吗?是超能力吗?还是物理法则?

技术人就说技术话题,iOS 的封闭性就是要靠技术保证的。iOS 没有 Sandbox,或者有 Sandbox 但是像 Android 那样允许随随便便 Access 敏感数据,再多的审核也没有用。

再更进一步,你有没有想过是不是只有审核才能保证 App 对用户隐私的安全性?

你没有。
你根本就不理解什么是封闭性开放性,你只是在用你自己不理解的名词组成一个句子。

我不介意你反对我的观点,但是单方面输出你不加思考的成见,让我觉得你没有要讨论的诚意。
2017-08-09 10:58:08 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

我不是很理解你说什么。

用户当然永远是弱势群体,没有专业知识没有专业技能来保护自己的权益。用户当然也可以用人民币投票,要自由还是要支付宝。

然而,我一直都在说的就是,提供一个 好的 OS 环境,能够双赢。
iOS 上老老实实的支付宝就是一个实证,无论我们对这个事实的原因,甚至谁为因谁为果,有多大的争议。

然后我提出了一个 iOS 之外保持开放性同时保证用户安全的提议,就是参考 FreeBSD jail 甚至直接从 FreeBSD 改。

所以我不知道你那么悲观的,用户只能永远被坑的信念是哪里来的。也不是很理解你发表这种哀叹和我说的有什么关系。
2017-08-09 10:46:07 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

那阿里干脆自己基于 Freebsd 改一个移动设备 OS 算了,事实上他们也是这么做的,YunOS 好像就是一个兼容了 Android 的,据说是从 BSD 改的。

但显然,加了这么流氓的内核模块,破坏平衡的玩法,没人愿意跟他们玩。
2017-08-09 09:30:29 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869 jail 可以做得到让客户 app 不知道自己 jail 里面的。
2017-08-09 08:45:55 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

Q: 那么作为一个自由的 OS,是不是要允许用户在 jail 外面运行代码?
A: 当且仅当 OS 规则默许或者 用户明确授权之后,允许 jail 外面的代码运行。
2017-08-09 08:44:24 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@zhicheng

1. 我不知道你是哪一种类型的开发者,以及是怎么理解 sandbox 这种技术的细节。
不过或许你可以告诉我一下,Android 如何在没有 linux kernel 的支持下开发出一个不能被开发者绕开的 sandbox ?
你不会以为写任何 Android 或者 iOS 的 App 的时候,只能 link SDK 提供的标准库吧?
如果能够绕开在 SDK 里面提供的 Sandbox,这种 sandbox 能作为商业 OS 推出市场吗?

App 质量当然和 OS 关系不大。但讲事实讲良心,你觉得 Android App 质量是不是 Android 的生态系统惯出来的?
iOS 成功当然不仅仅是因为 BSD,但事实就是 iOS 在 BSD 的基础上提供了很好的扩展。

当然了,你说的 App 质量是在说个例,我说的 App 质量是在描述普遍水准。根本不是在说同一个事情。

并且,iOS 还真不是 microkernel,顶多算是 hybrid

2. 我部分同意你的说法。在当时,“ Linux 比 BSD 从开发者数量到工具链等更成熟”。
然而这不能说明这不是一个偶然。
这跟我今天选不选 Freebsd 或者 其他 BSD 甚至 Redox 什么的,并没有什么必然关系。
当时的 BSD 系没有乘上开源的快车是造成了暂时落后的主要原因,但 BSD 系比 Linux 更老牌是事实。

3. 并且 BSD 的 API 比 Linux 的更有前瞻性,继续以 kqueue VS epoll 为例,
epoll 不能服务 file IO, 要另外使用 inotify, epoll 也不能支持 timerfd, signal fd ; kqueue 全包了, linux 弱鸡
epoll_ctl 一次只能关注 一个 fd,你要关注 100 个,麻烦你发 100 次 系统调用; kqueue 一次搞定,linux 弱鸡

我就不说 fs 上的其他了。你先告诉我说,Linux 在哪个细节上不比 BSD 垃圾吧。
你这么推崇 linux,反倒说我宗教?同志您写过多少跨平台代码?

“这里的人,都不是你的典型客户”。我可不敢小瞧天下英雄。
虽然你没证明你是其中之一,不过起码还是能有有趣的讨论的。

4. 空话我就不多说了。能不能先做一回小孩,只说对错,不讨论利益?
2017-08-08 19:33:57 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869 严格来说是非系统应用,都在一个自己独占的 jail 里面。如果需要支持应用族的概念,可以同一个应用族的 App 放在同一个 jail 里面。应用和应用之间的通信,应用的网络通信,应用的本地存储,都由 jail 来监管。

这是一种比较成熟的管理模型吧。

cgroup 做这个感觉挺麻烦的。
2017-08-08 16:42:09 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869

虽然我还没付诸实践,但是把 cgroup 这样的东西引入 Android,据我所知 Android 是要大改的,所以兼容 Android 基本上没有意义,还不如抛弃这种有害生态。

本质上 cgroup 并不是一个为安全而设计的内核功能,LXC 才是,但 LXC 实际上已经被弃用了。但是 jail 不一样,jail 从诞生到设计就是为了安全的,搭配 ZFS 的方案已经成熟得很。


@zhicheng 除了第一段,其他你说的我都不同意。

1. iOS 就是因为基于 FreeBSD 才占了很大便宜的。iOS 用 Linux 作为内核的话今天的 iOS 估计连沙盒模型都没有,也不会享受 FreeBSD 稳定的 API 带来的好处。你说 iOS 基于 Linux 也一样会成功,这信口开河有点过了,毕竟 iOS 的成功之处,从商业角度来看,从 App 质量来看,Android 都不是很有优势。

2. Google 用 Android 以及 Android 是一个 Linux,我认为是一个偶然,因为 Android 一开始就是基于 linux 内核。仅此而已。你也没有什么列举理由说明 Android 一开始就只适合用 Linux 内核。“没有人在乎你用什么内核”,这只是普通消费者的无知,来讨论这个话题的都不是普通无知消费者。

3. Linux 的内核很先进很完善? 不敢苟同,epoll kqueue 这种事情上看得出,Linux 内核并不是精心设计而是自然而成的。epoll 在 2.5.4 kernel 引入,时间大概是 2004 年左右; kqueue 在 Freebsd 4.1 引入,大约 2000 年左右;有 4 年时间空隙模仿 kqueue 却出了一个画虎不成反类犬的 API。Linux 社区这样的作风我确实很不感冒,也不觉得先进。

再往大一点说,FreeBSD 上的 Unix 积累比 Linux 深厚多了。Linux 的竞争优势仅仅是开源比较早以及搭上了 GNU 运动的风潮。当然,GPL 也是一个让大公司愿意投入的因素——因为保证了自己的投入不仅仅是为竞争对手做嫁衣。

4. 非要说锤子钉子这种空话就没意思了,什么是锤子什么是钉子你也分得清?
2017-08-07 10:52:35 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@raiz 区别当然是在于内核吧,Android 一开始就是靠 JAR 的变种 Dex 来磨平 不同机器上的 SDK 差异。学术上来说,Symbian 微内核比 Linux 的宏内核更有适应性。如果 Android 是微内核,那么移植 OS 肯定比今天容易多了,因为适应不同机型直接运行时换驱动就可以了,不用重新编译内核,参考今天的 Windows。

@hjc4869 魔改 Android 改 kernel 似乎比较容易。但是,改的时候要不要兼容各种形形色色的 Android 需求呢?如果不兼容,那你改出来的东西还能叫 Android 吗?重新从 BSD 出发,或许你还可以做 Linux 的驱动兼容层,但同时没有 Android 负担,轻装上阵,反而比 从 Android 出发容易吧——如果容易是指技术难度的话。
2017-08-06 23:27:46 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869 所有的第三方工具都只不过是打算驱虎吞狼而已。能不能真的吞狼还两说呢,至少你说的 island 我就用过,这些工具出了一代又一代。只是用个手机而已,还要管 App 之间的勾心斗角,完全是南辕北辙啊。
2017-08-06 22:34:36 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@hjc4869 我没有理解你说的矛盾在哪里。

我想完整表述的观点是这样:

1. Android 本身是开放的,但并不是开放的就会形成有效的市场竞争。国外的先不说。国内市场实际上并不是有效的市场竞争,几个重要的 Android ROM 和手机制造商控制了 Android App 生态,App 开发者只要好好地拜码头而不是服务好用户,就能生存。于是 Android App 的质量相对 iOS 比较差,以至于出现了一些“不给权限就不可以(愿意)正常工作的 App ”。当然用户可以选择不使用这样的 App,但这是这样对用户的权利和对 App 开发者来说是双输的。

更重要的是,Android 据我的了解并没有很好地保护开发者和 App 用户。例如 Android 可以动态注入各种补丁干扰一个 App 的行为;对用户 Android App 的权限机制设计也并没有 iOS 来得用心,权限太多普通 App 使用者根本无从适应,也没有一个很好的事后检查权限的机制。

2. Apple iOS 对开发者本身是非完全开放的,但是 iOS 保护用户权利方面比较给力,虽然 App 要上 App Store 的这个过程必须经过审核,这并是非市场行为,但由于先发优势形成开发者数量众多,iOS 要适配机型相比 Android 更容易,开发者难度降低,所以 iOS app 开发形成了有效的竞争(对比 Android 某些 App 只能在某些 ROM 或者手机上运行良好)。并且用户可以很容易地找到 操作系统对 用户自身权利的保护机制(我就没见过哪个国产 Android ROM 能很方便找到 “隐私” 选项)。总的来说,在 iOS 上,Apple,App Developer,User 三方共赢的机会是很大的。虽然庄家 Apple 的赢面最大。

3. 理想的 OS Platform,App Developer,User 的生态,应该是 App Developer 服务 User,OS 同时服务 developer 和 User。User 可以通过 OS 控制 App 和 App Developer 的行为。这样才是一个有效的市场机制——不光要有自由竞争,还要有信息和信号控制竞争行为(所谓看不见的手)。

Android 要做到这一点,其实只差一小步,就是有效地隔离系统服务器和 App 之间的互相干扰,隔离用户数据和 App 数据。但是 linux kernel 其实一直都缺乏这样都基因,cgroup 等也是 docker 发展起来之后才被重视的概念,但目测在 Android 上引入是遥遥无期了。

Freebsd 很早就有 jail 这种系统级的隔离机制 ( iOS 越狱一词即是这个概念的衍生)。

WP 并非不优秀,非战之罪,后知后觉。
2017-08-06 17:10:14 +08:00
回复了 noli 创建的主题 奇思妙想 [空想] 改造 FreeBSD 变成移动设备操作系统
@kaneg 对照 iOS 和 Android 的情形,操作系统内核是 Freebsd 还是 Linux 似乎是不重要。
但要命的偏偏就是 Freebsd 下有效的硬件驱动太少。甚至只能加封装一个 Linux 驱动的适配层。
所以从技术实现的角度来看,内核用 linux 还是 Freebsd 很重要。

@hjc4869 我觉得开放性很重要。我认为国内的 Android 市场恰恰就是因为被神秘力量控制了,所以实际上是不开放的,才会出现那么多“不给权限就不工作”的 App。而 iOS 上如果开放型确实足够,那我们现在应该还能装 VPN app。
1 ... 16  17  18  19  20  21  22  23  24  25 ... 45  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2873 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 15:22 · PVG 23:22 · LAX 08:22 · JFK 11:22
Developed with CodeLauncher
♥ Do have faith in what you're doing.