V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
usb
V2EX  ›  Python

Python 在 Android 上如何取得 root 权限以改写系统文件?

  •  
  •   usb ·
    usb233 · 2016-01-05 13:55:32 +08:00 · 7142 次点击
    这是一个创建于 3249 天前的主题,其中的信息可能已经有所发展或是发生改变。
    rt, 都找不到相关资料
    40 条回复    2016-01-08 10:59:56 +08:00
    tempdban
        1
    tempdban  
       2016-01-05 14:06:47 +08:00 via Android
    要么你 su -c python
    要么 os.system('su -c')
    usb
        2
    usb  
    OP
       2016-01-05 14:10:07 +08:00
    @tempdban os.system('su -c') 后有授权通知,但打开系统文件还是显示无权限
    usb
        3
    usb  
    OP
       2016-01-05 14:15:43 +08:00
    @tempdban os.system('su -c')
    a = open("/system/etc/a","w")
    print("success!")

    print 不出来
    clino
        4
    clino  
       2016-01-05 14:25:01 +08:00
    os.system 是调用一个子进程 并不会对自己有所影响
    clino
        5
    clino  
       2016-01-05 14:25:42 +08:00
    照楼上的说应该是 os.system('su -c cat /system/etc/a')
    usb
        6
    usb  
    OP
       2016-01-05 14:26:10 +08:00
    @clino 那应该怎么办?
    usb
        7
    usb  
    OP
       2016-01-05 14:28:34 +08:00
    @clino 嗯嗯。等我试试
    tempdban
        8
    tempdban  
       2016-01-05 15:32:41 +08:00 via Android
    @clinoThat's right .
    我想让他琢磨一下,结果感觉还是太早了。
    usb
        9
    usb  
    OP
       2016-01-05 16:33:51 +08:00
    @clino @tempdban 还是 error30
    tempdban
        10
    tempdban  
       2016-01-05 17:33:29 +08:00 via Android
    @usb su -c 是用别的用户执行 c 后边跟的命令,不是说执行完你就是特权用户了。
    usb
        11
    usb  
    OP
       2016-01-05 18:01:41 +08:00
    @tempdban 那应该把代码写到-c 后面吗?新手求不喷😁
    usb
        12
    usb  
    OP
       2016-01-05 18:03:13 +08:00
    @tempdban '(' unexpected
    ChiChou
        13
    ChiChou  
       2016-01-05 20:51:02 +08:00
    su -c python xxx.py
    usb
        14
    usb  
    OP
       2016-01-05 21:10:57 +08:00
    @ChiChou testpy.py:
    (can't execute: Permission denied)
    root 权限都给了啊
    usb
        15
    usb  
    OP
       2016-01-05 21:11:48 +08:00
    @ChiChou
    (testpy.py: can't execute: Permission denied)
    ChiChou
        16
    ChiChou  
       2016-01-05 22:27:50 +08:00
    @usb python xxx.py ,不是直接 xxx.pyxxx.py 需要给文件 chmod 0777 ,然后在 python 开头第一行加上 #!/path/to/pyhon ( python 的完整路径)
    tempdban
        17
    tempdban  
       2016-01-06 00:45:56 +08:00 via Android
    import sys,os
    args = [sys.executable] + sys.argv
    os.execlp('su', 'su', '-c', ' '.join(args))
    usb
        18
    usb  
    OP
       2016-01-06 07:19:14 +08:00
    @ChiChou
    我有写 python 啊~ 那是终端显示的
    tempdban
        19
    tempdban  
       2016-01-06 09:03:34 +08:00 via Android
    @usb 看我上面回复
    usb
        20
    usb  
    OP
       2016-01-06 09:18:47 +08:00
    @tempdban
    这次是
    CANNOT LINK EXECUTABLE: library "libpython3.2m.so.1.0" not found
    tempdban
        21
    tempdban  
       2016-01-06 09:29:59 +08:00 via Android
    @usb 你用的什么 app 啊这是
    tempdban
        22
    tempdban  
       2016-01-06 09:35:36 +08:00 via Android
    @usb 莫非是直接调用的 libpython ,而不是用的 interpreter
    usb
        23
    usb  
    OP
       2016-01-06 10:09:36 +08:00
    @tempdban 安卓上只有 qpython 呢
    tempdban
        24
    tempdban  
       2016-01-06 10:19:39 +08:00 via Android   ❤️ 1
    @usb 谁说的一号我刚编译了 pyrhon2.7 armeabi bionic
    usb
        25
    usb  
    OP
       2016-01-06 10:52:22 +08:00
    @tempdban 你厉害_(:з」∠)_
    tempdban
        26
    tempdban  
       2016-01-06 10:59:45 +08:00 via Android
    @usb 不是这个意思,你的环境限制你只能从终端读取字符
    usb
        27
    usb  
    OP
       2016-01-06 11:55:27 +08:00
    @tempdban 呃呃,也就是说 Python 脚本在 Android 上不能取得 root 权限?
    tempdban
        28
    tempdban  
       2016-01-06 12:16:53 +08:00 via Android
    @usb os.system('su -c python')能执行么
    usb
        29
    usb  
    OP
       2016-01-06 12:19:24 +08:00
    @tempdban
    error: only position independent executables (PIE) are supported.
    呃呃
    WayToPlay
        30
    WayToPlay  
       2016-01-06 12:41:53 +08:00
    要 root android ,以 linux root 执行 python 干嘛啊,直接先执行 adb root && adb reboot 就行了吧。
    如果 adb 没有权限,先在 root 下 adb kill-server 。
    shyling
        31
    shyling  
       2016-01-06 12:53:12 +08:00
    通过 popen 执行 su -,然后会启动一个 root 权限的 shell ,通过这个 shell 操作。。其他的方法的话。。
    通过 shell 设置你的二进制文件 setuid 位,然后通过 os.setuid(0)。不过估计不太可行。。
    usb
        32
    usb  
    OP
       2016-01-06 12:59:25 +08:00
    @WayToPlay 你可能误解了,我是想用 Python 脚本修改系统文件的
    usb
        33
    usb  
    OP
       2016-01-06 13:02:09 +08:00
    @shyling 其实我是想用 Python 来自动化改 hosts 文件的,每次都 shell 不是更麻烦了吗 Q3Q
    tempdban
        34
    tempdban  
       2016-01-06 13:14:48 +08:00 via Android
    @usb 你看,qpython 是调用 libpython 实现的功能,这种方式都比较麻烦,需要调用 libpython 的进程属主是 su 用户,这个属主应该是 app_process
    tempdban
        35
    tempdban  
       2016-01-06 13:17:22 +08:00 via Android
    @usb 所以……还是用 shell 吧,正好学学 shell 脚本,再下载一个叫 tasker 的东西
    tempdban
        36
    tempdban  
       2016-01-06 13:18:20 +08:00 via Android
    @usb 或者你和 qpython 提意见 让他们用 pie 编译 python
    usb
        37
    usb  
    OP
       2016-01-06 13:19:13 +08:00
    @tempdban 不太明白😁那还有办法吗?
    usb
        38
    usb  
    OP
       2016-01-06 13:20:38 +08:00
    @tempdban 太麻烦了。没动力学😂
    shyling
        39
    shyling  
       2016-01-08 10:29:25 +08:00 via iPad
    @usb 写一个二进制文件做更新 hosts 的操作。。 然后用 su -c 执行
    usb
        40
    usb  
    OP
       2016-01-08 10:59:56 +08:00
    @shyling 这。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 20:48 · PVG 04:48 · LAX 12:48 · JFK 15:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.