Well there are two callbacks.
One is definitely an update check, and doesn't send anything other than your scope serial number.
The other is a "upload" function but it's not set to upload anything that would reveal it's hacked since that is only in appEntry with no file system modifications.
More than likely it's a diagnostic/troubleshooting function. But I can't even find where it's triggered and is most likely not in use.
Hmm I still don't get this.
The function at 0x000c4fe4 downloads from
http://www.rigol.com/Support/ProductUpgradeStatue?SN=%1&result=1 to also ask for a firmware.xml. It downloads the content via HTTP to /tmp/firmware.xml. For me, currently the downloaded content is
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<h1>301 Moved Permanently</h1>
<p>The requested resource has been assigned a new permanent URI.</p>
<hr/>Powered by Tengine</body>
</html>
EDIT: Note the typo and the change of URL to what skip reported:
[...] scope does a regular http (not https) get of "/Support/ProductUpgradeFile?sn=MS5xxxxxxxxxx&hardware=1.0&behaviour=soft&software=00.01.01.02.03 HTTP/1.1".
Function at 0x000c46f4: Triggers on manual update, triggers the dowload of firmware.xml via 0x000c4fe4 via an unclear mechanism. It also generates the hardware/behaviour/software strings for the URI which gets extended to the above URI somewhere. It contains references to
http://www.rigol.com/up.aspx?act=%1&filename=%2.dat. with the %1="up". It is unclear when this triggers. It looks like an XML path lookup of "storage/firmware" is involved somehow.
EDIT2: Yep it is XML. It actually loads the URLs from /rigol/resource/dsometa.xml, and these sound far more up-to-date.
<firmware>http://www.rigol.com/Support/ProductUpgradeFile?sn=%1$hardware=%2$behaviour=%3$software=%4</firmware>
<uploadurl>http://www.rigol.com/up.aspx?act=%1$filename=%2</uploadurl>
That upload-url makes me a bit squeezy.
In any case, it fails to parse this firmware.xml, probably due to its wrong content, and fails with "ASSERT: "false" in file cmetanode.cpp, line 121" on stdout. Since appEntry exits, the GUI appears to hang.
I would guess that on some machines, the update check triggers automatically without manual update check, gets a "mal-formed" XML and then appEntry dies. I don't get why my scope doesn't do it however...
The backtrace to 0x000c4fe4 when executing a manual update (after breakpoint at 0x000c46f4 has triggered)
#0 0x000c4fe4 in ?? ()
#1 0xb62fec28 in QMetaObject::activate(QObject*, int, int, void**) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#2 0x000d42e8 in CHttp::sigFinish(QNetworkReply::NetworkError) ()
#3 0x000cf3f0 in ?? ()
#4 0x000cf1bc in ?? ()
#5 0x000d3e88 in ?? ()
#6 0xb62fec28 in QMetaObject::activate(QObject*, int, int, void**) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#7 0xb6630770 in ?? () from target:/rigol/Qt5.5/lib/libQt5Network.so.5
#8 0xb66907b4 in ?? () from target:/rigol/Qt5.5/lib/libQt5Network.so.5
#9 0xb62fc8c4 in QMetaCallEvent::placeMetaCall(QObject*) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#10 0xb630006c in QObject::event(QEvent*) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#11 0xb6bb76e8 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from target:/rigol/Qt5.5/lib/libQt5Widgets.so.5
#12 0xb6bbcccc in QApplication::notify(QObject*, QEvent*) () from target:/rigol/Qt5.5/lib/libQt5Widgets.so.5
#13 0xb62ce5bc in QCoreApplication::notifyInternal(QObject*, QEvent*) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#14 0xb62d151c in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#15 0xb6325ec0 in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#16 0xb5914ba0 in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from target:/rigol/Qt5.5/plugins/platforms/libqlinuxfb.so
#17 0xb62cc3f0 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#18 0xb62cc81c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#19 0xb62d43e0 in QCoreApplication::exec() () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#20 0x0004334c in ?? ()
#21 0xb5da7874 in __libc_start_main () from target:/lib/libc.so.6
#22 0x00042d98 in ?? ()
BTW. The backtrace of the assert is the following
#0 0xb5dbfb48 in raise () from target:/lib/libc.so.6
#1 0xb5dc4ed8 in abort () from target:/lib/libc.so.6
#2 0xb60f1018 in QMessageLogger::fatal(char const*, ...) const () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#3 0xb60ec660 in qt_assert(char const*, char const*, int) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#4 0x0087256c in ?? ()
#5 0x0087065c in ?? ()
#6 0x000c5b28 in ?? ()
#7 0x000c50a0 in ?? ()
#8 0x000d2544 in ?? ()
#9 0xb62fec28 in QMetaObject::activate(QObject*, int, int, void**) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#10 0x000d42e8 in CHttp::sigFinish(QNetworkReply::NetworkError) ()
#11 0x000cf3f0 in ?? ()
#12 0x000cf1bc in ?? ()
#13 0x000d3e88 in ?? ()
#14 0xb62fec28 in QMetaObject::activate(QObject*, int, int, void**) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#15 0xb6630770 in ?? () from target:/rigol/Qt5.5/lib/libQt5Network.so.5
#16 0xb66907b4 in ?? () from target:/rigol/Qt5.5/lib/libQt5Network.so.5
#17 0xb62fc8c4 in QMetaCallEvent::placeMetaCall(QObject*) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#18 0xb630006c in QObject::event(QEvent*) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#19 0xb6bb76e8 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from target:/rigol/Qt5.5/lib/libQt5Widgets.so.5
#20 0xb6bbcccc in QApplication::notify(QObject*, QEvent*) () from target:/rigol/Qt5.5/lib/libQt5Widgets.so.5
#21 0xb62ce5bc in QCoreApplication::notifyInternal(QObject*, QEvent*) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#22 0xb62d151c in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#23 0xb6325ec0 in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#24 0xb5914ba0 in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from target:/rigol/Qt5.5/plugins/platforms/libqlinuxfb.so
#25 0xb62cc3f0 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#26 0xb62cc81c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#27 0xb62d43e0 in QCoreApplication::exec() () from target:/rigol/Qt5.5/lib/libQt5Core.so.5
#28 0x0004334c in ?? ()
--Type <RET> for more, q to quit, c to continue without paging--
#29 0xb5da7874 in __libc_start_main () from target:/lib/libc.so.6
#30 0x00042d98 in ?? ()
Where 0x000c5b28 is inside the firmware.xml parser at 0x000c5aac, which extracts firmware comments, version and url for download.