吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7121|回复: 34
收起左侧

[原创] 『原创』去掉RedisDesktopManager更新提示弹窗-篇2

  [复制链接]
syncking 发表于 2020-12-23 21:47
本帖最后由 syncking 于 2020-12-24 09:03 编辑

去掉RedisDesktopManager更新提示弹窗-篇2

上篇是去掉了RDM的弹窗,但是也只是仅仅去掉了弹窗。但是请求更新的操作还是存在的,这次我们把请求这个操作过程也给去了,这样就显得稍微完美一点。建议看完上一篇再看本篇,很多操作这篇不是很详细。

上篇传送门

准备

  • 工具
    • x64dbg
    • Wireshark
    • 安装好的RedisDesktopManager

过程

我们可以用Wireshark看一下,打开选择Wirshark监听上网的网卡(忽略vm虚拟网卡,就以太网有波动那就是它了,双击进去)

image-20201222213849082.png

过滤器设置为http,正常打开运行RDMWireshark中发现一个/get-update请求。

214211c6rt7r055tr78r00.png

rdm.exe文件丢到x64dbg搜索字符串 『右键,搜索范围->所有模块->字符串引用』,这次搜索关键字『get-update

image-20201222215140830.png

20201222215344803

20201222215344803

上面这些图中的关键字都可以在RDM2020.5的源码Updater::Updater()方法中找到

这是从github上扒拉出来的RDM2020.5的源码

// ============= app.cpp ============
void Application::OnNewUpdateAvailable(QString& url) {
  QMessageBox::information(
      nullptr, "New update available",
      QCoreApplication::translate(
          "RDM", "Please download new version of RDM: %1")
              .arg(url));
}

Application::Application(int& argc, char** argv)
    : QApplication(argc, argv),
      m_engine(this),
      m_qmlUtils(QSharedPointer<QmlUtils>(new QmlUtils())),
      m_events(QSharedPointer<Events>(new Events())) {
  // Init components required for models and qml
  initAppInfo();
  initProxySettings();
  processCmdArgs();
  initAppFonts();
  initRedisClient();
#ifndef RDM_APPSTORE
  initUpdater();
#endif
  installTranslator();
  initPython();
}

void Application::initUpdater() {
  // 这个new Updater()调用了Updater::Updater()构造方法
  m_updater = QSharedPointer<Updater>(new Updater());
  connect(m_updater.data(), SIGNAL(updateUrlRetrived(QString&)), this,
          SLOT(OnNewUpdateAvailable(QString&)));
}

// =============== updater.cpp ===================
void Updater::requestFinished(QNetworkReply* response)
{
    if (response->error() != QNetworkReply::NoError
        || response->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() != 200)
    {
        return;            
    }

    QString result(response->readAll());

    if (!result.isEmpty()) 
    {
        emit updateUrlRetrived(result);
    }
}

Updater::Updater()
{
    manager = new QNetworkAccessManager();

    QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(requestFinished(QNetworkReply*)));

    QString platform("unknown");

    #ifdef Q_OS_WIN32
        platform = "windows"; 
    #endif

    #ifdef Q_OS_LINUX
        platform = "linux"; 
    #endif

    #ifdef Q_OS_MACX
        platform = "osx"; 
    #endif

    QUrl updateUrl(
        QString("http://%1/get-update?version=%2&platform=%3")
            .arg("rdm.dev")
            .arg(QCoreApplication::applicationVersion())
            .arg(platform)
        );

    manager->get(QNetworkRequest(updateUrl));

}

看一遍逻辑也是能看清楚的

Application::Application()

=> Application::initUpdater()

=>Updater::Updater()

=> 异步请求,请求完之后回调Updater::requestFinished()

=> requestFinished检查返回值不为空 触发

=> updateUrlRetrived(result)

=> 执行槽函数 Application::OnNewUpdateAvailable(QString& url) => 这样MessageBox就出来了

从源码中看到上图中00007FF76E8AF439指令在Updater::Updater()构造方法中。

现在思路就清晰了,nop 掉Updater::Updater() 函数调用,不执行 manager->get(QNetworkRequest(updateUrl));

00007FF76E8AF439打上断点重新运行,运行到断点处,接着就是看图操作。

image-20201222222010391.png

下面就是调用Updater::Updater()的地方。我们要nop掉Updater::Updater()函数。

image-20201223205154895.png

nop后

image-20201223205304262.png

应用补丁到rdm.exe文件上去

image-20201223205447806.png

成果

abc1.gif

总结

原本是想从MessageBox弹窗处回溯到调用处。但是调试半天未果,看看源码看样子像是异步调用,可能是有点难度了。

在第一篇的回复下面看到有人发的一部分源码,所以就去github上面把2020.5的源码给下载了下来,看了看帮助不算太大,但是至少知道的大概的执行逻辑,最后还是选择从get-update关键字入手简单点。

成品:链接:https://pan.baidu.com/s/1OkqSD6ClbOTHCU8QVtWFvw   提取码:qdn7

免费评分

参与人数 13吾爱币 +19 热心值 +12 收起 理由
tangyb828 + 1 + 1 谢谢@Thanks!
爱你么么哒呀 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
pj-kamiya + 1 + 1 我很赞同!
花落细无声 + 1 + 1 热心回复!
wanfon + 1 + 1 谢谢@Thanks!
Mint_Grass + 1 + 1 用心讨论,共获提升!
lene + 1 + 1 用心讨论,共获提升!
ljj_1025 + 1 + 1 谢谢@Thanks!
Jomye + 1 + 1 我很赞同!
tb612443 + 1 + 1 热心回复!
wataxi + 1 谢谢@Thanks!
WAlitudealiy + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

indextank 发表于 2021-1-3 15:36
hosts文件中,直接加入:127.0.0.1 rdm.dev
不香嘛???
费这么大事情,就为了不提示,明明可以很简单,干嘛浪费时间曲线救国。。。
而且你这版本是开源版本的,ssh的还不能用.
 楼主| syncking 发表于 2021-1-4 22:12
indextank 发表于 2021-1-3 15:36
hosts文件中,直接加入:127.0.0.1 rdm.dev
不香嘛???
费这么大事情,就为了不提示,明明可以很简单, ...

你说的对,
ohh_haolin 发表于 2020-12-23 21:57
Gan125 发表于 2020-12-23 22:06
感谢分享!
零下八度 发表于 2020-12-23 23:19
下一步就是编译RDM了,等你编译完了,咱再说下一步的下一步
吃半个馒头 发表于 2020-12-24 00:00
学到很多,感谢大大分享! 有时间我也试试
blawhickte 发表于 2020-12-24 00:08
有意思, 学习了~!
头像被屏蔽
mokson 发表于 2020-12-24 08:22
提示: 作者被禁止或删除 内容自动屏蔽
潇洒哥er 发表于 2020-12-24 08:31
进来膜拜楼主的, 开启了我的新思路。原来可以这样暴破啊,以前我都只是把域名hosts掉,但明显这个用github的不能这样操作。
 楼主| syncking 发表于 2020-12-24 08:45
零下八度 发表于 2020-12-23 23:19
下一步就是编译RDM了,等你编译完了,咱再说下一步的下一步

大佬教我,哈哈
泽yu 发表于 2020-12-24 11:11
谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 07:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表