我正在编辑某些binaries路径,而不是重新编译它们。
我想用一条相同长度的路径替换我无法创建的/lib/ld-linux-armhf.so.3
,我可以创建而不需要根植电话。它应该是相同长度的东西,因为我正在编辑二进制文件。在下面列出的不同可能性之后,我选择了路径/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
,但我的手机是specific,而且根据@ChrisStratton没有记录。与/data/logcat_log
相同。
/sdcard
被排除在外,因为保险丝选项rw,nosuid,nodev,relatime,user_id=1015,group_id=1015,default_permissions,allow_other
限制了链接和可执行文件,并且/lib/ld-linux-armhf.so.3
将被执行。
有谁知道我还能做到这一点吗?
答案 0 :(得分:1)
您是否考虑使用PatchELF而不是滚动自己的二进制编辑?它声称足够聪明,可以根据需要在ELF头中插入额外的页面,以便为更长的解释器或RPATH字段腾出空间。这将允许您使用真正的解释器值而不是需要符号链接。
答案 1 :(得分:0)
我终于偶然发现apk, AIDE, that can create simple apk,它不需要任何x86计算机,而且可以在手机上运行。没有支付任何东西,在二十分钟内,我创建了我的第一个apk,并能够在临时授权未知来源后安装它。这是我的第一个java程序。我为apk选择了一个简短但信息丰富的名称,com.symli
(com.
似乎是必要的)。
然后我修改了编辑器的标签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(权限:无!SHA256sum:01fd17a8700f2cb5b5bb943b38b623b1400679fa03c35ccb204619d1d5d486ff MD5sum:879af0633504ab25462a1f9b2303587e)