1
xingda920813 2018-07-10 19:12:57 +08:00
偏激了. 那 iOS 开发怎么讲?
|
2
gam2046 2018-07-10 19:26:31 +08:00 9
其实不能这么说。当初 Android 能火起来,依靠的也是其开放性。现在倒打一耙说过于开放导致现在的境遇就不是很合理了。
比较客观的说法,当初 Android 依靠开放性,吸引了一批奇技淫巧者,弄出了许多新奇的东西。但是随着蛋糕越来越大,自然也开始慢慢有人惦记了,总会有苍蝇臭虫飞回来。这不是开放的原罪。 |
3
coderlxm 2018-07-10 19:27:39 +08:00 via Android
不太同意,那有没有考虑好的一面呢?
|
4
tetora 2018-07-10 19:28:43 +08:00 via Android
我觉得挺好的,起码这方面的知识多起来了,都安分守己的话,不就少了很多岗位了吗
|
5
lonelinsky 2018-07-10 19:30:19 +08:00
|
6
sampeng 2018-07-10 19:32:07 +08:00
安全你没考虑到啊。。不提供 ndk。。私密的逻辑怎么搞? java 真的就是在裸奔啊。。
|
7
s82kd92l OP @xingda920813 iOS 从一开始就是 native 层,所有的文档都是 native,沙盒安全边界也是 native。Android 文档绝大部分是在 Java 层,所以这些 hook 之类的是 undocumented behaviour,所以才叫“黑科技”。
|
8
s82kd92l OP |
9
nicevar 2018-07-10 19:53:11 +08:00
不开放 NDK 的话 android 很难有今天,光游戏这块就发展不起来,你说的那一套有人用才行,别人其他平台有现成的代码光移植就成大问题,另外机顶盒这块也很难发展起来,2.x 版本的时候没有 ndk 很多东西都没法做,连个最简单的获取本地网卡的 mac 地址都不行
|
11
codehz 2018-07-10 20:47:26 +08:00
@lonelinsky #5 已经有方法 native 层 patch vm 绕过了
|
12
hjc4869 2018-07-10 20:50:41 +08:00
WP7 当年就不让第三方 app 用 native code,所有代码全部运行在 CLR 上。结果系统自带 native apps 无比流畅,第三方 app 却都卡的没法用。
|
13
SonicY 2018-07-10 20:53:27 +08:00 via Android
WP7 那是仅限于首页滑动流畅……
|
15
yhzwy 2018-07-10 21:41:17 +08:00
身为程序员当然是能玩的东西越多越好。
不然都限制死了还玩什么 |
17
s82kd92l OP @jdgui 真要用心混淆的话看 smail 看不出的。随便想想就有很多种方法让 smail 逻辑隐藏,当然会需要一个整体性的混淆框架:
1. 自动把代码逻辑分成很多小的 class。复杂的逻辑可能被分成成百上千的 class。人肉看这种 smail 代码会疯掉的。 2. 实现一个 userspace coroutine/thread 之类的框架,然后就可以做 non-deterministic execution.可能执行 10 个 smail 指令就跳到另一个 thread 上了,下次跳回来也不知道是什么时候。这种逻辑必须执行时才能确定路径,无法静态分析。 |
18
pual 2018-07-10 23:27:30 +08:00 via Android
Java 虚拟机堆内存太少,有时需要加载动画 webp 之类的需要 ndk 分配进程的堆内存
|
19
pual 2018-07-10 23:30:54 +08:00 via Android
另利用 jni 与 java 层调用很多优秀的开源库,ss 的 Android 版本就是一个很不错的栗子
|
20
tempdban 2018-07-11 01:20:43 +08:00 via Android 1
我 c 语言写的框架到你安卓里还必须要 Java 重写一遍?我现成的加密库到你安卓再移植一年?移植的万一有 bug 谁维护?
初期安卓软件少的时候怎么上量? 不弄的方便一点谁给你写? 你把 app 耍流氓的锅扔给 ndk 谁能服? 源码就在那给你看,还是不是该耍的流氓还要耍 就算没有 ndk 没有 jni,是不是套路层出不穷? WP 那个 API 给的少的可怜 逼死多少 app。 谷歌是没撕破脸皮,直接搞一 cgroup 限制死你,管你是啥语言都没用。 因噎废食 |
21
tempdban 2018-07-11 01:29:28 +08:00 via Android
还有你说文档大多只告诉 Java 层怎么用,咱先不管是不是这样,源码就摆在那,公开的科技他还叫黑科技?
还扯到 Root … 有多少 rootkit 是内核直接提权,有多少是利用系统服务提权。 你说 selinux 针对来自第三方 NDK 代码的威胁,兄弟,你怕是来引战的。 |
22
janus77 2018-07-11 02:05:54 +08:00 1
四个字,因噎废食
|
23
wweir 2018-07-11 08:08:04 +08:00 via Android
“ NDK 应该做成高危权限”
回波血,同意 lz 的观点,既然 ndk 能做到很多无法预见的事情,那把 ndk 标注为高危特殊权限就没毛病 |
24
opengps 2018-07-11 08:16:49 +08:00 via Android
选择空间越大,创新能力越强,题主喜欢规范统一没问题,只是容易错失一些创新
|
25
lolizeppelin 2018-07-11 08:16:53 +08:00 via Android
游戏还做不做了 没 ndk 你现在都能在安卓上玩些啥游戏。 安卓都 tm 没了好不
|
26
liprais 2018-07-11 08:22:41 +08:00 1
ndk 没问题,app 不审核才是最大的问题
|
27
randyzhao 2018-07-11 08:46:44 +08:00 1
这事应该应用市场去做
|
28
missdeer 2018-07-11 09:01:35 +08:00
偏激了,我们用 NDK 主要是为了代码跨平台
|
29
cxl008 2018-07-11 09:06:02 +08:00
安全层面考虑,最后代码必然下沉,越来越往下,java 那裸奔的感觉,反编译后随意修改。。。只能说你的看法比较片面
|
30
zj299792458 2018-07-11 09:09:56 +08:00 via iPhone
会安卓会 java 会 C 会 ndk 表示不知道你们在讲什么,ndk 和保活是啥关系?
|
31
Mutoo 2018-07-11 09:24:47 +08:00
游戏用 java 写的话,移植性就差了,这也是为什么 cocos2d-x 能干掉 cocos2d-java 和 cocos2d-objc 的原因。
|
32
flyingghost 2018-07-11 11:06:35 +08:00
开放本身没有错,开放是吸引力,开放是创新之源,开放是避免同质化的途径之一。
但窗户打开,难免就会有苍蝇进来。关窗吗?自绝之路。正确的做法是完善从线下到线上的安全体系、监测体系、事后惩戒体系。 windows 占了你说的多少个优点?开放、一堆 Undocumented、蛋糕足够大。win 的生态也确实足够糟糕的。那怎么办呢? |
33
nicevar 2018-07-11 11:09:32 +08:00
@s82kd92l 还有很多第三方合作 app 的,没有推广渠道,盒子卖不了几个
另外 java 的混淆在怎么折腾防护能力也高不到哪去,还是 smali,静态分析动态分析不是什么问题,你想一下 windows 安全对抗发展那么多年,什么加密加壳虚拟机自己写 loader 都还被击破,我不知道你有没有听过安全发展那个笑话,一个 10G 的程序运行了一个小时后打印出了 hello world |
34
VYSE 2018-07-11 11:25:00 +08:00
其实禁用 NDK 没啥用, 你得禁 ELF 执行, 不然 ptrace hook 上去也可以实现 JNI 提供的功能, 现有 Android 不现实, 只能通过 secommp 这些再进行些 API 管控
|
35
s82kd92l OP |
37
jdgui 2018-07-11 11:38:37 +08:00
@zj299792458 之前版本的,liunx 运行个 c 进程去唤醒 app
|
38
nicevar 2018-07-11 11:55:38 +08:00 1
@s82kd92l 你错了,不是五十步笑百步,是五十步笑千步,如果 java 混淆能挡住 5%的人,那封装成 so 稍作处理就可能挡住 80%的人,差距是巨大的,软件根本不可能保证不被盗,只能阻止一部分人,这个值当然越大越好了
另外其实我想说即使没有 NDK,也会有一整套的东西出来,你没见过 iPhone 出来的时候不能开发软件没有 sdk,那开发链接工具是怎么来的了?除非你 android 连 rom 都不让人摸到 |
39
cxh116 2018-07-11 12:22:19 +08:00 via Android
如果 android 像 ios 只有一个应用市场,乱搞直接封帐号,就不会有这么多问题了。
从技术层面解决你说的应用问题是不存在的,人家 ios 还可以越狱乱调私有接口。但正规的应用不敢这样做。 |
40
zj299792458 2018-07-11 12:47:56 +08:00 via iPhone
@jdgui 怎么唤醒?
|
43
s82kd92l OP @VYSE 你可能对 exec()和 syscall 有误解...
exec()是执行命令行程序。syscall 是指 open/fork/ioctl 这种.这年头就算是 NDK 程序也没有随便用 syscall 的本事,会被 seccomp 挡住。 |
44
VYSE 2018-07-11 16:33:13 +08:00 1
@s82kd92l #43 你可能有误解, 我说 exec 是说不需要 NDK, ELF 始终是可以执行的, 甚至可以用 Linux arm toolchain 静态编译出不依赖 Android linker 的 ELF.
第二 ptrace 的确是 syscall, 见 bionic 代码 unsigned int __fastcall _ptrace(enum __ptrace_request a1, void *a2, void *a3) { unsigned int result; // r0 result = linux_eabi_syscall(__NR_ptrace, a1, a2, a3); if ( result > 0xFFFFF000 ) result = j___set_errno_internal(-result); return result; } 第三 ptrace 自己进程来做 code modify 从来没有被 seccomp 封过, 见市面多数加壳方案. |
45
s82kd92l OP @VYSE ptrace 自己进程和 ptrace 其他进程两码事,普通 linux 发行版都有 yama 防止随便 attach 其他进程,何况 android 这种久经考验的
|
46
VYSE 2018-07-11 18:21:29 +08:00
@s82kd92l #45 我原话"ptrace hook 上去也可以实现 JNI 提供的功能", 你怎么非要脑洞到 ptrace 其他 UID 的进程, 我是说通过 ptrace 可以实现很多 JNI 调用, 比如 VirtualApp 里用到的 Substrate.
|
49
youxiachai 2018-07-11 18:31:32 +08:00
我感觉...早期.android 不开放 NDK..早就 GG 了...毕竟远古时代...手机硬件性能那么差
说败笔..其实,你说的缺点,其实大部分都不是事...起码对于一个生态来说... 不能因为有黑暗的存在..就不能用光明的手段啊... lz 显然陷入一种因咽废食的状态.. |
50
s82kd92l OP @VYSE 嗯,你是对的。我在 termux 里能够对其他 pid 做 strace, 看来目前 Android 是允许同一个 uid 下的进程相互调试的
|
51
tempdban 2018-07-12 00:49:39 +08:00 via Android
你还是不明白啊,谷歌要是想做,他有一百万种方法限制你,你附言里提到的方法已经是很麻烦的办法了。
国产手机系统就限制的不错,方案也成熟,谷歌拿去直接用呗。 他为啥不做?就是不想得罪开发者。 还有兄弟,等到你要实现一个需求,但是因为系统限制实在无法实现的时候,你就知道愁了,让马儿跑又不让马儿吃草的例子多了去了,用户才不管怎么解释,他就是要,WP 就是活生生的例子,多少 WP 软件作者被喷到不行,更新纪录里写着爱用不用。 hook/hotpatch 修改 Java VM 那也只是改了我这个进程的内存页,别的进程影响不到啊。 各种 native 层的进程保活,长连接保活,访问私有 API。 兄弟你 ps 都能看出来的东西,系统真的看不出来么,API 不存在私有不私有兄弟。能用隐藏的 API 那是本事,API 没用做他干嘛。 别用户的思维来搞产品,懂得 app 背后机制的人还是少数。 有很多事是我们不得不妥协的 |
52
tempdban 2018-07-12 01:02:11 +08:00 via Android
还有兄弟,你正文中每个英文单词,都是要仔细打磨你才能明确的知道他究竟在干些什么。
|
53
tempdban 2018-07-12 01:13:24 +08:00 via Android
@VYSE 正想抽空看一眼 VirtualApp 到底是怎么一个黑科技,原来还是 ptrace 啊,感谢送上。
另外请教一下 android 的 linker 和平时用的 gold 有啥区别,不都是读 ELF 吗? |
54
VYSE 2018-07-12 03:13:19 +08:00
@tempdban #53 linker 本质是负责加载 so, 最初两者只是实现细节上的区别, 比如之前研究一般情况可以替换:
https://v-e-o.blogspot.com/2017/12/run-arm-executables-on-linux-x86-with.html 不过最新的 Android linker 已经加入 PIE only, namespace, ZIP LD_LIBRARY_PATH 等一堆 feature, 现在已经没法直接移植到 Linux 平台 我司也有产品直接在 LXC 里跑 Android, 两套 linker 随便用 |
55
VYSE 2018-07-12 03:55:03 +08:00
@tempdban #53 搞错了一点 VirtualApp 并没有用 ptrace 把 substrate so inject 进去, 而是自己代码直接 load library 的. Frida, ADBI 这种会用 ptrace.
|
56
qsjh898 2018-07-12 11:06:35 +08:00
要是没有 NDK,你还用个鸡毛微信
|
57
codehz 2018-07-13 12:47:54 +08:00
@VYSE #54 用 hybris 这个库还是可以加载 android 上的 so 文件的,不过由于自己实现了链接的逻辑,所以 gdb 调试就没法用了
|