android su程序分析

android su程序分析


下载位置:https://github.com/ChainsDD/su-binary


1:第一步,查看android.mk
   查看这个可以了解编译结果是动态库,静态库,还是apk 还是bin文件。还有可以看到文件包含关系。这个我们可以看到是
   编译一个可执行文件su


2:需要百度搜索一些资料,/proc/%u/cmdline,getopt_long ,其他相关的百度下,很详细。


3:查看 su.c 505行
    if (ctx.from.uid == AID_ROOT || ctx.from.uid == AID_SHELL)
        allow(&ctx);
     如果为root或者shell执行,则直接允许。否则继续向下看:
     
     dballow = database_check(&ctx);
     这个便是读取之前我们是否保存了对此程序允许还是禁止root权限申请。依据返回结果,直接允许或者
     禁止,没有读到,则继续。
     通过 
     socket_create_temp  send_intent socket_accept  socket_send_request socket_receive_result
     来进行创建了一个socket,从send_intent里面我们可以看到使用了命令
      /system/bin/am broadcast -a ......  借助am脚本,向系统广播出去一个action=ACTION_REQUEST的
      广播,这时我们的Superuser.apk 的AndroidManifest.xml会注册接收此广播,弹出选择框。
      操作完毕后socket_receive_result函数会返回,
          if (!strcmp(result, "DENY")) {
        deny(&ctx);
    } else if (!strcmp(result, "ALLOW")) {
        allow(&ctx);
        进行拒绝允许操作。
        deny 函数发送一个拒绝广播send_intent(ctx, "", 0, ACTION_RESULT);,然后退出。
        allow函数发送一个允许广播send_intent(ctx, "", 1, ACTION_RESULT); 然后使用 execv(ctx->to.shell, ctx->to.argv + argc);将su进程直接替换成需要执行的
        程序。发送 send_intent函数的目的是Superuser.apk里面需要存储数据。
        至此android su程序分析完毕。


4:编译自己的su程序
  参照http://blog.csdn.net/hunhunzi/article/details/6043032,进行修改编译。
  编译完毕先将之前的su备份,将编译好的重命名为su_my,放到、system/bin下面,使用终端root状态下输入chmod 777 su_my
  chmod u+s su_my ,此时可以将su_my重名为su,编译完成。
参考:


http://os.51cto.com/art/201108/286445.htm
http://hi.baidu.com/williwill/item/377331b8dbedcca2ebba93ee
http://baike.baidu.com/view/906700.htm
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员入门进阶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值