用自定义函数替换共享对象中的二进制函数(在MIPSEL下)

用自定义函数替换共享对象中的二进制函数(在MIPSEL下),mips,embedded-linux,shared-objects,objdump,Mips,Embedded Linux,Shared Objects,Objdump,我正在尝试突破我的一个设备,它有一个MIPSEL核心(LittleEndian MIPS)。我之所以想这样做,主要是因为它附带的软件有点坏,不能按预期工作(而且制造商不会帮我,因为我每月不会购买数千台) 这个设备有一个telnet控制台,我已经有一个固件升级,它修改了一个共享对象(一个.so文件),该对象具有可重定位的代码。我知道有一个函数被调用。所以当我访问这个设备的某个功能时,我已经做了一个二进制代码来修改/etc/passwd,这样我就可以远程登录(这可以在我自己手动刷新自定义固件后完成)

我正在尝试突破我的一个设备,它有一个MIPSEL核心(LittleEndian MIPS)。我之所以想这样做,主要是因为它附带的软件有点坏,不能按预期工作(而且制造商不会帮我,因为我每月不会购买数千台)

这个设备有一个telnet控制台,我已经有一个固件升级,它修改了一个共享对象(一个.so文件),该对象具有可重定位的代码。我知道有一个函数被调用。所以当我访问这个设备的某个功能时,我已经做了一个二进制代码来修改/etc/passwd,这样我就可以远程登录(这可以在我自己手动刷新自定义固件后完成)

我已经“objdump”了这两个文件,并且对这两个文件都有异议

我的问题是:

如何将原始库中的给定函数替换为自定义函数,以便在计算机上运行代码?我知道objcopy可以工作,但要实现这一点,获取它的文档有点困难

我想做的就像病毒一样,虽然我不想传播它,也不想侵入别人的设备(顺便说一句,我说的这个设备非常罕见)

更新


我手动合并了二进制文件,以“二进制”方式复制自定义函数,然后手动更改重新定位文本。我注意只使用已经链接到原始共享对象的外部函数。但是,我将自己从设备中锁定,因为我修改了一个(奇怪的)在设备启动时使用的函数,而主二进制文件有一个缺点,可以让我更新它,因此停止工作。

您可以构建自己的共享库,其中包含该函数并使用LD_PRELOAD覆盖包含的一个。

这不起作用,因为我没有对该设备的shell访问权限。在C中使用setenv/putenv设置LD_PRELOAD,然后使用execvp如何。。。。但是如果你能做到的话,我想你可以安装一个外壳。。。问题不在于执行某些功能,而在于如何借助已经在工作的二进制文件来运行它。不管怎么说,我把我的设备弄坏了,我被一块漂亮的可远程登录的砖块锁在了外面。我想我需要找到另一个有故障的设备来测试我的黑客行为。