Compare commits

..

32 Commits

Author SHA1 Message Date
aa85ee53a8 好啊,来啊
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-03-05 15:49:40 +00:00
ac45f5eec9 update debian/changelog.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-03-05 15:42:52 +00:00
84cc4a9208 fix: 修复在x86下的编译问题 2023-03-05 23:42:07 +08:00
795a6ca709 fix: 新后端多架构 2023-03-05 23:29:07 +08:00
dab4606e9b Merge branch 'Reason' of gitee.com:deepin-community-store/spark-store into Reason 2023-03-05 23:22:47 +08:00
1954196ba1 feat: 多架构编译支持 2023-03-05 23:21:36 +08:00
fc0edab44c feat:aarch64-shc-sender 2023-03-05 23:10:12 +08:00
a04cf4e6d9 Merge branch 'Reason' of https://gitee.com/deepin-community-store/spark-store into Reason 2023-03-05 23:03:26 +08:00
e85576e5f0 fix:sender.sh 2023-03-05 23:03:16 +08:00
efba72002a Merge branch 'dev' of gitee.com:deepin-community-store/spark-store into Reason 2023-03-05 22:57:18 +08:00
8ff46e554f Merge branch 'Reason' of gitee.com:deepin-community-store/spark-store into Reason 2023-03-05 22:51:47 +08:00
57db01aeaf Merge remote-tracking branch 'refs/remotes/origin/Reason' into Reason 2023-03-05 22:46:25 +08:00
0ceb99e121 补充依赖pkexec 2023-03-05 22:46:12 +08:00
83b539e7da update README.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-03-05 11:56:52 +00:00
ce6c0a4613 update README.zh.md.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-03-05 11:53:45 +00:00
cf59aeb4eb 使用hardcode的方式修改了url
请在后续版本改善
仅用于测试!!!!
web请求方式被改回旧版了,请在柚子发布新web后改回
2023-03-05 19:11:21 +08:00
17ca13cf00 !207 fix: 修复安装不成功时,关闭主窗口会直接退出,且重启后没有记录的问题
Merge pull request !207 from zty199/auto-7392693-dev-034d32be
2023-03-05 02:26:20 +00:00
zty199
b99225bd3c fix: 修复安装不成功时,关闭主窗口会直接退出,且重启后没有记录的问题
由于安装操作在线程中异步执行,原始逻辑中仅判断下载完成后就检测是否还有后续任务,存在安装未结束就退出的情况

Log: 调整判断后续下载任务位置到槽函数中,每个任务安装完成结果信号触发后优先判断安装是否成功,再判断是否需要退出
2023-03-04 22:42:08 +08:00
8f39710cdb postinst增加判断arch 2023-03-04 21:09:05 +08:00
7ec6be1969 aa64+x86 2023-03-04 21:01:54 +08:00
1543d75339 !206 去除无用的重复获取
Merge pull request !206 from shenmo/auto-4915358-dev-bc4479a1
2023-03-03 14:12:10 +00:00
77eb0d84c7 ss-feedback 2023-03-03 22:11:48 +08:00
68ddb3ffcc 去除无用的重复获取 2023-03-03 22:03:32 +08:00
58ea0249d8 调整效果 2023-03-03 21:29:33 +08:00
eb01bf253e !205 薪炎
Merge pull request !205 from shenmo/auto-4915358-dev-f2477c82
2023-03-03 13:28:58 +00:00
c22ce6290b 薪炎 2023-03-03 21:28:47 +08:00
1f7608bf77 2023-03-03 21:26:11 +08:00
16115a455b !204 4.2.3.1
Merge pull request !204 from shenmo/dev
2023-03-03 13:04:39 +00:00
ce680d54f9 !203 4231
Merge pull request !203 from shenmo/auto-4915358-dev-f244898b
2023-03-03 13:04:07 +00:00
a90699163f 4231 2023-03-03 21:02:31 +08:00
3edf39b4ef Merge branch 'Reason' of gitee.com:deepin-community-store/spark-store into Reason 2023-03-02 23:58:53 +08:00
f5c879b369 feat: aarch64 下x11时使用软件渲染 2023-03-02 23:49:08 +08:00
23 changed files with 1265 additions and 876 deletions

View File

@@ -1,6 +1,13 @@
# Spark App Store
[![star](https://gitee.com/deepin-community-store/spark-store/badge/star.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/stargazers) [![fork](https://gitee.com/deepin-community-store/spark-store/badge/fork.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/members)
## Branch: Reason
This branch is for aarch64-store support
---
## You are informed that the aarch64 support is EXPERIMENTAL and there is NO GUARANTEE that this branch will be supported in the future
Spark Store aims to collect Linux apps for the convieniece of Linux new comers
The collecting process needs everyone's help
@@ -77,4 +84,4 @@ PWA Client
spk://store/chat/store.spark-app.feedback
Copy and paste to search bar or in browser address bar after installing Spark Store
Copy and paste to search bar or in browser address bar after installing Spark Store

View File

@@ -1,6 +1,13 @@
# 星火应用商店
[![star](https://gitee.com/deepin-community-store/spark-store/badge/star.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/stargazers) [![fork](https://gitee.com/deepin-community-store/spark-store/badge/fork.svg?theme=gvp)](https://gitee.com/deepin-community-store/spark-store/members)
## 分支:原理
此分支用于aarch64-store支持
---
## 请注意aarch64的支持是实验性的并未确认持续支持
众所周知国内的Linux应用比较少wine应用难以获取优质工具分散在民间各大论坛无法形成合力难以改善生态
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
@@ -71,4 +78,4 @@ https://chat.shenmo.tech/
spk://store/chat/store.spark-app.feedback
(安装星火商店后在浏览器打开或复制到搜索栏打开)
(安装星火商店后在浏览器打开或复制到搜索栏打开)

19
debian/changelog vendored
View File

@@ -1,3 +1,22 @@
spark-store (4.2.3.2~Reason3) stable; urgency=medium
* 现在可在x86上编译使用同一套代码
* 暂时在aarch64上使用旧web----等待柚子
* 空间,疾疫,现在是静谧
-- shenmo <shenmo@spark-app.store> Sun, 5 Mar 2022 11:45:14 +0800
spark-store (4.2.3.2~only-for-test1) stable; urgency=medium
* 注意!!!!!! 此版本仅为启动测试还需要进一步完善——hardcode需要改善——关于web界面的调用方式需要在柚子做好之后修改成新的
* fix: hardcode
* fix: sender-d
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.2.3.1) stable; urgency=medium
* 修复: ssinstall验证签名出错
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
spark-store (4.2.3) stable; urgency=medium
* 修复: 编译依赖不全
* 修复: prerm导致的dpkg崩溃

3
debian/control vendored
View File

@@ -43,6 +43,7 @@ Depends:${shlibs:Depends}, ${misc:Depends},
aria2,
gcc,
zenity,
libc6-dev
libc6-dev,
policykit-1
Description: Spark Store
A community powered app store, based on DTK.

View File

@@ -2,13 +2,20 @@
case "$1" in
configure)
# Enable i386 arch
case `arch` in
x86_64)
echo "Enabling i386 arch..."
dpkg --add-architecture i386
;;
*)
echo "Not amd64, skip enable i386 arch"
;;
esac
# config for aptss
mkdir -p /etc/aptss/sources.list.d
ln -s -f /etc/apt/sources.list /etc/aptss/sources.list
# Remove the sources.list file
rm -f /etc/apt/sources.list.d/sparkstore.list
@@ -17,8 +24,6 @@ case "$1" in
mkdir -p /usr/local/bin
# Create symbol links for binary files
ln -s -f /opt/durapps/spark-store/bin/ussinstall /usr/local/bin/ussinstall
ln -s -f /opt/durapps/spark-store/bin/ussremove /usr/local/bin/ussremove
ln -s -f /opt/durapps/spark-store/bin/spark-store /usr/local/bin/spark-store
ln -s -f /opt/durapps/spark-store/bin/ssinstall /usr/local/bin/ssinstall
ln -s -f /opt/durapps/spark-store/bin/ssaudit /usr/local/bin/ssaudit
@@ -32,7 +37,7 @@ case "$1" in
# Compile sender module
echo "Compiling the Sender module..."
gcc -Wformat -Wformat-security -Werror=format-security /opt/durapps/spark-store/bin/ss-feedback/sender-d.sh.c -o /opt/durapps/spark-store/bin/ss-feedback/sender-d
gcc -Wformat -Wformat-security -Werror=format-security /opt/durapps/spark-store/bin/ss-feedback/sender-d_$(arch).sh.c -o /opt/durapps/spark-store/bin/ss-feedback/sender-d
# Install key
mkdir -p /tmp/spark-store-install/

View File

@@ -16,8 +16,6 @@ if [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then
rm -f /usr/local/bin/ssinstall
rm -f /usr/local/bin/ssaudit
rm -f /usr/local/bin/spark-dstore-patch
rm -f /usr/local/bin/ussinstall
rm -f /usr/local/bin/ussremove
rm -f /usr/local/bin/ss-apt-fast
rm -f /usr/bin/aptss

View File

@@ -95,7 +95,7 @@ void Application::setBuildDateTime(const QString &buildDateTime)
config.sync();
}
setApplicationVersion(DApplication::buildVersion(QString(APP_VERSION) + "-" + "Flamescion" + "-" + buildDateTime));
setApplicationVersion(DApplication::buildVersion(QString(APP_VERSION) + "-" + "Reason" + "-" + buildDateTime));
}
void Application::setMainWindow(MainWindow *window)

View File

@@ -5,6 +5,11 @@
#include <QDebug>
QString SparkAPI::serverUrl = "";
#ifdef __x86_64__
QString SparkAPI::serverUrlDir = "store";
#elif __aarch64__
QString SparkAPI::serverUrlDir = "aarch64-store";
#endif
SparkAPI::SparkAPI(QObject *parent) : QObject(parent)
{
@@ -54,7 +59,7 @@ void SparkAPI::getRAW(QUrl url)
void SparkAPI::getAppList(QString type)
{
get(QUrl(getServerUrl() + "store/" + type + "/applist.json"));
get(QUrl(getServerUrl() + SparkAPI::serverUrlDir + "/" + type + "/applist.json"));
}
void SparkAPI::getSearchList(QString keyword)
@@ -64,12 +69,17 @@ void SparkAPI::getSearchList(QString keyword)
void SparkAPI::getAppInfo(QUrl spk)
{
get(QUrl(getServerUrl() + "store" + spk.path().replace("+", "%2B") + "/app.json"));
get(QUrl(getServerUrl() + SparkAPI::serverUrlDir + spk.path().replace("+", "%2B") + "/app.json"));
}
QString SparkAPI::getArchDir()
{
return SparkAPI::serverUrlDir;
}
void SparkAPI::getAppDownloadTimes(QUrl spk)
{
getRAW(QUrl(getServerUrl() + "store" + spk.path().replace("+", "%2B") + "/download-times.txt"));
getRAW(QUrl(getServerUrl() + SparkAPI::serverUrlDir + spk.path().replace("+", "%2B") + "/download-times.txt"));
}
QString SparkAPI::getServerUrl()

View File

@@ -25,6 +25,7 @@ public:
void getRAW(QUrl url);
void getAppList(QString type);
void getAppInfo(QUrl spk);
static QString getArchDir();
signals:
void finished(QJsonArray);
@@ -33,6 +34,7 @@ signals:
private:
static QString serverUrl;
static QString serverUrlDir;
};
#endif // SPARKAPI_H

View File

@@ -43,8 +43,33 @@ int main(int argc, char *argv[])
// 浏览器开启 GPU 支持
#ifdef __sw_64__
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--no-sandbox");
#elif __aarch64__
if (!Utils::isWayland()) {
QString env = QString::fromUtf8(qgetenv("QTWEBENGINE_CHROMIUM_FLAGS"));
env = env.trimmed();
/**
* NOTE: 参考帮助手册代码对于部分ARM CPU 设备,
* --disable-gpu 保证 X11 环境下网页正常显示
* --single-process 避免 X11 环境下 QtWebEngine 崩溃(可选)
*/
env += " --disable-gpu";
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", env.trimmed().toUtf8());
QSurfaceFormat format;
format.setRenderableType(QSurfaceFormat::OpenGLES);
QSurfaceFormat::setDefaultFormat(format);
/**
* NOTE: https://zhuanlan.zhihu.com/p/550285855
* 避免 X11 环境下从 QtWebEngine 后退回到 QWidget 时黑屏闪烁
*/
qputenv("QMLSCENE_DEVICE", "softwarecontext");
DApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
}
#endif
/**
* FIXME: 对于麒麟 CPU 设备,调用 QtWebEngine 会导致客户端崩溃;
* 暂时不对 CPU 进行判断,对 wayland 环境下统一处理

View File

@@ -55,8 +55,8 @@ void AppIntoPage::openUrl(const QUrl &url)
// 获取图标
QNetworkRequest request;
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
qDebug() << api->getImgServerUrl() + "store" + url.path() + "/icon.png";
request.setUrl(QUrl(api->getImgServerUrl() + "store" + url.path() + "/icon.png"));
qDebug() << api->getImgServerUrl() + SparkAPI::getArchDir() + url.path() + "/icon.png";
request.setUrl(QUrl(api->getImgServerUrl() + SparkAPI::getArchDir() + url.path() + "/icon.png"));
request.setRawHeader("User-Agent", "Mozilla/5.0");
request.setRawHeader("Content-Type", "charset='utf-8'");
manager->get(request);
@@ -175,7 +175,7 @@ void AppIntoPage::openUrl(const QUrl &url)
ui->downloadButton->show();
}
isDownloading(SparkAPI::getServerUrl() + "store" + spk.path() + "/" + info["Filename"].toString());
isDownloading(SparkAPI::getServerUrl() + SparkAPI::getArchDir() + spk.path() + "/" + info["Filename"].toString());
}
api1->disconnect();
@@ -267,7 +267,7 @@ void AppIntoPage::setDownloadWidget(DownloadListWidget *w)
dw = w;
connect(w, &DownloadListWidget::downloadFinished, [=]()
{ isDownloading(SparkAPI::getServerUrl() + "store" + spk.path() + "/" + info["Filename"].toString()); });
{ isDownloading(SparkAPI::getServerUrl() + SparkAPI::getArchDir() + spk.path() + "/" + info["Filename"].toString()); });
}
void AppIntoPage::initUI()
@@ -375,7 +375,7 @@ void AppIntoPage::setAppinfoTags(const QStringList &tagList)
void AppIntoPage::on_downloadButton_clicked()
{
QString downloadUrl = SparkAPI::getServerUrl() + "store" + spk.path() + "/" + info["Filename"].toString();
QString downloadUrl = SparkAPI::getServerUrl() + SparkAPI::getArchDir() + spk.path() + "/" + info["Filename"].toString();
if (ui->downloadButton->text() == tr("Install"))
{
DownloadItem *item = dw->getDIList()[dw->getUrlList().lastIndexOf(downloadUrl)];

View File

@@ -1,6 +1,8 @@
#include "applistpage.h"
#include "ui_applistpage.h"
AppListPage::AppListPage(QWidget *parent) : QWidget(parent),
ui(new Ui::AppListPage)
{
@@ -38,18 +40,30 @@ void AppListPage::getAppList(QString type)
if (isDark)
{
theme = "theme=dark";
#ifdef __aarch64__
theme = "dark";
#endif
}
else
{
theme = "theme=light";
#ifdef __aarch64__
theme = "";
#endif
}
if (type == "")
{
url = api->getServerUrl() + "store/#/flamescion/?" + theme;
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/?" + theme;
#ifdef __aarch64__
url = api->getServerUrl() + "aarch64-store/#/"+ theme;
#endif
}
else
{
url = api->getServerUrl() + "store/#/flamescion/applist?type=" + type + "&" + theme;
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/applist?type=" + type + "&" + theme;
#ifdef __aarch64__
url = api->getServerUrl() + "aarch64-store/#/"+ theme + type;
#endif
}
ui->webEngineView->setUrl(url);
@@ -71,7 +85,7 @@ void AppListPage::getSearchList(const QString &keyword)
{
theme = "theme=light";
}
url = api->getServerUrl() + "store/#/flamescion/search?keywords=" + QUrl::toPercentEncoding(keyword) + "&" + theme;
url = api->getServerUrl() + SparkAPI::getArchDir() + "/#/flamescion/search?keywords=" + QUrl::toPercentEncoding(keyword) + "&" + theme;
ui->webEngineView->setUrl(url);
delete api;
}
@@ -86,7 +100,7 @@ void AppListPage::on_webEngineView_urlChanged(const QUrl &arg1)
if (arg1.path().right(8) == "app.json")
{
QString url = arg1.toString();
url = url.mid(url.indexOf("/store/"));
url = url.mid(url.indexOf("/" + SparkAPI::getArchDir() + "/"));
url = "spk:/" + url;
url = url.mid(0, url.indexOf("/app.json"));
qDebug() << "程序跳转链接地址:" << url;

View File

@@ -64,9 +64,9 @@ QString DownloadItem::getName()
/***************************************************************
* @brief 告知界面,准备安装
* @param
* @param
* @note 如果正在安装,返回-1
* @Sample usage: DownloadItem::install(0);
* @Sample usage: DownloadItem::install(0);
**************************************************************/
int DownloadItem::readyInstall()
{
@@ -110,9 +110,9 @@ void DownloadItem::setSpeed(QString s)
/***************************************************************
* @brief 安装当前应用
* @param int t, t为安装方式可以为 0,1,2
* @param int t, t为安装方式可以为 0,1,2
* @note 执行这个函数时,需要已经检查是否可以安装,但该函数仍然会再检测一次!
* @Sample usage: DownloadItem::install(0);
* @Sample usage: DownloadItem::install(0);
**************************************************************/
void DownloadItem::install(int t)
{
@@ -165,9 +165,9 @@ void DownloadItem::on_pushButton_3_clicked()
/***************************************************************
* @brief 实际安装应用
* @param int t, t为安装方式可以为 0,1,2
* @param int t, t为安装方式可以为 0,1,2
* @note 备注
* @Sample usage: slotAsyncInstall(0);
* @Sample usage: slotAsyncInstall(0);
**************************************************************/
void DownloadItem::slotAsyncInstall(int t)
{
@@ -238,5 +238,5 @@ void DownloadItem::slotAsyncInstall(int t)
ui->widget_spinner->hide();
DownloadItem::isInstall = false;
emit finished();
emit finished(error == 0 && !haveError && !notRoot);
}

View File

@@ -62,7 +62,7 @@ private slots:
void slotAsyncInstall(int t);
signals:
void finished();
void finished(bool success);
};
#endif // DOWNLOADITEM_H

View File

@@ -91,10 +91,14 @@ DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QStrin
{
return nullptr;
}
urList.append(downloadurl);
allDownload += 1;
toDownload += 1;
DownloadItem *di = new DownloadItem;
connect(di, &DownloadItem::finished, this, &DownloadListWidget::slotInstallFinished, Qt::QueuedConnection);
dlist << downloadurl;
downloaditemlist << di;
di->setName(name);
@@ -167,22 +171,9 @@ void DownloadListWidget::httpFinished() // 完成下载
{
continue;
}
toDownload -= 1; // 安装完以后减少待安装数目
qDebug() << "Download: 还没有下载的数目:" << toDownload;
if (toDownload == 0)
{
Application *app = qobject_cast<Application *>(qApp);
MainWindow *mainWindow = app->mainWindow();
if (mainWindow->isCloseWindowAnimation() == true)
{
qDebug() << "Download: 后台安装结束,退出程序";
qApp->quit();
}
}
downloaditemlist[nowDownload - 1]->free = true;
emit downloadFinished();
if (nowDownload < allDownload)
{
// 如果有排队则下载下一个
@@ -241,3 +232,23 @@ void DownloadListWidget::on_pushButton_clicked()
{
QDesktopServices::openUrl(QUrl("file:///tmp/spark-store", QUrl::TolerantMode));
}
void DownloadListWidget::slotInstallFinished(bool success)
{
// NOTE: 仅在安装成功后判断是否需要退出后台
if (success) {
toDownload -= 1; // 安装完以后减少待安装数目
qDebug() << "Download: 还没有下载的数目:" << toDownload;
if (toDownload == 0)
{
Application *app = qobject_cast<Application *>(qApp);
MainWindow *mainWindow = app->mainWindow();
if (mainWindow->isCloseWindowAnimation() == true)
{
qDebug() << "Download: 后台安装结束,退出程序";
qApp->quit();
}
}
}
}

View File

@@ -60,6 +60,7 @@ signals:
private slots:
void on_pushButton_clicked();
void slotInstallFinished(bool success);
};
#endif // DOWNLOADLISTWIDGET_H

View File

@@ -1,5 +1,17 @@
#!/bin/bash
case `arch` in
x86_64)
STORE_URL="store"
STORE_LIST_URL=""
;;
aarch64)
STORE_URL="aarch64-store"
STORE_LIST_URL="-aarch64"
;;
esac
SS_APT_FAST="/opt/durapps/spark-store/bin/apt-fast/ss-apt-fast"
if [ ! -e "/tmp/aptss-conf/apt-fast.conf" ];then
@@ -14,7 +26,7 @@ chmod -R 755 /tmp/aptss-conf
fi
if [ ! -e "/var/lib/apt/lists/d.spark-app.store_store_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ] && [ ! -e "/var/lib/apt/lists/mirrors.sdu.edu.cn_spark-store-repository_store_Packages" ];then
if [ ! -e "/var/lib/apt/lists/d.spark-app.store_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/apt/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ];then
echo "接收星火仓库软件信息中..."
mkdir -p /tmp/aptss-conf/
@@ -24,7 +36,7 @@ echo
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore.list"
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore${STORE_LIST_URL}.list"
sudo bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
#只更新星火源
@@ -72,13 +84,13 @@ echo
curl --silent -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore.list"
sudo curl --silent -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore${STORE_LIST_URL}.list"
sudo bwrap --dev-bind / / --bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list apt update -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
#只更新星火源
elif [ "$1" = "update" ];then
sudo curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore.list"
sudo curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://d.store.deepinos.org.cn/sparkstore${STORE_LIST_URL}.list"
mkdir -p /tmp/aptss-conf/

View File

@@ -1,2 +1,4 @@
# Feadback 反馈脚本
使用 shc 加密, 需要使用 cc、gcc 编译。
此处既支持amd64也支持aarch64参见mailget仓库loongarch的时候再修改

View File

@@ -1,817 +0,0 @@
#if 0
shc Version 4.0.3, Generic Shell Script Compiler
GNU GPL Version 3 Md Jahidul Hamid <jahidulhamid@yahoo.com>
shc -v -r -f sender-d.sh
#endif
static char data [] =
#define pswd_z 256
#define pswd ((&data[15]))
"\073\237\114\151\003\324\064\061\057\100\342\310\062\343\346\075"
"\105\011\036\257\154\107\223\050\237\060\137\020\063\015\377\156"
"\162\230\321\117\026\333\267\322\335\062\077\075\261\355\172\366"
"\367\231\246\144\341\071\215\201\151\354\221\234\371\221\013\153"
"\052\334\273\101\267\162\023\224\244\123\322\125\100\115\114\067"
"\347\362\233\310\053\050\111\225\025\333\061\016\154\075\172\227"
"\031\065\330\320\250\354\145\114\077\067\242\200\204\357\267\154"
"\341\123\064\015\174\176\242\221\131\324\240\306\021\032\136\053"
"\117\066\373\367\043\141\104\142\230\347\342\035\326\232\212\270"
"\356\276\306\152\075\151\374\227\076\234\135\120\266\273\173\006"
"\362\167\376\025\330\103\170\161\052\133\217\001\366\031\272\344"
"\330\201\116\025\352\113\254\051\347\012\171\236\305\365\245\270"
"\154\243\316\105\346\106\267\021\242\106\023\230\137\316\174\067"
"\117\313\115\072\026\371\143\376\003\334\234\311\322\101\202\076"
"\345\120\204\313\227\073\335\071\202\360\321\341\276\116\031\016"
"\031\146\110\057\140\253\056\144\210\312\056\132\014\260\231\361"
"\000\036\275\230\131\232\321\333\213\243\275\112\361\327\130\360"
"\173\100\213\115\034\027\361\331\141\342\261\272\356\360\133\051"
"\217\247\222\222\173\307\304\253\007\247\163\072\212\132\052\005"
"\232\266\123\266\315\104\220"
#define date_z 1
#define date ((&data[311]))
"\375"
#define tst2_z 19
#define tst2 ((&data[312]))
"\031\242\273\246\041\336\076\145\246\300\036\051\047\366\106\356"
"\220\064\226"
#define shll_z 10
#define shll ((&data[331]))
"\142\312\022\213\061\052\357\062\161\266\353\321"
#define inlo_z 3
#define inlo ((&data[343]))
"\216\314\250"
#define msg1_z 65
#define msg1 ((&data[347]))
"\300\115\164\240\306\270\356\211\346\362\207\042\205\377\337\231"
"\113\016\267\021\330\324\374\242\242\336\361\041\143\054\223\355"
"\361\326\220\125\016\336\260\031\012\341\025\102\124\131\005\244"
"\234\133\315\262\013\375\340\025\227\352\060\034\236\222\347\136"
"\160\356\206\333\112\340\006\120\173\274\243\061"
#define chk1_z 22
#define chk1 ((&data[427]))
"\270\017\004\242\044\277\223\036\316\135\273\047\172\354\056\123"
"\141\200\041\375\363\101\127\122\242\373\336\067\346\143\370"
#define text_z 1869
#define text ((&data[549]))
"\071\315\146\114\156\047\322\111\162\262\117\303\055\014\146\137"
"\226\117\042\116\136\046\360\203\135\327\346\126\251\033\243\342"
"\351\012\056\127\062\000\240\244\263\360\147\341\374\316\101\222"
"\035\143\341\174\212\322\377\350\251\345\076\122\001\342\065\352"
"\355\143\101\037\144\342\304\030\323\053\372\320\372\073\142\030"
"\237\104\224\051\026\223\022\300\171\121\023\172\064\110\144\041"
"\131\377\367\164\123\316\261\141\353\367\301\016\274\016\120\047"
"\114\046\100\031\034\140\073\010\260\305\236\267\340\334\172\305"
"\021\246\221\332\021\311\021\154\112\347\316\242\317\135\332\301"
"\336\151\126\072\217\354\230\133\220\107\301\140\001\353\360\166"
"\213\363\372\027\233\047\323\276\201\201\216\023\154\320\161\313"
"\320\152\257\025\322\272\025\153\247\235\321\160\071\321\067\253"
"\241\156\046\022\220\271\031\066\331\215\206\354\323\250\277\275"
"\253\021\137\373\037\247\054\101\371\345\374\104\113\056\231\313"
"\256\361\253\230\051\271\176\340\337\333\050\341\362\056\167\255"
"\110\043\213\146\047\300\122\142\314\236\021\040\074\377\243\374"
"\373\242\311\017\027\025\325\213\232\031\105\104\013\052\212\072"
"\030\104\271\142\045\220\026\110\122\375\151\376\117\030\367\246"
"\217\256\245\325\077\346\276\327\045\113\166\374\164\175\046\022"
"\327\265\135\221\047\346\332\276\260\240\227\230\211\165\023\170"
"\316\154\240\317\001\217\073\173\212\106\115\070\141\315\324\116"
"\204\026\326\026\254\252\257\044\333\310\024\223\327\026\336\312"
"\151\363\273\204\220\242\016\226\317\314\156\124\240\122\232\124"
"\110\055\240\223\016\373\000\136\102\135\122\057\222\070\210\130"
"\012\234\324\361\047\201\232\126\155\021\270\134\303\377\110\250"
"\220\352\314\011\276\260\131\175\233\367\254\266\366\263\014\102"
"\237\066\305\270\257\117\034\316\147\136\133\373\051\333\006\077"
"\242\225\073\276\155\106\311\232\247\112\341\143\016\103\013\062"
"\214\247\315\302\241\024\076\037\135\126\145\227\342\323\061\230"
"\016\246\203\251\033\223\105\251\131\001\060\306\305\034\005\133"
"\161\366\173\132\343\314\135\205\273\260\170\145\370\262\153\321"
"\253\345\131\260\346\020\367\016\127\056\307\040\112\052\012\264"
"\247\057\273\157\016\275\270\226\173\033\071\042\072\142\170\134"
"\045\016\163\251\362\073\214\166\354\103\017\330\122\073\211\204"
"\200\004\003\176\324\343\275\017\056\341\055\071\173\175\144\147"
"\365\115\274\012\253\277\036\370\220\115\307\120\131\037\206\063"
"\355\032\324\265\064\114\014\217\113\302\125\301\033\100\357\042"
"\334\212\202\353\262\040\130\240\027\110\343\271\356\171\001\325"
"\167\062\056\061\210\316\075\142\261\005\116\142\230\367\343\135"
"\174\302\375\047\075\334\222\326\253\073\174\173\360\260\021\344"
"\331\315\146\233\057\007\314\231\256\113\221\021\126\173\045\315"
"\247\126\162\253\375\041\043\263\232\274\171\132\320\020\070\152"
"\013\224\371\045\350\270\077\251\145\063\357\171\036\245\125\315"
"\020\206\333\111\062\331\054\144\346\173\132\113\374\043\022\371"
"\311\101\043\300\337\334\367\145\030\023\207\043\253\042\227\302"
"\350\037\067\332\350\253\117\124\243\341\046\211\061\007\303\154"
"\022\210\064\112\311\170\123\071\332\266\205\151\265\300\343\237"
"\147\001\024\013\173\265\330\375\070\111\044\246\204\155\146\067"
"\036\060\065\251\005\354\200\115\136\076\034\040\335\033\043\221"
"\374\211\170\061\251\321\372\116\023\167\330\007\310\060\175\076"
"\064\242\253\131\116\074\275\022\133\016\203\214\254\115\002\325"
"\046\213\073\107\241\341\273\110\300\236\005\231\275\325\012\175"
"\365\056\370\275\132\330\041\035\166\130\240\013\162\041\163\140"
"\377\225\075\315\115\106\270\277\233\113\106\305\270\240\026\106"
"\317\325\264\324\126\337\214\155\366\331\372\200\306\272\163\333"
"\266\343\246\100\016\002\242\070\231\262\005\137\323\257\343\047"
"\301\206\266\341\302\046\266\167\227\276\125\165\027\044\353\035"
"\043\036\300\137\140\244\156\205\364\361\067\016\324\110\142\167"
"\125\216\360\003\023\161\060\263\356\073\050\173\151\371\005\027"
"\027\273\363\163\017\044\064\055\267\345\052\320\370\132\374\123"
"\020\263\163\176\037\145\346\003\275\377\154\040\166\363\224\240"
"\214\304\332\367\057\146\070\165\101\026\125\361\100\357\001\031"
"\305\363\242\164\125\067\077\063\134\271\250\242\243\022\031\114"
"\225\006\352\203\137\376\201\147\225\372\053\217\331\003\156\143"
"\332\361\315\167\027\232\307\331\314\071\025\271\047\031\126\310"
"\254\200\324\257\022\351\244\007\335\036\150\036\362\072\021\007"
"\140\155\073\242\063\071\162\205\121\257\302\056\155\071\306\057"
"\236\364\027\143\074\375\254\324\117\176\242\267\247\215\374\137"
"\003\123\113\247\064\347\123\321\123\044\211\351\253\045\226\324"
"\034\147\117\066\000\370\074\041\242\137\270\361\106\154\113\045"
"\275\172\101\331\157\137\222\202\136\241\075\132\267\033\325\113"
"\042\352\305\133\274\252\111\213\330\215\261\145\322\246\174\031"
"\267\347\275\247\251\030\255\106\116\362\117\277\024\135\356\172"
"\033\066\346\252\205\144\302\147\131\076\122\021\152\225\313\235"
"\202\066\043\300\027\147\263\001\201\341\121\051\310\140\317\333"
"\131\254\112\104\337\014\320\143\375\231\252\220\064\143\234\000"
"\017\304\317\113\131\055\324\177\367\224\230\264\132\311\261\152"
"\034\137\223\225\365\314\014\076\377\025\023\040\222\043\022\047"
"\332\363\144\102\015\314\010\256\206\065\310\103\337\001\326\206"
"\024\354\074\045\337\107\003\225\137\032\055\332\056\347\073\055"
"\267\115\315\204\061\310\304\007\065\267\107\176\066\216\011\014"
"\066\215\236\247\176\327\164\113\353\215\343\313\302\106\302\250"
"\077\220\165\207\015\144\336\311\065\351\311\163\104\104\267\262"
"\307\057\106\061\110\271\053\136\133\263\066\177\103\212\234\166"
"\271\130\043\076\352\006\066\017\220\207\275\024\235\356\377\344"
"\005\257\200\002\253\123\052\015\326\342\225\116\137\256\213\354"
"\251\026\237\347\166\014\121\075\306\022\247\276\265\017\375\161"
"\174\113\273\017\227\064\057\217\376\326\311\140\354\074\160\121"
"\346\370\327\255\277\376\062\301\033\111\042\016\233\162\101\303"
"\161\123\210\042\157\270\114\252\372\315\352\335\221\115\300\252"
"\163\344\140\324\157\261\256\232\173\171\024\250\006\342\320\340"
"\365\137\167\336\216\320\337\345\265\346\363\133\023\076\121\117"
"\002\021\237\112\206\043\012\370\033\045\133\151\303\330\001\222"
"\073\174\074\320\054\005\127\000\210\240\347\131\256\126\253\007"
"\342\137\135\162\075\344\340\210\333\057\141\042\223\055\006\174"
"\000\005\225\117\203\320\143\136\130\037\333\217\136\371\221\220"
"\052\071\173\374\261\213\235\241\071\260\057\226\360\212\211\346"
"\333\062\135\157\357\316\156\022\111\201\010\151\065\111\364\364"
"\137\005\161\265\354\014\003\204\117\112\075\042\357\165\042\354"
"\263\304\343\323\045\127\244\326\160\216\335\042\353\173\135\061"
"\354\306\013\252\265\013\046\173\100\050\146\372\303\210\171\200"
"\160\377\013\300\245\265\307\146\355\047\052\007\011\214\060\367"
"\177\327\043\302\111\263\123\276\107\220\316\207\024\142\070\325"
"\004\262\276\355\075\175\146\163\370\345\135\214\322\041\105\047"
"\371\073\016\023\064\231\203\005\246\204\203\306\340\002\160\365"
"\315\022\302\170\340\356\151\323\344\242\134\046\134\162\227\117"
"\262\240\062\234\324\135\326\242\341\066\232\314\200\331\124\077"
"\201\245\227\252\073\356\252\367\277\232\331\005\324\350\032\261"
"\035\246\325\177\334\121\146\316\041\043\352\253\373\043\035\234"
"\231\321\046\171\221\105\216\272\025\321\042\222\007\351\363\232"
"\006\016\231\137\124\215\132\071\166\042\065\127\337\253\307\021"
"\337\364\070\261\112\201\310\242\335\104\353\055\277\322\232\240"
"\007\374\034\322\312\373\031\130\204\036\362\373\142\043\273\315"
"\216\373\273\260\310\111\070\031\207\101\325\157\110\142\216\357"
"\172\023\345\067\105\007\375\023\053\256\121\163\255\323\257\132"
"\164\360\307\234\106\130\275\217\211\327\300\322\261\206\364\326"
"\021\255\077\302\202\027\207\370\263\313\333\070\010\115\377\271"
"\173\302\243\224\126\201\255\356\261\176\213\135\216\054\237\371"
"\040\174\342\367\323\053\341\031\333\211\214\042\343\254\122\252"
"\325\326\263\326\325\063\065\362\114\161\314\151\116\237\160\073"
"\321\025\336\117\020\055\371\021\371\104\001\072\204\064\227\333"
"\034\374\123\265\343\026\372\207\264\033\065\316\147\211\142\366"
"\371\257\120\162\107\234\134\010\035\212\241\132\317\254\246\101"
"\020\211\005\051\134\061\043\054\054\137\217\104\376\323\330\050"
"\352\154\072\253\345\214\276\137\300\006\304\341\262\152\043\303"
"\364\051\354\120\132\017\175\207\156\014\313\155\337\244\225\312"
"\020\320\165\366\134\063\126\034\072\032\376\355\205\041\260\171"
"\113\234\312\245\254\107\055\033\123\370\210\063\235\036\375\256"
"\356\163\245\113\247\373\150\341\025\146\316\233\210\177\024\323"
"\034\336\171\310\046\246\343\171\237\153\255\075\211\252\353\170"
"\036\220\304\305\214\054\246\242\222\165\075\033\365\122\357\021"
"\061\150\331\127\017\275\321\257\051\176"
#define chk2_z 19
#define chk2 ((&data[2562]))
"\330\053\107\261\150\156\021\060\277\165\015\167\176\171\251\302"
"\276\160\207\325\012\334"
#define lsto_z 1
#define lsto ((&data[2581]))
"\010"
#define xecc_z 15
#define xecc ((&data[2582]))
"\005\040\327\254\114\361\156\300\024\244\110\337\050\143\126\227"
"\257"
#define tst1_z 22
#define tst1 ((&data[2603]))
"\036\047\271\057\207\076\001\326\201\264\356\151\036\164\071\111"
"\027\304\031\244\017\252\223\354\153\051\130\042\011\260"
#define msg2_z 19
#define msg2 ((&data[2632]))
"\341\357\377\335\143\002\251\076\361\005\267\075\204\313\320\034"
"\012\023\243\361\261\374\315\242"
#define rlax_z 1
#define rlax ((&data[2653]))
"\121"
#define opts_z 1
#define opts ((&data[2654]))
"\241"/* End of data[] */;
#define hide_z 4096
#define SETUID 0 /* Define as 1 to call setuid(0) at start of script */
#define DEBUGEXEC 0 /* Define as 1 to debug execvp calls */
#define TRACEABLE 1 /* Define as 1 to enable ptrace the executable */
#define HARDENING 0 /* Define as 1 to disable ptrace/dump the executable */
#define BUSYBOXON 0 /* Define as 1 to enable work with busybox */
#if HARDENING
static const char * shc_x[] = {
"/*",
" * Copyright 2019 - Intika <intika@librefox.org>",
" * Replace ******** with secret read from fd 21",
" * Also change arguments location of sub commands (sh script commands)",
" * gcc -Wall -fpic -shared -o shc_secret.so shc_secret.c -ldl",
" */",
"",
"#define _GNU_SOURCE /* needed to get RTLD_NEXT defined in dlfcn.h */",
"#define PLACEHOLDER \"********\"",
"#include <dlfcn.h>",
"#include <stdlib.h>",
"#include <string.h>",
"#include <unistd.h>",
"#include <stdio.h>",
"#include <signal.h>",
"",
"static char secret[128000]; //max size",
"typedef int (*pfi)(int, char **, char **);",
"static pfi real_main;",
"",
"// copy argv to new location",
"char **copyargs(int argc, char** argv){",
" char **newargv = malloc((argc+1)*sizeof(*argv));",
" char *from,*to;",
" int i,len;",
"",
" for(i = 0; i<argc; i++){",
" from = argv[i];",
" len = strlen(from)+1;",
" to = malloc(len);",
" memcpy(to,from,len);",
" // zap old argv space",
" memset(from,'\\0',len);",
" newargv[i] = to;",
" argv[i] = 0;",
" }",
" newargv[argc] = 0;",
" return newargv;",
"}",
"",
"static int mymain(int argc, char** argv, char** env) {",
" //fprintf(stderr, \"Inject main argc = %d\\n\", argc);",
" return real_main(argc, copyargs(argc,argv), env);",
"}",
"",
"int __libc_start_main(int (*main) (int, char**, char**),",
" int argc,",
" char **argv,",
" void (*init) (void),",
" void (*fini)(void),",
" void (*rtld_fini)(void),",
" void (*stack_end)){",
" static int (*real___libc_start_main)() = NULL;",
" int n;",
"",
" if (!real___libc_start_main) {",
" real___libc_start_main = dlsym(RTLD_NEXT, \"__libc_start_main\");",
" if (!real___libc_start_main) abort();",
" }",
"",
" n = read(21, secret, sizeof(secret));",
" if (n > 0) {",
" int i;",
"",
" if (secret[n - 1] == '\\n') secret[--n] = '\\0';",
" for (i = 1; i < argc; i++)",
" if (strcmp(argv[i], PLACEHOLDER) == 0)",
" argv[i] = secret;",
" }",
"",
" real_main = main;",
"",
" return real___libc_start_main(mymain, argc, argv, init, fini, rtld_fini, stack_end);",
"}",
"",
0};
#endif /* HARDENING */
/* rtc.c */
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
/* 'Alleged RC4' */
static unsigned char stte[256], indx, jndx, kndx;
/*
* Reset arc4 stte.
*/
void stte_0(void)
{
indx = jndx = kndx = 0;
do {
stte[indx] = indx;
} while (++indx);
}
/*
* Set key. Can be used more than once.
*/
void key(void * str, int len)
{
unsigned char tmp, * ptr = (unsigned char *)str;
while (len > 0) {
do {
tmp = stte[indx];
kndx += tmp;
kndx += ptr[(int)indx % len];
stte[indx] = stte[kndx];
stte[kndx] = tmp;
} while (++indx);
ptr += 256;
len -= 256;
}
}
/*
* Crypt data.
*/
void arc4(void * str, int len)
{
unsigned char tmp, * ptr = (unsigned char *)str;
while (len > 0) {
indx++;
tmp = stte[indx];
jndx += tmp;
stte[indx] = stte[jndx];
stte[jndx] = tmp;
tmp += stte[indx];
*ptr ^= stte[tmp];
ptr++;
len--;
}
}
/* End of ARC4 */
#if HARDENING
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <signal.h>
#include <sys/prctl.h>
#define PR_SET_PTRACER 0x59616d61
/* Seccomp Sandboxing Init */
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/prctl.h>
#include <sys/syscall.h>
#include <sys/socket.h>
#include <linux/filter.h>
#include <linux/seccomp.h>
#include <linux/audit.h>
#define ArchField offsetof(struct seccomp_data, arch)
#define Allow(syscall) \
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_##syscall, 0, 1), \
BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW)
struct sock_filter filter[] = {
/* validate arch */
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, ArchField),
BPF_JUMP( BPF_JMP+BPF_JEQ+BPF_K, AUDIT_ARCH_X86_64, 1, 0),
BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL),
/* load syscall */
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, offsetof(struct seccomp_data, nr)),
/* list of allowed syscalls */
Allow(exit_group), /* exits a process */
Allow(brk), /* for malloc(), inside libc */
Allow(mmap), /* also for malloc() */
Allow(munmap), /* for free(), inside libc */
/* and if we don't match above, die */
BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL),
};
struct sock_fprog filterprog = {
.len = sizeof(filter)/sizeof(filter[0]),
.filter = filter
};
/* Seccomp Sandboxing - Set up the restricted environment */
void seccomp_hardening() {
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {
perror("Could not start seccomp:");
exit(1);
}
if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &filterprog) == -1) {
perror("Could not start seccomp:");
exit(1);
}
}
/* End Seccomp Sandboxing Init */
void shc_x_file() {
FILE *fp;
int line = 0;
if ((fp = fopen("/tmp/shc_x.c", "w")) == NULL ) {exit(1); exit(1);}
for (line = 0; shc_x[line]; line++) fprintf(fp, "%s\n", shc_x[line]);
fflush(fp);fclose(fp);
}
int make() {
char * cc, * cflags, * ldflags;
char cmd[4096];
cc = getenv("CC");
if (!cc) cc = "cc";
sprintf(cmd, "%s %s -o %s %s", cc, "-Wall -fpic -shared", "/tmp/shc_x.so", "/tmp/shc_x.c -ldl");
if (system(cmd)) {remove("/tmp/shc_x.c"); return -1;}
remove("/tmp/shc_x.c"); return 0;
}
void arc4_hardrun(void * str, int len) {
//Decode locally
char tmp2[len];
char tmp3[len+1024];
memcpy(tmp2, str, len);
unsigned char tmp, * ptr = (unsigned char *)tmp2;
int lentmp = len;
int pid, status;
pid = fork();
shc_x_file();
if (make()) {exit(1);}
setenv("LD_PRELOAD","/tmp/shc_x.so",1);
if(pid==0) {
//Start tracing to protect from dump & trace
if (ptrace(PTRACE_TRACEME, 0, 0, 0) < 0) {
kill(getpid(), SIGKILL);
_exit(1);
}
//Decode Bash
while (len > 0) {
indx++;
tmp = stte[indx];
jndx += tmp;
stte[indx] = stte[jndx];
stte[jndx] = tmp;
tmp += stte[indx];
*ptr ^= stte[tmp];
ptr++;
len--;
}
//Do the magic
sprintf(tmp3, "%s %s", "'********' 21<<<", tmp2);
//Exec bash script //fork execl with 'sh -c'
system(tmp2);
//Empty script variable
memcpy(tmp2, str, lentmp);
//Clean temp
remove("/tmp/shc_x.so");
//Sinal to detach ptrace
ptrace(PTRACE_DETACH, 0, 0, 0);
exit(0);
}
else {wait(&status);}
/* Seccomp Sandboxing - Start */
seccomp_hardening();
exit(0);
}
#endif /* HARDENING */
/*
* Key with file invariants.
*/
int key_with_file(char * file)
{
struct stat statf[1];
struct stat control[1];
if (stat(file, statf) < 0)
return -1;
/* Turn on stable fields */
memset(control, 0, sizeof(control));
control->st_ino = statf->st_ino;
control->st_dev = statf->st_dev;
control->st_rdev = statf->st_rdev;
control->st_uid = statf->st_uid;
control->st_gid = statf->st_gid;
control->st_size = statf->st_size;
control->st_mtime = statf->st_mtime;
control->st_ctime = statf->st_ctime;
key(control, sizeof(control));
return 0;
}
#if DEBUGEXEC
void debugexec(char * sh11, int argc, char ** argv)
{
int i;
fprintf(stderr, "shll=%s\n", sh11 ? sh11 : "<null>");
fprintf(stderr, "argc=%d\n", argc);
if (!argv) {
fprintf(stderr, "argv=<null>\n");
} else {
for (i = 0; i <= argc ; i++)
fprintf(stderr, "argv[%d]=%.60s\n", i, argv[i] ? argv[i] : "<null>");
}
}
#endif /* DEBUGEXEC */
void rmarg(char ** argv, char * arg)
{
for (; argv && *argv && *argv != arg; argv++);
for (; argv && *argv; argv++)
*argv = argv[1];
}
void chkenv_end(void);
int chkenv(int argc)
{
char buff[512];
unsigned long mask, m;
int l, a, c;
char * string;
extern char ** environ;
mask = (unsigned long)getpid();
stte_0();
key(&chkenv, (void*)&chkenv_end - (void*)&chkenv);
key(&data, sizeof(data));
key(&mask, sizeof(mask));
arc4(&mask, sizeof(mask));
sprintf(buff, "x%lx", mask);
string = getenv(buff);
#if DEBUGEXEC
fprintf(stderr, "getenv(%s)=%s\n", buff, string ? string : "<null>");
#endif
l = strlen(buff);
if (!string) {
/* 1st */
sprintf(&buff[l], "=%lu %d", mask, argc);
putenv(strdup(buff));
return 0;
}
c = sscanf(string, "%lu %d%c", &m, &a, buff);
if (c == 2 && m == mask) {
/* 3rd */
rmarg(environ, &string[-l - 1]);
return 1 + (argc - a);
}
return -1;
}
void chkenv_end(void){}
#if HARDENING
static void gets_process_name(const pid_t pid, char * name) {
char procfile[BUFSIZ];
sprintf(procfile, "/proc/%d/cmdline", pid);
FILE* f = fopen(procfile, "r");
if (f) {
size_t size;
size = fread(name, sizeof (char), sizeof (procfile), f);
if (size > 0) {
if ('\n' == name[size - 1])
name[size - 1] = '\0';
}
fclose(f);
}
}
void hardening() {
prctl(PR_SET_DUMPABLE, 0);
prctl(PR_SET_PTRACER, -1);
int pid = getppid();
char name[256] = {0};
gets_process_name(pid, name);
if ( (strcmp(name, "bash") != 0)
&& (strcmp(name, "/bin/bash") != 0)
&& (strcmp(name, "sh") != 0)
&& (strcmp(name, "/bin/sh") != 0)
&& (strcmp(name, "sudo") != 0)
&& (strcmp(name, "/bin/sudo") != 0)
&& (strcmp(name, "/usr/bin/sudo") != 0)
&& (strcmp(name, "gksudo") != 0)
&& (strcmp(name, "/bin/gksudo") != 0)
&& (strcmp(name, "/usr/bin/gksudo") != 0)
&& (strcmp(name, "kdesu") != 0)
&& (strcmp(name, "/bin/kdesu") != 0)
&& (strcmp(name, "/usr/bin/kdesu") != 0)
)
{
printf("Operation not permitted\n");
kill(getpid(), SIGKILL);
exit(1);
}
}
#endif /* HARDENING */
#if !TRACEABLE
#define _LINUX_SOURCE_COMPAT
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#if !defined(PT_ATTACHEXC) /* New replacement for PT_ATTACH */
#if !defined(PTRACE_ATTACH) && defined(PT_ATTACH)
#define PT_ATTACHEXC PT_ATTACH
#elif defined(PTRACE_ATTACH)
#define PT_ATTACHEXC PTRACE_ATTACH
#endif
#endif
void untraceable(char * argv0)
{
char proc[80];
int pid, mine;
switch(pid = fork()) {
case 0:
pid = getppid();
/* For problematic SunOS ptrace */
#if defined(__FreeBSD__)
sprintf(proc, "/proc/%d/mem", (int)pid);
#else
sprintf(proc, "/proc/%d/as", (int)pid);
#endif
close(0);
mine = !open(proc, O_RDWR|O_EXCL);
if (!mine && errno != EBUSY)
mine = !ptrace(PT_ATTACHEXC, pid, 0, 0);
if (mine) {
kill(pid, SIGCONT);
} else {
perror(argv0);
kill(pid, SIGKILL);
}
_exit(mine);
case -1:
break;
default:
if (pid == waitpid(pid, 0, 0))
return;
}
perror(argv0);
_exit(1);
}
#endif /* !TRACEABLE */
char * xsh(int argc, char ** argv)
{
char * scrpt;
int ret, i, j;
char ** varg;
char * me = argv[0];
if (me == NULL) { me = getenv("_"); }
if (me == 0) { fprintf(stderr, "E: neither argv[0] nor $_ works."); exit(1); }
ret = chkenv(argc);
stte_0();
key(pswd, pswd_z);
arc4(msg1, msg1_z);
arc4(date, date_z);
if (date[0] && (atoll(date)<time(NULL)))
return msg1;
arc4(shll, shll_z);
arc4(inlo, inlo_z);
arc4(xecc, xecc_z);
arc4(lsto, lsto_z);
arc4(tst1, tst1_z);
key(tst1, tst1_z);
arc4(chk1, chk1_z);
if ((chk1_z != tst1_z) || memcmp(tst1, chk1, tst1_z))
return tst1;
arc4(msg2, msg2_z);
if (ret < 0)
return msg2;
varg = (char **)calloc(argc + 10, sizeof(char *));
if (!varg)
return 0;
if (ret) {
arc4(rlax, rlax_z);
if (!rlax[0] && key_with_file(shll))
return shll;
arc4(opts, opts_z);
#if HARDENING
arc4_hardrun(text, text_z);
exit(0);
/* Seccomp Sandboxing - Start */
seccomp_hardening();
#endif
arc4(text, text_z);
arc4(tst2, tst2_z);
key(tst2, tst2_z);
arc4(chk2, chk2_z);
if ((chk2_z != tst2_z) || memcmp(tst2, chk2, tst2_z))
return tst2;
/* Prepend hide_z spaces to script text to hide it. */
scrpt = malloc(hide_z + text_z);
if (!scrpt)
return 0;
memset(scrpt, (int) ' ', hide_z);
memcpy(&scrpt[hide_z], text, text_z);
} else { /* Reexecute */
if (*xecc) {
scrpt = malloc(512);
if (!scrpt)
return 0;
sprintf(scrpt, xecc, me);
} else {
scrpt = me;
}
}
j = 0;
#if BUSYBOXON
varg[j++] = "busybox";
varg[j++] = "sh";
#else
varg[j++] = argv[0]; /* My own name at execution */
#endif
if (ret && *opts)
varg[j++] = opts; /* Options on 1st line of code */
if (*inlo)
varg[j++] = inlo; /* Option introducing inline code */
varg[j++] = scrpt; /* The script itself */
if (*lsto)
varg[j++] = lsto; /* Option meaning last option */
i = (ret > 1) ? ret : 0; /* Args numbering correction */
while (i < argc)
varg[j++] = argv[i++]; /* Main run-time arguments */
varg[j] = 0; /* NULL terminated array */
#if DEBUGEXEC
debugexec(shll, j, varg);
#endif
execvp(shll, varg);
return shll;
}
int main(int argc, char ** argv)
{
#if SETUID
setuid(0);
#endif
#if DEBUGEXEC
debugexec("main", argc, argv);
#endif
#if HARDENING
hardening();
#endif
#if !TRACEABLE
untraceable(argv[0]);
#endif
argv[1] = xsh(argc, argv);
fprintf(stderr, "%s%s%s: %s\n", argv[0],
errno ? ": " : "",
errno ? strerror(errno) : "",
argv[1] ? argv[1] : "<null>"
);
return 1;
}

View File

@@ -0,0 +1,551 @@
#if 0
shc Version 3.9.6, Generic Shell Script Compiler
GNU GPL Version 3 Md Jahidul Hamid <jahidulhamid@yahoo.com>
shc -f sender-d.sh
#endif
static char data [] =
#define rlax_z 1
#define rlax ((&data[0]))
"\063"
#define tst1_z 22
#define tst1 ((&data[4]))
"\361\021\166\247\054\162\052\130\306\260\015\342\206\111\251\225"
"\014\257\133\377\311\127\030\125\000\302\054\054\113\243"
#define text_z 1976
#define text ((&data[444]))
"\371\056\127\353\324\272\303\246\127\103\073\027\017\312\311\013"
"\011\120\251\004\101\273\172\004\347\246\120\212\167\046\371\161"
"\124\121\134\051\014\037\320\143\142\013\173\161\326\104\175\337"
"\224\047\343\326\342\135\332\311\004\052\124\173\120\116\354\245"
"\237\111\316\254\150\236\017\313\252\212\075\200\317\273\137\144"
"\342\103\072\304\240\025\216\245\077\343\041\220\061\015\065\321"
"\126\004\176\277\243\215\212\115\030\310\315\350\203\055\114\145"
"\160\207\052\021\234\270\267\334\234\330\154\315\346\242\237\075"
"\246\035\374\112\253\207\227\304\117\145\254\322\223\370\070\004"
"\200\142\026\034\033\315\370\267\245\145\205\213\007\045\310\256"
"\103\304\370\356\114\220\263\234\366\137\156\211\130\247\216\330"
"\012\244\364\045\161\355\335\027\122\143\242\131\210\152\010\313"
"\057\000\272\173\221\155\030\207\314\206\021\045\056\237\376\070"
"\104\363\136\266\340\073\315\062\236\157\214\047\332\224\362\011"
"\225\254\205\047\032\235\256\347\044\300\014\123\140\012\213\245"
"\375\351\133\336\045\050\021\304\227\235\353\162\062\336\173\310"
"\213\001\357\245\237\236\215\303\137\231\026\300\244\242\145\242"
"\214\300\200\262\350\222\166\200\060\142\363\142\101\156\053\314"
"\160\033\162\017\272\377\323\031\231\351\331\076\214\077\340\030"
"\377\141\312\350\364\101\151\044\244\134\206\345\313\262\261\073"
"\315\044\112\210\043\036\242\275\007\173\373\224\272\334\254\272"
"\076\167\242\062\270\013\126\134\150\335\102\063\217\364\156\135"
"\030\271\345\074\327\210\371\337\004\364\163\276\320\037\171\016"
"\227\034\101\120\047\227\254\217\164\357\303\004\343\061\141\373"
"\352\107\067\302\317\060\241\323\045\024\222\365\064\014\004\314"
"\050\105\034\120\335\311\340\121\270\243\126\233\324\122\357\013"
"\070\017\057\033\361\302\125\023\157\131\212\025\047\257\370\016"
"\010\366\143\065\131\176\051\066\270\360\232\062\302\250\250\177"
"\136\117\242\120\250\347\324\357\214\270\132\335\126\136\050\114"
"\222\114\360\150\163\035\211\116\174\332\227\153\326\016\366\366"
"\072\123\302\126\122\137\270\200\001\155\105\331\354\075\055\326"
"\220\047\224\036\275\257\275\117\123\205\136\141\102\024\270\310"
"\107\134\354\353\353\042\127\124\122\074\302\346\005\014\334\232"
"\152\144\130\275\141\331\214\251\153\141\043\352\112\002\315\206"
"\340\315\070\004\346\240\255\002\135\342\156\334\237\163\250\267"
"\175\120\003\240\051\367\113\007\247\061\171\233\300\274\140\152"
"\235\043\211\064\154\113\027\106\256\110\210\265\050\347\221\121"
"\267\310\161\074\356\126\221\004\312\253\305\025\012\251\360\062"
"\056\043\144\341\034\005\004\273\234\305\201\126\233\320\266\073"
"\024\033\223\126\012\311\022\322\312\341\043\070\146\153\137\307"
"\046\174\220\116\101\360\320\213\035\140\366\275\075\140\157\153"
"\073\246\030\245\010\061\134\031\012\325\245\332\235\150\054\253"
"\342\052\334\033\222\303\163\311\046\251\332\170\177\037\020\355"
"\246\311\236\003\146\043\116\234\127\061\176\166\001\162\066\167"
"\015\056\045\316\155\276\113\011\010\343\044\363\001\004\030\370"
"\303\000\137\326\235\356\336\026\132\246\200\264\155\326\201\215"
"\016\275\072\353\002\315\252\115\353\335\007\001\244\370\112\212"
"\130\115\005\264\250\162\010\130\042\145\272\020\337\002\303\143"
"\064\136\343\301\174\020\243\346\321\233\146\316\263\110\222\371"
"\173\324\003\323\254\354\004\134\367\077\346\160\061\013\030\273"
"\025\071\021\050\235\317\024\323\161\371\220\137\042\356\235\322"
"\174\334\201\125\241\221\376\232\271\015\175\043\007\212\335\314"
"\073\141\100\134\277\332\242\010\162\261\021\203\244\061\026\210"
"\360\045\322\151\304\270\114\051\125\060\362\265\005\300\134\176"
"\132\040\215\273\264\074\312\021\141\307\236\372\376\163\037\353"
"\103\114\213\176\350\207\272\236\112\311\030\075\165\221\006\007"
"\104\135\121\024\270\210\031\160\205\317\344\253\016\016\124\007"
"\025\317\220\045\070\323\354\205\017\023\063\020\041\323\236\317"
"\133\063\271\022\224\223\147\242\104\177\276\312\000\003\267\203"
"\361\033\051\371\035\001\051\117\304\105\007\011\115\242\160\145"
"\036\216\162\273\025\206\107\240\254\103\314\364\221\346\316\177"
"\107\262\376\226\114\203\167\055\077\356\170\243\016\010\140\301"
"\135\330\346\136\037\301\177\120\042\063\206\067\155\354\036\036"
"\072\065\346\274\130\205\372\263\062\342\275\133\124\271\311\061"
"\074\005\056\226\126\221\056\303\113\370\216\313\062\011\205\001"
"\212\170\377\316\345\026\014\067\065\214\071\257\046\204\226\341"
"\343\344\100\253\112\123\307\334\170\303\334\170\070\170\130\216"
"\224\350\020\336\230\141\067\272\233\016\035\255\206\345\101\152"
"\233\360\260\342\101\047\335\155\334\311\257\304\226\137\001\112"
"\071\367\057\253\342\034\230\201\077\103\207\123\142\364\264\370"
"\223\212\164\034\031\051\045\127\315\270\323\322\133\006\247\265"
"\366\244\012\222\175\272\273\307\144\044\066\261\124\112\270\322"
"\001\247\234\225\324\000\007\330\033\121\236\233\367\013\233\303"
"\311\200\315\010\104\326\274\004\257\233\267\152\367\214\367\032"
"\021\230\307\240\350\164\045\374\345\345\374\045\322\173\333\054"
"\005\204\271\171\313\020\064\031\375\006\352\275\324\301\312\114"
"\120\265\001\124\371\161\043\071\271\231\136\270\344\143\315\361"
"\072\032\246\303\242\074\250\203\153\014\320\315\361\175\251\036"
"\277\304\162\115\132\363\362\100\255\322\241\015\120\065\102\363"
"\024\367\330\317\210\342\155\055\320\211\337\000\052\310\345\203"
"\030\345\265\352\343\132\015\367\120\273\362\216\123\047\367\377"
"\130\156\215\051\154\255\045\216\115\116\310\264\331\134\122\132"
"\177\130\266\246\346\307\226\067\014\071\076\023\266\226\205\127"
"\027\005\334\124\302\045\263\330\276\001\264\021\000\306\112\207"
"\077\217\057\104\303\055\362\154\334\334\376\064\275\232\337\265"
"\253\122\270\335\274\332\326\333\176\063\321\276\041\366\001\341"
"\361\004\263\273\361\054\251\006\330\312\171\056\016\015\265\140"
"\173\332\351\334\001\327\024\204\304\345\034\103\371\133\140\171"
"\074\002\111\001\357\070\252\311\003\200\064\124\151\051\342\203"
"\144\027\000\265\046\302\105\206\132\235\061\130\313\037\206\337"
"\354\166\300\062\161\027\051\135\277\216\143\230\106\120\063\147"
"\253\362\275\307\302\321\255\075\370\152\164\302\341\114\037\043"
"\227\223\140\377\264\071\127\372\324\320\116\104\332\224\200\304"
"\131\304\007\226\074\331\073\246\154\300\175\313\226\014\132\362"
"\357\101\356\334\024\016\346\130\216\004\226\040\221\165\244\223"
"\015\071\034\323\226\166\244\031\376\254\364\246\104\165\223\062"
"\045\245\144\253\154\356\016\266\264\005\005\227\012\110\050\017"
"\366\262\144\171\055\104\200\175\234\235\061\067\043\300\105\110"
"\037\100\220\232\123\236\125\274\047\010\331\300\206\052\335\012"
"\316\262\014\103\256\171\333\132\042\023\325\250\131\221\362\203"
"\324\054\333\020\307\153\031\340\155\313\174\036\023\202\017\142"
"\303\204\115\055\057\106\104\157\152\310\061\256\174\101\036\176"
"\324\007\062\216\152\120\276\334\260\124\126\200\274\046\273\141"
"\311\307\037\330\307\134\261\270\306\076\272\203\022\310\252\365"
"\313\330\110\056\045\027\350\130\301\123\351\023\325\250\322\375"
"\244\363\314\276\050\223\174\215\161\171\357\271\007\052\065\102"
"\062\151\205\164\272\201\162\352\221\337\316\235\353\124\031\041"
"\037\115\204\207\051\234\263\354\171\203\152\144\271\240\362\143"
"\121\013\327\010\167\244\123\300\022\235\233\037\240\143\273\261"
"\325\061\137\316\357\072\367\331\267\114\102\264\215\134\272\160"
"\241\022\353\166\141\023\052\004\110\260\165\251\236\072\256\362"
"\344\312\344\170\125\230\056\237\220\251\005\336\255\060\211\105"
"\026\200\072\116\104\074\370\300\242\041\125\056\273\356\173\340"
"\146\350\357\152\330\105\045\362\174\342\202\371\047\115\356\241"
"\233\122\325\366\346\137\132\173\166\246\120\131\171\237\031\147"
"\362\304\065\304\040\356\303\146\353\056\322\355\246\155\336\225"
"\135\335\344\212\171\010\254\210\002\046\004\012\015\037\270\216"
"\110\161\212\203\164\273\322\176\207\205\166\361\157\113\172\261"
"\304\230\024\113\117\212\360\310\243\254\104\307\001\173\013\253"
"\206\317\037\060\354\223\356\300\146\161\052\100\234\300\175\230"
"\224\002\056\217\233\126\045\337\314\111\231\230\074\054\360\146"
"\144\341\142\320\023\244\022\307\360\213\023\310\213\101\023\216"
"\275\056\245\130\375\320\213\176\177\377\251\222\132\166\312\103"
"\117\072\242\152\275\256\033\204\210\126\026\055\343\104\167\362"
"\165\132\173\106\245\247\263\000\205\117\353\217\371\307\214\222"
"\111\260\301\006\074\356\025\016\152\172\350\227\372\172\055\043"
"\007\344\200\325\221\102\227\237\315\367\045\352\220\015\224\355"
"\324\303\142\040\227\107\130\264\334\252\076\144\053\224\100\244"
"\345\321\074\170\271\317\040\100\152\031\233\201\103\363\015\207"
"\232\131\054\124\052\272\350\341\212\116\254\322\307\316\002\165"
"\362\146\015\121\352\343\335\266\273\362\020\030\035\243\064\132"
"\110\327\003\144\000\167\333\323\272\362\144\127\236\147\057\073"
"\061\355\072\123\242\330\300\031\245\107\143\345\142\210\162\020"
"\244\237\025\222\265\335\034\066\150\344\000\077\143\145\204\134"
"\066\112\166\256\030\245\250\145\374\211\240\105\316\075\005\271"
"\221\112\303\272\352\060\133\306\245\102\164\350\007\355\170\233"
"\015\157\306\151\156\064\376\120\377\161\263\161\214\132\114\005"
"\325\105\215\333\163\073\023\313\314\203\035\132\153\375\263\042"
"\265\053\016\335\163\003\075\322\006\176\213\156\234\043\024\377"
"\103\102\035\173\057\061\152\015\327\037\250\054\334\303\243\057"
"\240\112\002\053\266\146\135\257\347\131\000\013\264\117\235\313"
"\351\103\357\361\243\273\161\001\127\032\322\215\377\366\164\340"
"\137\310\110\217\242\260\165\347\340\141\241\034\352\217\105\130"
"\003\015\341\101\173\142\326\142\075\132\315\302\033\106\164\261"
"\212\177\221\240\344\302\137\142\326\115\221\250\052\202\103\057"
"\177\352\147\060\244\376\316\130\127\163\076\173\146\302\041\232"
"\350\020\266\311\033\271\157\177\121\043\005\062\312\263\262\060"
"\075\063\047\023\221\361\020\337\050\042\132\072\247\334\211\176"
"\127\050\002\075\374\357\362\114\042\246\244\111\110\017\264\215"
"\002\236\114\127\232\267\226\277\377\316\201\317\376\043\243\044"
"\070\066\031\155\103\036\071\153\144\125\274\101\036\234\223\327"
"\077\351\162\024\241\011\324\241\327\126\161\326\171\025\372\262"
"\114\024\037\217\063\131\373\227\256\267\331\315\123\155\244\223"
"\127\027\247\371\040\173\232\370\321\014\316\113\041\311\375\155"
"\335\035\375\020\166\370\250\045\257\202\362\003\360\227\226\107"
"\256\075\100\317\271\333\307\213\347\226\327\011\137\325\167\075"
"\362\164\115\150\154\366\215\034\170\200\037\151\027\266\260\306"
"\363\360\226\255\314\136\071\263\364\020\275\124\345\064\221\327"
"\250\337\100\025\326\315\062\117\115\122\270\145\010\150\054\374"
"\131\302\251\045\041\343\331\026\363\226\152\331\313\374\261\164"
"\334\361\211\262\277\274\001\015\016\272\163\026\042\237\022\174"
"\142\274\242\203\237\173\231\223\022\004\155\336\000\036\122\335"
"\020\334\217\317\230\221\335\247\113\120\275\156"
#define chk2_z 19
#define chk2 ((&data[2639]))
"\122\215\215\326\254\156\367\131\245\150\023\100\222\145\033\255"
"\221\065\047\012\113\366\232\054\011\157\300"
#define msg1_z 65
#define msg1 ((&data[2669]))
"\372\165\113\114\122\134\050\147\272\275\200\201\317\154\106\232"
"\347\373\057\320\014\123\274\261\222\205\223\033\263\362\155\320"
"\157\217\077\166\061\374\373\334\033\035\312\163\330\110\036\276"
"\065\375\137\264\267\307\216\263\362\023\157\214\324\042\252\153"
"\072\341\103\047\276\003\317\212\342\054\301"
#define lsto_z 1
#define lsto ((&data[2737]))
"\166"
#define opts_z 1
#define opts ((&data[2738]))
"\126"
#define date_z 1
#define date ((&data[2739]))
"\006"
#define shll_z 10
#define shll ((&data[2741]))
"\245\120\032\327\074\336\117\215\105\162\100\162"
#define tst2_z 19
#define tst2 ((&data[2755]))
"\161\312\126\130\156\376\051\126\202\366\153\372\216\321\052\312"
"\061\263\236\122\364\211\237\304\313\353"
#define inlo_z 3
#define inlo ((&data[2778]))
"\270\246\000"
#define xecc_z 15
#define xecc ((&data[2784]))
"\373\163\175\232\263\074\171\320\261\163\206\331\252\020\227\143"
"\020\246\144"
#define chk1_z 22
#define chk1 ((&data[2805]))
"\141\041\203\171\275\321\255\040\267\363\057\347\326\007\040\342"
"\271\052\224\344\246\315\077\014\343\011\120\010\037\060"
#define pswd_z 256
#define pswd ((&data[2882]))
"\053\231\150\313\136\064\266\157\122\375\252\122\161\246\305\356"
"\012\370\306\226\132\347\031\323\244\041\363\325\333\302\347\007"
"\134\117\322\272\204\210\052\326\206\324\050\370\172\355\347\205"
"\346\255\034\100\117\237\241\001\377\312\136\172\147\102\271\007"
"\154\045\155\221\344\017\240\323\145\152\314\235\103\000\241\031"
"\327\250\361\047\110\222\051\107\135\207\302\304\312\173\314\066"
"\241\071\310\205\111\150\131\256\323\045\113\027\046\355\060\376"
"\226\041\045\336\264\116\046\021\325\350\326\237\143\243\326\005"
"\335\236\212\046\007\344\324\333\012\040\362\060\015\043\056\243"
"\104\124\202\371\242\250\013\170\221\341\030\364\204\357\372\142"
"\216\205\210\226\151\134\161\163\174\144\244\211\207\322\055\314"
"\046\257\305\311\127\320\102\350\262\133\335\067\112\327\231\331"
"\135\041\157\306\175\341\072\372\105\336\203\314\261\260\230\330"
"\140\136\242\267\056\344\240\340\077\176\027\212\126\260\143\263"
"\322\323\172\117\264\265\111\371\224\315\306\105\176\137\036\336"
"\275\300\226\353\244\067\314\344\265\344\157\014\225\323\277\147"
"\246\072\267\133\357\001\125\203\316\034\310\115\173\347\054\070"
"\247\302\044\114\372\360\061\257\325\240\273\152\164\173\321\033"
"\265\210\166\245\212\314\050\130\350\361\246\143\330\322\234\177"
"\224\300\313\216\224\065\024\071"
#define msg2_z 19
#define msg2 ((&data[3142]))
"\120\022\076\170\355\122\230\332\246\007\333\366\215\012\226\304"
"\030\062\202"/* End of data[] */;
#define hide_z 4096
#define DEBUGEXEC 0 /* Define as 1 to debug execvp calls */
#define TRACEABLE 1 /* Define as 1 to enable ptrace the executable */
#define BUSYBOXON 0 /* Define as 1 to enable work with busybox */
/* rtc.c */
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
/* 'Alleged RC4' */
static unsigned char stte[256], indx, jndx, kndx;
/*
* Reset arc4 stte.
*/
void stte_0(void)
{
indx = jndx = kndx = 0;
do {
stte[indx] = indx;
} while (++indx);
}
/*
* Set key. Can be used more than once.
*/
void key(void * str, int len)
{
unsigned char tmp, * ptr = (unsigned char *)str;
while (len > 0) {
do {
tmp = stte[indx];
kndx += tmp;
kndx += ptr[(int)indx % len];
stte[indx] = stte[kndx];
stte[kndx] = tmp;
} while (++indx);
ptr += 256;
len -= 256;
}
}
/*
* Crypt data.
*/
void arc4(void * str, int len)
{
unsigned char tmp, * ptr = (unsigned char *)str;
while (len > 0) {
indx++;
tmp = stte[indx];
jndx += tmp;
stte[indx] = stte[jndx];
stte[jndx] = tmp;
tmp += stte[indx];
*ptr ^= stte[tmp];
ptr++;
len--;
}
}
/* End of ARC4 */
/*
* Key with file invariants.
*/
int key_with_file(char * file)
{
struct stat statf[1];
struct stat control[1];
if (stat(file, statf) < 0)
return -1;
/* Turn on stable fields */
memset(control, 0, sizeof(control));
control->st_ino = statf->st_ino;
control->st_dev = statf->st_dev;
control->st_rdev = statf->st_rdev;
control->st_uid = statf->st_uid;
control->st_gid = statf->st_gid;
control->st_size = statf->st_size;
control->st_mtime = statf->st_mtime;
control->st_ctime = statf->st_ctime;
key(control, sizeof(control));
return 0;
}
#if DEBUGEXEC
void debugexec(char * sh11, int argc, char ** argv)
{
int i;
fprintf(stderr, "shll=%s\n", sh11 ? sh11 : "<null>");
fprintf(stderr, "argc=%d\n", argc);
if (!argv) {
fprintf(stderr, "argv=<null>\n");
} else {
for (i = 0; i <= argc ; i++)
fprintf(stderr, "argv[%d]=%.60s\n", i, argv[i] ? argv[i] : "<null>");
}
}
#endif /* DEBUGEXEC */
void rmarg(char ** argv, char * arg)
{
for (; argv && *argv && *argv != arg; argv++);
for (; argv && *argv; argv++)
*argv = argv[1];
}
void chkenv_end(void);
int chkenv(int argc)
{
char buff[512];
unsigned long mask, m;
int l, a, c;
char * string;
extern char ** environ;
mask = (unsigned long)getpid();
stte_0();
key(&chkenv, (void*)&chkenv_end - (void*)&chkenv);
key(&data, sizeof(data));
key(&mask, sizeof(mask));
arc4(&mask, sizeof(mask));
sprintf(buff, "x%lx", mask);
string = getenv(buff);
#if DEBUGEXEC
fprintf(stderr, "getenv(%s)=%s\n", buff, string ? string : "<null>");
#endif
l = strlen(buff);
if (!string) {
/* 1st */
sprintf(&buff[l], "=%lu %d", mask, argc);
putenv(strdup(buff));
return 0;
}
c = sscanf(string, "%lu %d%c", &m, &a, buff);
if (c == 2 && m == mask) {
/* 3rd */
rmarg(environ, &string[-l - 1]);
return 1 + (argc - a);
}
return -1;
}
void chkenv_end(void){}
#if !TRACEABLE
#define _LINUX_SOURCE_COMPAT
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#if !defined(PTRACE_ATTACH) && defined(PT_ATTACH)
# define PTRACE_ATTACH PT_ATTACH
#endif
void untraceable(char * argv0)
{
char proc[80];
int pid, mine;
switch(pid = fork()) {
case 0:
pid = getppid();
/* For problematic SunOS ptrace */
#if defined(__FreeBSD__)
sprintf(proc, "/proc/%d/mem", (int)pid);
#else
sprintf(proc, "/proc/%d/as", (int)pid);
#endif
close(0);
mine = !open(proc, O_RDWR|O_EXCL);
if (!mine && errno != EBUSY)
mine = !ptrace(PTRACE_ATTACH, pid, 0, 0);
if (mine) {
kill(pid, SIGCONT);
} else {
perror(argv0);
kill(pid, SIGKILL);
}
_exit(mine);
case -1:
break;
default:
if (pid == waitpid(pid, 0, 0))
return;
}
perror(argv0);
_exit(1);
}
#endif /* !TRACEABLE */
char * xsh(int argc, char ** argv)
{
char * scrpt;
int ret, i, j;
char ** varg;
char * me = argv[0];
if (me == NULL) { me = getenv("_"); }
if (me == 0) { fprintf(stderr, "E: neither argv[0] nor $_ works."); exit(1); }
ret = chkenv(argc);
stte_0();
key(pswd, pswd_z);
arc4(msg1, msg1_z);
arc4(date, date_z);
if (date[0] && (atoll(date)<time(NULL)))
return msg1;
arc4(shll, shll_z);
arc4(inlo, inlo_z);
arc4(xecc, xecc_z);
arc4(lsto, lsto_z);
arc4(tst1, tst1_z);
key(tst1, tst1_z);
arc4(chk1, chk1_z);
if ((chk1_z != tst1_z) || memcmp(tst1, chk1, tst1_z))
return tst1;
arc4(msg2, msg2_z);
if (ret < 0)
return msg2;
varg = (char **)calloc(argc + 10, sizeof(char *));
if (!varg)
return 0;
if (ret) {
arc4(rlax, rlax_z);
if (!rlax[0] && key_with_file(shll))
return shll;
arc4(opts, opts_z);
arc4(text, text_z);
arc4(tst2, tst2_z);
key(tst2, tst2_z);
arc4(chk2, chk2_z);
if ((chk2_z != tst2_z) || memcmp(tst2, chk2, tst2_z))
return tst2;
/* Prepend hide_z spaces to script text to hide it. */
scrpt = malloc(hide_z + text_z);
if (!scrpt)
return 0;
memset(scrpt, (int) ' ', hide_z);
memcpy(&scrpt[hide_z], text, text_z);
} else { /* Reexecute */
if (*xecc) {
scrpt = malloc(512);
if (!scrpt)
return 0;
sprintf(scrpt, xecc, me);
} else {
scrpt = me;
}
}
j = 0;
#if BUSYBOXON
varg[j++] = "busybox";
varg[j++] = "sh";
#else
varg[j++] = argv[0]; /* My own name at execution */
#endif
if (ret && *opts)
varg[j++] = opts; /* Options on 1st line of code */
if (*inlo)
varg[j++] = inlo; /* Option introducing inline code */
varg[j++] = scrpt; /* The script itself */
if (*lsto)
varg[j++] = lsto; /* Option meaning last option */
i = (ret > 1) ? ret : 0; /* Args numbering correction */
while (i < argc)
varg[j++] = argv[i++]; /* Main run-time arguments */
varg[j] = 0; /* NULL terminated array */
#if DEBUGEXEC
debugexec(shll, j, varg);
#endif
execvp(shll, varg);
return shll;
}
int main(int argc, char ** argv)
{
#if DEBUGEXEC
debugexec("main", argc, argv);
#endif
#if !TRACEABLE
untraceable(argv[0]);
#endif
argv[1] = xsh(argc, argv);
fprintf(stderr, "%s%s%s: %s\n", argv[0],
errno ? ": " : "",
errno ? strerror(errno) : "",
argv[1] ? argv[1] : "<null>"
);
return 1;
}

View File

@@ -0,0 +1,534 @@
#if 0
shc Version 3.9.6, Generic Shell Script Compiler
GNU GPL Version 3 Md Jahidul Hamid <jahidulhamid@yahoo.com>
shc -f sender-d.sh
#endif
static char data [] =
#define chk1_z 22
#define chk1 ((&data[5]))
"\250\277\114\224\251\153\106\010\262\300\062\112\153\256\366\036"
"\106\002\145\140\125\310\174\373\152\251\071\211\003"
#define opts_z 1
#define opts ((&data[29]))
"\207"
#define text_z 1976
#define text ((&data[168]))
"\255\305\314\313\244\163\366\103\251\145\024\020\016\143\035\240"
"\140\167\110\037\304\334\311\115\340\210\347\130\122\057\302\000"
"\364\216\314\231\002\302\335\254\050\361\275\066\124\332\326\265"
"\121\037\324\026\374\236\143\334\047\113\065\172\173\367\172\157"
"\206\106\011\211\011\346\065\061\327\362\147\054\315\076\341\036"
"\135\266\065\131\124\231\066\173\344\153\365\137\143\160\317\351"
"\267\330\163\300\277\250\362\226\233\132\302\150\230\243\207\366"
"\132\274\117\256\125\206\052\072\362\040\232\126\220\152\100\107"
"\103\263\010\002\134\372\231\367\124\133\315\150\163\215\252\312"
"\233\275\011\023\315\117\350\323\224\073\252\215\223\362\271\173"
"\022\335\241\117\356\214\176\107\050\116\011\237\072\375\065\301"
"\226\134\050\061\242\226\337\312\204\223\345\135\161\370\041\162"
"\345\331\355\073\260\040\227\303\065\264\036\254\326\211\162\135"
"\277\270\325\243\136\252\235\042\242\323\311\057\372\324\252\270"
"\026\017\115\067\311\277\277\050\010\210\071\230\035\227\066\244"
"\073\047\165\266\347\220\237\114\215\136\115\131\103\262\225\242"
"\103\007\105\014\240\212\216\256\252\372\302\267\134\205\313\220"
"\045\300\113\166\143\072\255\277\377\056\136\140\131\273\162\177"
"\303\320\343\040\223\323\302\115\377\122\231\045\132\240\304\332"
"\350\116\271\364\275\002\336\310\324\271\044\131\372\262\217\211"
"\062\122\177\071\160\301\114\356\234\253\356\274\307\363\140\072"
"\316\136\310\175\100\267\361\016\056\376\332\155\207\104\354\034"
"\235\170\340\214\027\141\365\077\302\237\333\341\301\003\070\360"
"\052\361\310\107\261\140\255\043\001\363\026\021\027\323\367\117"
"\251\176\021\030\257\332\344\220\156\117\036\301\003\077\176\375"
"\231\046\060\121\111\223\227\031\231\270\140\132\315\135\157\120"
"\325\326\244\326\163\044\251\127\103\233\352\060\063\034\012\336"
"\365\033\026\277\143\227\037\104\312\122\334\322\133\226\004\255"
"\270\271\130\177\045\253\054\343\265\074\177\173\033\351\025\026"
"\141\131\334\277\311\054\252\105\321\333\351\351\023\171\053\213"
"\112\260\211\010\304\055\246\110\310\355\067\304\014\143\303\076"
"\235\047\344\324\027\071\127\014\232\050\167\152\317\005\206\305"
"\013\022\101\231\376\371\216\104\134\241\045\216\314\144\357\202"
"\261\074\017\321\170\211\026\371\324\110\033\267\216\365\205\271"
"\264\055\367\312\223\013\044\330\255\071\332\154\375\173\233\322"
"\355\362\165\151\232\035\164\063\324\135\357\071\231\210\045\100"
"\052\373\030\240\051\270\044\055\337\202\224\140\064\171\153\066"
"\354\000\374\221\144\336\052\147\250\244\164\075\041\241\130\250"
"\274\325\135\255\345\100\362\241\131\017\237\002\325\225\334\366"
"\366\336\231\202\073\126\240\155\026\203\375\166\350\317\072\172"
"\052\153\062\036\370\143\236\367\173\073\357\244\214\112\300\073"
"\272\322\022\332\350\111\372\071\322\371\325\072\055\152\015\120"
"\162\015\065\217\316\234\240\213\021\255\374\102\200\216\360\142"
"\320\221\044\146\041\113\022\131\033\337\361\007\347\054\101\205"
"\156\061\345\027\325\163\223\320\133\043\256\264\351\166\173\203"
"\111\104\056\107\040\302\335\244\232\241\067\122\150\353\125\361"
"\046\176\303\312\063\264\045\073\165\133\346\150\335\326\145\161"
"\205\041\056\011\070\132\265\325\070\130\173\020\353\260\346\320"
"\121\364\275\070\270\361\372\007\234\177\135\211\000\303\316\004"
"\235\056\254\244\146\300\160\260\003\264\062\350\227\144\013\176"
"\274\051\107\050\222\203\145\154\310\071\205\035\170\337\174\203"
"\255\022\062\334\104\025\152\164\175\216\004\356\004\072\054\124"
"\247\345\035\026\364\200\003\254\172\011\202\226\364\327\360\204"
"\274\002\036\152\127\171\235\150\056\115\316\265\274\364\053\343"
"\021\025\122\026\255\326\127\154\212\235\244\247\234\212\304\321"
"\000\222\262\000\113\146\047\140\027\255\207\360\136\350\200\017"
"\062\262\250\345\276\323\314\313\204\221\333\024\157\277\010\074"
"\107\266\370\002\143\354\073\326\261\244\027\202\165\127\042\012"
"\170\065\262\152\012\157\262\020\246\063\342\163\014\322\254\053"
"\013\054\156\073\236\264\134\260\261\075\215\005\361\071\260\372"
"\276\372\111\233\100\304\116\053\203\107\124\167\051\316\351\045"
"\165\101\144\144\126\363\215\021\310\044\133\302\227\112\254\356"
"\103\004\367\271\335\317\277\333\070\013\035\035\116\256\055\275"
"\324\006\356\357\020\144\013\200\261\137\170\005\060\007\333\025"
"\261\356\271\024\205\202\033\110\106\377\305\201\353\135\161\007"
"\125\360\345\055\005\244\272\172\016\053\273\101\120\234\336\334"
"\163\002\216\163\110\306\104\007\037\204\260\063\370\146\271\002"
"\366\275\161\371\203\050\241\374\333\133\254\224\320\005\160\246"
"\147\100\254\013\314\215\072\003\373\361\144\236\265\114\365\103"
"\031\044\120\010\320\370\231\263\071\264\073\073\131\100\165\351"
"\202\277\357\372\142\322\113\274\260\336\127\024\133\223\375\345"
"\007\323\116\017\322\021\072\162\034\102\214\161\321\346\200\154"
"\356\044\225\233\023\370\057\001\076\073\167\046\376\332\326\215"
"\156\373\064\176\376\202\125\112\000\022\346\167\352\034\076\221"
"\071\105\300\223\101\151\170\120\033\357\210\117\136\377\070\257"
"\056\075\174\203\360\052\140\370\326\317\260\134\116\355\322\014"
"\045\204\171\067\217\377\304\127\146\244\263\262\167\334\140\174"
"\154\057\141\157\340\327\006\162\214\244\102\111\002\074\326\127"
"\325\201\270\260\263\046\240\235\203\202\263\315\072\120\136\307"
"\167\102\275\074\003\267\200\170\110\312\352\354\115\124\166\055"
"\240\051\047\304\117\224\215\163\126\022\224\374\140\246\065\264"
"\155\215\153\036\246\176\032\334\040\331\012\174\011\212\363\255"
"\063\066\032\204\264\376\337\030\113\001\325\135\226\156\176\056"
"\334\214\320\210\356\370\377\242\355\341\071\327\034\252\224\170"
"\030\201\367\062\100\030\307\133\173\160\133\233\020\114\050\344"
"\300\134\242\352\162\061\251\132\372\251\100\034\061\122\201\261"
"\322\364\031\174\132\026\036\073\311\061\302\335\114\121\375\270"
"\236\107\357\174\323\237\362\055\145\223\233\075\111\161\321\226"
"\302\256\265\150\261\246\175\162\276\124\021\246\041\237\064\074"
"\234\103\376\124\156\246\121\151\141\360\221\176\356\377\134\272"
"\137\242\236\365\240\163\143\261\357\210\263\001\356\213\310\204"
"\355\325\214\305\042\041\322\130\314\062\017\106\244\235\034\237"
"\051\072\117\043\164\250\233\151\262\123\037\113\247\302\052\267"
"\360\375\376\102\327\002\236\026\311\275\242\170\064\252\013\303"
"\271\122\112\113\145\201\154\277\172\137\333\026\122\224\144\371"
"\232\233\067\126\237\230\011\303\177\374\165\242\010\066\301\371"
"\171\012\273\216\366\156\304\221\031\326\351\061\004\343\350\155"
"\107\306\012\074\374\370\323\115\016\043\343\276\157\257\304\070"
"\242\221\342\206\324\125\325\230\016\117\143\161\205\016\172\056"
"\174\247\144\343\333\031\250\351\137\215\263\102\112\330\314\322"
"\070\050\013\202\022\272\171\351\022\330\324\311\274\201\173\131"
"\352\375\116\300\373\362\245\222\033\037\232\015\244\311\260\314"
"\035\030\064\356\023\320\026\315\361\141\175\062\276\053\057\007"
"\222\212\130\000\233\302\313\162\316\054\301\223\352\321\056\065"
"\064\251\057\342\072\171\142\036\314\217\121\303\240\035\311\247"
"\066\173\176\100\031\171\276\215\272\206\026\351\102\355\177\376"
"\006\004\217\030\111\137\220\344\153\210\157\173\100\234\035\340"
"\225\331\265\257\061\324\036\133\276\013\176\162\144\314\305\342"
"\066\115\016\222\332\102\342\366\126\361\255\375\031\324\050\152"
"\065\120\355\351\336\312\301\302\231\047\123\253\155\044\123\306"
"\226\222\347\315\272\032\025\302\174\031\302\305\102\373\131\372"
"\040\176\201\357\172\161\233\007\362\373\174\106\247\272\115\166"
"\011\104\331\233\331\011\105\342\054\014\071\173\142\321\326\262"
"\023\342\036\171\077\310\310\337\157\277\326\100\215\141\053\110"
"\307\063\146\140\055\107\374\116\337\142\130\226\336\232\311\246"
"\241\314\147\077\166\277\332\106\066\367\315\143\024\076\061\061"
"\261\326\221\342\254\224\207\046\102\211\230\253\060\030\132\273"
"\313\366\313\071\133\140\245\125\013\052\217\063\376\061\262\175"
"\125\112\222\147\016\276\002\316\061\205\052\157\166\360\163\145"
"\333\325\335\100\117\041\114\107\370\257\104\364\144\224\102\124"
"\247\050\041\260\240\015\370\206\140\255\072\202\267\004\133\010"
"\001\103\275\010\104\202\103\122\270\267\360\074\261\054\301\043"
"\352\105\237\340\155\143\311\224\144\242\360\134\071\324\162\172"
"\353\220\006\374\005\064\250\172\143\027\275\266\002\354\327\164"
"\322\020\267\340\352\135\112\115\114\241\077\231\367\306\115\117"
"\251\071\172\066\347\377\016\203\110\233\314\205\341\321\322\076"
"\314\236\336\341\033\305\214\015\067\123\357\325\016\334\175\251"
"\074\376\062\331\370\332\277\017\072\257\045\116\044\037\320\271"
"\126\270\162\125\137\144\126\135\045\242\126\131\175\060\363\235"
"\364\007\306\175\274\324\065\241\213\377\016\170\350\223\037\114"
"\051\273\100\365\310\362\244\207\201\140\365\350\305\356\316\362"
"\122\016\242\304\332\073\312\174\373\042\343\117\266\073\200\043"
"\116\244\140\355\377\350\343\132\244\063\010\372\271\063\065\254"
"\123\317\002\344\071\102\054\175\365\064\177\121\057\030\111\204"
"\164\252\161\164\222\124\316\066\210\327\061\101\012\146\356\136"
"\065\360\102\157\062\156\354\050\243\154\172\323\204\304\127\371"
"\156\311\156\000\036\075\067\246\025\150\350\037\316\326\176\004"
"\306\300\164\371\057\141\042\323\315\235\246\122\141\376\114\317"
"\307\272\317\345\367\006\213\014\157\164\054\076\112\253\103\021"
"\154\267\012\233\030\055\157\346\312\025\070\053\024\204\373\333"
"\076\312\301\066\321\115\103\101\301\160\177\013\033\302\034\207"
"\171\047\043\222\125\222\170\037\250\260\113\274\065\106\230\164"
"\021\131\252\343\246\356\044\147\136\243\163\171\146\220\001\340"
"\270\044\163\015\267\353\054\137\234\170\033\321\277\263\105\320"
"\015\360\264\264\336\330\033\075\174\217\266\343\037\270\303"
#define tst2_z 19
#define tst2 ((&data[2353]))
"\345\223\042\022\357\241\112\354\260\222\102\167\252\056\120\014"
"\076\214\307\026\157\130\244\363"
#define chk2_z 19
#define chk2 ((&data[2375]))
"\220\111\122\133\224\270\135\156\155\316\001\121\000\005\210\301"
"\344\112\207\200\252"
#define pswd_z 256
#define pswd ((&data[2448]))
"\320\307\316\204\246\247\240\343\044\060\232\007\117\122\312\047"
"\056\001\014\302\043\036\265\342\251\304\163\362\207\111\015\130"
"\021\333\334\267\203\175\232\247\255\064\256\375\206\171\045\265"
"\172\062\170\235\121\055\146\272\255\036\204\154\131\010\212\014"
"\021\104\302\357\201\202\015\133\347\257\236\056\376\011\324\351"
"\150\047\105\305\016\254\200\274\313\005\050\044\015\263\061\037"
"\367\363\016\171\165\033\324\135\313\163\214\312\174\141\263\345"
"\211\371\252\227\246\053\124\161\061\174\226\077\060\307\136\047"
"\273\154\241\061\210\165\217\124\351\034\036\146\175\322\113\006"
"\313\366\236\161\042\362\343\123\157\171\222\237\100\360\306\374"
"\135\147\055\346\335\274\072\307\331\131\055\126\053\170\134\367"
"\157\373\150\221\355\114\344\134\305\166\373\006\146\302\002\304"
"\052\060\252\010\355\345\317\306\076\374\034\151\165\171\140\344"
"\164\311\165\142\025\131\276\333\317\272\341\066\175\344\372\247"
"\025\245\257\002\212\177\310\310\173\345\062\360\137\223\324\324"
"\134\111\066\162\243\365\115\162\260\057\251\055\023\244\324\050"
"\111\204\053\324\003\364\235\177\331\317\157\071\142\104\015\277"
"\216\104\061\061\071\176\244\351\256\116\026\301\362\353\352\074"
"\157\025\020\163\012\255\362\344\175\142\035\337\247\053\236\065"
"\157\320\147\250\117\014\177\372\362\363\355\172"
#define shll_z 10
#define shll ((&data[2712]))
"\116\326\177\257\317\335\162\123\050\324\344\244\257\005"
#define xecc_z 15
#define xecc ((&data[2724]))
"\312\105\336\014\160\351\140\311\301\063\375\121\331\242\037\000"
"\331"
#define msg1_z 65
#define msg1 ((&data[2752]))
"\134\050\374\022\242\056\212\100\177\270\300\246\373\100\315\245"
"\164\205\022\167\263\367\065\001\253\244\304\177\247\306\023\242"
"\210\302\371\325\060\023\104\341\145\324\350\321\153\167\015\367"
"\052\260\264\020\041\120\320\077\164\240\162\015\216\162\162\060"
"\262\165\235\351\005\042\055\331\327\317\061\134\171\252\263\147"
"\044\360\141\367\077\070\246\105\222\323"
#define date_z 1
#define date ((&data[2831]))
"\337"
#define rlax_z 1
#define rlax ((&data[2832]))
"\117"
#define inlo_z 3
#define inlo ((&data[2833]))
"\356\063\363"
#define lsto_z 1
#define lsto ((&data[2836]))
"\307"
#define tst1_z 22
#define tst1 ((&data[2838]))
"\154\343\141\256\045\147\355\072\031\127\273\063\274\063\151\005"
"\245\312\202\350\203\025\003\017"
#define msg2_z 19
#define msg2 ((&data[2861]))
"\125\166\060\370\333\360\072\122\317\063\176\252\305\345\310\253"
"\031\367\354\017\073\264"/* End of data[] */;
#define hide_z 4096
#define DEBUGEXEC 0 /* Define as 1 to debug execvp calls */
#define TRACEABLE 1 /* Define as 1 to enable ptrace the executable */
#define BUSYBOXON 0 /* Define as 1 to enable work with busybox */
/* rtc.c */
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
/* 'Alleged RC4' */
static unsigned char stte[256], indx, jndx, kndx;
/*
* Reset arc4 stte.
*/
void stte_0(void)
{
indx = jndx = kndx = 0;
do {
stte[indx] = indx;
} while (++indx);
}
/*
* Set key. Can be used more than once.
*/
void key(void * str, int len)
{
unsigned char tmp, * ptr = (unsigned char *)str;
while (len > 0) {
do {
tmp = stte[indx];
kndx += tmp;
kndx += ptr[(int)indx % len];
stte[indx] = stte[kndx];
stte[kndx] = tmp;
} while (++indx);
ptr += 256;
len -= 256;
}
}
/*
* Crypt data.
*/
void arc4(void * str, int len)
{
unsigned char tmp, * ptr = (unsigned char *)str;
while (len > 0) {
indx++;
tmp = stte[indx];
jndx += tmp;
stte[indx] = stte[jndx];
stte[jndx] = tmp;
tmp += stte[indx];
*ptr ^= stte[tmp];
ptr++;
len--;
}
}
/* End of ARC4 */
/*
* Key with file invariants.
*/
int key_with_file(char * file)
{
struct stat statf[1];
struct stat control[1];
if (stat(file, statf) < 0)
return -1;
/* Turn on stable fields */
memset(control, 0, sizeof(control));
control->st_ino = statf->st_ino;
control->st_dev = statf->st_dev;
control->st_rdev = statf->st_rdev;
control->st_uid = statf->st_uid;
control->st_gid = statf->st_gid;
control->st_size = statf->st_size;
control->st_mtime = statf->st_mtime;
control->st_ctime = statf->st_ctime;
key(control, sizeof(control));
return 0;
}
#if DEBUGEXEC
void debugexec(char * sh11, int argc, char ** argv)
{
int i;
fprintf(stderr, "shll=%s\n", sh11 ? sh11 : "<null>");
fprintf(stderr, "argc=%d\n", argc);
if (!argv) {
fprintf(stderr, "argv=<null>\n");
} else {
for (i = 0; i <= argc ; i++)
fprintf(stderr, "argv[%d]=%.60s\n", i, argv[i] ? argv[i] : "<null>");
}
}
#endif /* DEBUGEXEC */
void rmarg(char ** argv, char * arg)
{
for (; argv && *argv && *argv != arg; argv++);
for (; argv && *argv; argv++)
*argv = argv[1];
}
void chkenv_end(void);
int chkenv(int argc)
{
char buff[512];
unsigned long mask, m;
int l, a, c;
char * string;
extern char ** environ;
mask = (unsigned long)getpid();
stte_0();
key(&chkenv, (void*)&chkenv_end - (void*)&chkenv);
key(&data, sizeof(data));
key(&mask, sizeof(mask));
arc4(&mask, sizeof(mask));
sprintf(buff, "x%lx", mask);
string = getenv(buff);
#if DEBUGEXEC
fprintf(stderr, "getenv(%s)=%s\n", buff, string ? string : "<null>");
#endif
l = strlen(buff);
if (!string) {
/* 1st */
sprintf(&buff[l], "=%lu %d", mask, argc);
putenv(strdup(buff));
return 0;
}
c = sscanf(string, "%lu %d%c", &m, &a, buff);
if (c == 2 && m == mask) {
/* 3rd */
rmarg(environ, &string[-l - 1]);
return 1 + (argc - a);
}
return -1;
}
void chkenv_end(void){}
#if !TRACEABLE
#define _LINUX_SOURCE_COMPAT
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#if !defined(PTRACE_ATTACH) && defined(PT_ATTACH)
# define PTRACE_ATTACH PT_ATTACH
#endif
void untraceable(char * argv0)
{
char proc[80];
int pid, mine;
switch(pid = fork()) {
case 0:
pid = getppid();
/* For problematic SunOS ptrace */
#if defined(__FreeBSD__)
sprintf(proc, "/proc/%d/mem", (int)pid);
#else
sprintf(proc, "/proc/%d/as", (int)pid);
#endif
close(0);
mine = !open(proc, O_RDWR|O_EXCL);
if (!mine && errno != EBUSY)
mine = !ptrace(PTRACE_ATTACH, pid, 0, 0);
if (mine) {
kill(pid, SIGCONT);
} else {
perror(argv0);
kill(pid, SIGKILL);
}
_exit(mine);
case -1:
break;
default:
if (pid == waitpid(pid, 0, 0))
return;
}
perror(argv0);
_exit(1);
}
#endif /* !TRACEABLE */
char * xsh(int argc, char ** argv)
{
char * scrpt;
int ret, i, j;
char ** varg;
char * me = argv[0];
if (me == NULL) { me = getenv("_"); }
if (me == 0) { fprintf(stderr, "E: neither argv[0] nor $_ works."); exit(1); }
ret = chkenv(argc);
stte_0();
key(pswd, pswd_z);
arc4(msg1, msg1_z);
arc4(date, date_z);
if (date[0] && (atoll(date)<time(NULL)))
return msg1;
arc4(shll, shll_z);
arc4(inlo, inlo_z);
arc4(xecc, xecc_z);
arc4(lsto, lsto_z);
arc4(tst1, tst1_z);
key(tst1, tst1_z);
arc4(chk1, chk1_z);
if ((chk1_z != tst1_z) || memcmp(tst1, chk1, tst1_z))
return tst1;
arc4(msg2, msg2_z);
if (ret < 0)
return msg2;
varg = (char **)calloc(argc + 10, sizeof(char *));
if (!varg)
return 0;
if (ret) {
arc4(rlax, rlax_z);
if (!rlax[0] && key_with_file(shll))
return shll;
arc4(opts, opts_z);
arc4(text, text_z);
arc4(tst2, tst2_z);
key(tst2, tst2_z);
arc4(chk2, chk2_z);
if ((chk2_z != tst2_z) || memcmp(tst2, chk2, tst2_z))
return tst2;
/* Prepend hide_z spaces to script text to hide it. */
scrpt = malloc(hide_z + text_z);
if (!scrpt)
return 0;
memset(scrpt, (int) ' ', hide_z);
memcpy(&scrpt[hide_z], text, text_z);
} else { /* Reexecute */
if (*xecc) {
scrpt = malloc(512);
if (!scrpt)
return 0;
sprintf(scrpt, xecc, me);
} else {
scrpt = me;
}
}
j = 0;
#if BUSYBOXON
varg[j++] = "busybox";
varg[j++] = "sh";
#else
varg[j++] = argv[0]; /* My own name at execution */
#endif
if (ret && *opts)
varg[j++] = opts; /* Options on 1st line of code */
if (*inlo)
varg[j++] = inlo; /* Option introducing inline code */
varg[j++] = scrpt; /* The script itself */
if (*lsto)
varg[j++] = lsto; /* Option meaning last option */
i = (ret > 1) ? ret : 0; /* Args numbering correction */
while (i < argc)
varg[j++] = argv[i++]; /* Main run-time arguments */
varg[j] = 0; /* NULL terminated array */
#if DEBUGEXEC
debugexec(shll, j, varg);
#endif
execvp(shll, varg);
return shll;
}
int main(int argc, char ** argv)
{
#if DEBUGEXEC
debugexec("main", argc, argv);
#endif
#if !TRACEABLE
untraceable(argv[0]);
#endif
argv[1] = xsh(argc, argv);
fprintf(stderr, "%s%s%s: %s\n", argv[0],
errno ? ": " : "",
errno ? strerror(errno) : "",
argv[1] ? argv[1] : "<null>"
);
return 1;
}

View File

@@ -3,6 +3,14 @@
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
load_transhell_debug
case `arch` in
x86_64)
STORE_URL="store"
;;
aarch64)
STORE_URL="aarch64-store"
;;
esac
@@ -54,21 +62,21 @@ fi
DEBPATH=`realpath $1`
if [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_store_Packages" ] && [ ! -e "/var/lib/apt/lists/mirrors.sdu.edu.cn_spark-store-repository_store_Packages" ];then
if [ ! -e "/var/lib/apt/lists/d.spark-app.store_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/apt/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ];then
echo "接收星火仓库软件信息中..."
aptss ssupdate
fi
### 选择包信息位置
if [ -e "/var/lib/apt/lists/d.spark-app.store_store_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.spark-app.store_store_Packages"
if [ -e "/var/lib/apt/lists/d.spark-app.store_${STORE_URL}_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.spark-app.store_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
elif [ -e "/var/lib/apt/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
elif [ -e "/var/lib/apt/lists/d.store.deepinos.org.cn_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是根目录仓库配置"
else
PACKAGES_DATA_PATH="/var/lib/apt/lists/mirrors.sdu.edu.cn_spark-store-repository_store_Packages"
PACKAGES_DATA_PATH="/var/lib/apt/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是SDU镜像仓库配置"
fi

View File

@@ -50,7 +50,6 @@ fi
# The code above is modified from https://blog.csdn.net/yaxuan88521/article/details/120516298
# 每日更新星火源文件
curl --progress-bar -o /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list "https://gitee.com/deepin-community-store/repo_auto_update_script/raw/master/mirror-list-for-apt-fast/sources.list.d/sparkstore.list"