编辑
2025-01-22
工作知识
0
请注意,本文编写于 86 天前,最后修改于 86 天前,其中某些信息可能已经过时。

目录

一、找出dbus的调用
二、复刻method
三、验证
四、如何防止

我们知道linux都是基于dbus来进行通信的,dbus分为server和client,也就是说,如果应用程序作为client发送消息,我们只需要劫持这条dbus即可将错误的dbus信息返回给client,这样就能修改核心信息,

一、找出dbus的调用

对于我们感兴趣的调用,我们可以通过监听的方式找到调用,如下:

dbus-monitor --system "destination=org.freedesktop.activation"

此时我们可以抓到某个method call如下:

method call time=1723771942.107726 sender=:1.4302 -> destination=org.freedesktop.activation serial=26 path=/org/freedesktop/activation; interface=org.freedesktop.activation.interface; member=date

二、复刻method

我们编写pro如activation-daemon.pro文件如下:

QT += dbus TARGET = activation-daemon SOURCES += activation-daemon.cpp HEADERS += activation-daemon.h 然后编写dbus interface class为activation-daemon.h如下: #include <QCoreApplication> #include <QtDBus> // https://doc.qt.io/qt-5/qdbusabstractadaptor.html class ActivationDaemon : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.activation.interface") public: ActivationDaemon(QObject *parent = nullptr) : QDBusAbstractAdaptor(parent) {} public slots: QString date() { return "kylin hack"; } };

最后实施这个类activation-daemon.cpp 如下:

#include "activation-daemon.h" int main(int argc, char *argv[]) { QObject object; QCoreApplication app(argc, argv); QDBusConnection connection = QDBusConnection::systemBus(); ActivationDaemon ac(&object); connection.registerObject("/org/freedesktop/activation", &object); connection.registerService("org.freedesktop.activation"); qDebug() << "Kylin Hacking..."; return app.exec(); }

编译后生成如下:

qmake && make

此时我们生成二进制为activation-daemon,将其替换到系统如下:

mv activation-daemon /usr/sbin/activation-daemon

三、验证

此时我们通过dbus-send验证这条dbus即可,如下

root@kylin:~# dbus-send --system --print-reply --dest=org.freedesktop.activation /org/freedesktop/activation org.freedesktop.activation.interface.date method return time=1723772343.990579 sender=:1.4205 -> destination=:1.4309 serial=115 reply_serial=2 string "kylin hack"

可以看到这条dbus的响应已经变成我们自己写的dbus服务了。大功告成

四、如何防止

针对上述这种手段,我们可以知道,基于篡改二进制导致的劫持可以导致dbus的响应被篡改,为了保障核心相关二进制不被篡改,我们可以通过加密解密的方式完成,详情请查看如下:

激活防破解方案-使用非对称加密和数字签名