如何使用短全路径创建符号链接?

17

我正在编辑一些二进制文件的路径binaries,而不需要重新编译它们。

我想要替换掉/lib/ld-linux-armhf.so.3,但我无法创建它。我想要创建一个同样长度的路径以替代它,而且我不想root手机。因为我正在编辑二进制文件,所以新路径应该与原路径长度相等。在下面列出的多种可能性中,我选择了路径/data/data/com.clk/.so.3。我的目标是创建符号链接/data/data/com.clk/.so.3,让它指向/data/data/com.spartacusrex.spartacuside/gentoo_armv6l/lib/ld-linux-armhf.so.3

我最开始使用了/proc/5781/cwd/rmhf.so.3,但它不能被其他应用程序(即其他Linux账户)读取。

我尝试了/data/.tmp,但这对我的手机来说是特定的,并且没有按照@ChrisStratton的文档进行记录。同样的情况也适用于/data/logcat_log/sdcard被排除,因为fuse选项rw,nosuid,nodev,relatime,user_id=1015,group_id=1015,default_permissions,allow_other限制了链接和可执行文件,而/lib/ld-linux-armhf.so.3需要被执行。
有人知道我该如何完成这个任务吗?

2
不,它们并不是。在这方面,您所发现的情况因Android版本而异。考虑使用库路径覆盖环境变量来启动您的二进制文件。 - Chris Stratton
符号链接无法克服安全限制。如果符号链接的目标路径对您不可访问,则该链接对您无效。您可以使用硬链接将位于对您不可访问的目录中的文件变成对您可访问的目录。(必须由具有两个位置访问权限的人创建硬链接。) - Kaz
@Kaz,我的兴趣在于创建符号链接,以便可以通过较短的全路径访问具有长全路径的文件。因为,在编辑二进制文件以将“/lib/ld-linux-armhf.so.3”替换为该二进制文件的实际位置时,我只能使用那么多字符,不能再多了。权限问题是由https://dev59.com/bWIj5IYBdhLWcg3wPzDH?noredirect=1#comment30911671_20459834提出的,这里没有访问完整路径“/data/data/com.spartacusrex.spartacuside/gentoo_armv6l/lib/ld-linux-armhf.so.3”的权限问题,我只是遇到了长度问题。 - user2987828
我认为一个解决方案是修补 https://play.google.com/store/apps/details?id=com.clk 来添加我的符号链接。 - user2987828
在这种情况下,“我想用我可以访问的路径替换X”的措辞可以改进。 - Kaz
显示剩余15条评论
2个回答

1

您是否考虑过使用PatchELF而不是自己编写二进制编辑器?它声称足够聪明,可以根据需要在ELF头中插入额外的页面,以便为更长的解释器或RPATH字段腾出空间。这将允许您使用真实的解释器值,而不需要符号链接。


谢谢,我之前不知道PatchELF。在无法重新编译的情况下(这种情况并不经常发生),它会很方便。 - user2987828

0

我终于偶然发现了一个可以创建简单apk的apk, AIDE,它不需要任何x86电脑,而是在手机本身上运行。在没有支付任何费用的情况下,我用二十分钟创建了我的第一个apk,并在临时授权未知来源后成功安装了它。那是我第一个Java程序。我为apk选择了一个简短但信息量丰富的名称com.symlicom.似乎是必要的)。

然后我修改了编辑器的MainActivity.java选项卡,得到了:

package com.symli;

import android.app.*;
import android.os.*;

public class MainActivity extends Activity 
{
  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    try
    {
      Runtime.getRuntime().exec("ln -s /data/data/com.termux/com.symli /data/data/com.symli/n");
      Runtime.getRuntime().exec("chmod 1777 /data/data/com.symli");
    } catch (java.io.IOException e) {
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
}

然后我只需点击“运行”按钮,BOOM符号链接现在永久存在,/data/data/com.symli本身是一个可写的世界目录(设置了粘性位):
lrwxrwxrwx 1 10150 10150 50 Nov  3 13:17 /data/data/com.symli/n -> /data/data/com.termux/com.symli
drwxrwxrwt 4 10150 10150 4096 Nov  3  2015 /data/data/com.symli

我已将生成的 .apk 上传至 http://sf.net/projects/gentooandroid/files/symlinksForStackoverflowQuestion20459834v2.apk/download(权限:无!SHA256校验和:01fd17a8700f2cb5b5bb943b38b623b1400679fa03c35ccb204619d1d5d486ff,MD5校验和:879af0633504ab25462a1f9b2303587e)


在找短包名的shell应用时,我发现了这个APK制作工具com.aide.ui。现在,我将能够制作简单的APP,而不需要授权任何人查看我的个人隐私! - user2987828
部分代码 ; env > /data/data/com.symli/getRuntimeExecEnv 无法正常工作,因此读者可以将其忽略。如果读者使用我的 .apk(而不是使用 com.aide.ui),则无法从 .apk 中忽略该部分代码。 - user2987828

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接