Compare commits

...

46 Commits

Author SHA1 Message Date
e6561e0a07 reason6 2023-03-08 00:35:57 +08:00
9616deb4b6 * ssinstall发现无法验证时尝试update而不是ssupdate
* 启动每日aptss update
2023-03-08 00:26:14 +08:00
96d2ea6669 红豆泥私密马赛,现在好了 2023-03-07 19:09:56 +08:00
d57c43a2b7 私密马赛,忘记空格了 2023-03-07 19:04:56 +08:00
40eadaca35 https://gitee.com/deepin-community-store/spark-store/issues/I6JSL5 2023-03-07 19:00:51 +08:00
21bcb67a73 update src/assets/json/features.json.
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2023-03-07 09:21:53 +00:00
890718fdbb changelog 2023-03-07 17:14:53 +08:00
1613825b7c 自动读取分支名 2023-03-07 17:12:22 +08:00
bcb399dc30 aptss支持非root模式启动,添加transhell支持 2023-03-07 16:53:30 +08:00
cd581d4de9 若sources.list.d为空则终止清理 2023-03-06 23:19:58 +08:00
41ef63ec4a 修复:apt-fast仍然会在旧的archieve复制,指定到旧的archieve 2023-03-06 22:47:37 +08:00
02419bfdcb 修复:无法访问系统源 2023-03-06 22:29:51 +08:00
b67fd11fd5 修复:aptss无法找到新标准的list 2023-03-06 21:51:14 +08:00
9a7a80223a feat: 彻底抛弃bwrap,提升aptss响应速度。现已可将aptss当apt用 2023-03-06 21:45:12 +08:00
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
37 changed files with 1392 additions and 934 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
(安装星火商店后在浏览器打开或复制到搜索栏打开)
(安装星火商店后在浏览器打开或复制到搜索栏打开)

34
debian/changelog vendored
View File

@@ -1,3 +1,37 @@
spark-store (4.2.3.2~Reason6) stable; urgency=medium
* ssinstall发现无法验证时尝试update而不是ssupdate
* 启动每日aptss update
-- shenmo <shenmo@spark-app.store>
spark-store (4.2.3.2~Reason5) stable; urgency=medium
* aptss 不再使用bwrap去除依赖支持容器中启动
* aptss 支持非root模式启动
* aptss 添加transhell支持
* 关于界面自动获取分支名称
* 现在安装成功则自动删除安装包
-- shenmo <shenmo@spark-app.store>
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崩溃

4
debian/control vendored
View File

@@ -39,10 +39,10 @@ Depends:${shlibs:Depends}, ${misc:Depends},
curl,
openssl,
dde-qt5integration,
bubblewrap,
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
mkdir -p /var/lib/aptss/lists
# 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,12 +16,11 @@ 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
rm -rf /etc/aptss/
rm -rf /var/lib/aptss/
# Remove Sender module
rm -f /opt/durapps/spark-store/bin/ss-feedback/sender-d

View File

@@ -0,0 +1,4 @@
#!/bin/bash
TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER="W:Running in non-root mode! If error occurs, please try to excute me as root."
TRANSHELL_CONTENT_INFO_SOURCES_LIST_D_IS_EMPTY="INFOsources.list.d directory is emptywill not try to sync"
TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST="Getting server and mirror lists..."

View File

@@ -0,0 +1,4 @@
#!/bin/bash
TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER="警告正在使用非root权限模式启动若出现问题请尝试使用root权限执行指令"
TRANSHELL_CONTENT_INFO_SOURCES_LIST_D_IS_EMPTY="信息sources.list.d文件夹是空的将不会尝试同步"
TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST="从服务器获取配置和镜像列表..."

View File

@@ -63,7 +63,7 @@ _aptss()
# Complete a -t<SPACE><TAB>
case $prev in
-t|--target-release)
COMPREPLY=( $( compgen -W "$( apt-cache policy -o Dir::Cache="/etc/aptss/" | egrep -o 'a=[^,]*|n=[^,]*' | cut -f2- -d= | sort -u)" -- "$cur" ) )
COMPREPLY=( $( compgen -W "$( apt-cache policy -o Dir::Cache="/var/lib/aptss/" | egrep -o 'a=[^,]*|n=[^,]*' | cut -f2- -d= | sort -u)" -- "$cur" ) )
return 0
;;
esac
@@ -185,12 +185,12 @@ _aptss()
return 0
;;
show|list|download|changelog|depends|rdepends)
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/etc/aptss/" \
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/var/lib/aptss/" \
2> /dev/null ) )
return 0
;;
install)
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/etc/aptss/" \
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/var/lib/aptss/" \
2> /dev/null ) )
if [[ "$cur" == ./* || "$cur" == /* ]]; then
_filedir "deb"
@@ -198,8 +198,8 @@ _aptss()
return 0
;;
source|build-dep|showsrc|policy)
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/etc/aptss/" \
2> /dev/null ) $( apt-cache dumpavail -o Dir::Cache="/etc/aptss/" | \
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" -o Dir::Cache="/var/lib/aptss/" \
2> /dev/null ) $( apt-cache dumpavail -o Dir::Cache="/var/lib/aptss/" | \
command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) )
return 0
;;

View File

@@ -1,4 +1,6 @@
#!/bin/bash
TRANSHELL_CONTENT_HASH_CHECK_FAILED="Failed in checking package hash! \nPossibly reason can be the package is broken, laggy in sync of Spark Store repository, or, there is a malware attempt to attack. \nIf you don't know what happend, please try install again after execute the command below\n sudo aptss ssupdate\n\nIf the problem still happen, please click APP Feedback button in the APP information page to feedback to us.\n\n If you are in the Audition GroupPlease use ssaudit instead of ssinstall to audit APPsfor ssinstall is used for password-free install now.\nIf you want to install an app that is removed from Spark Store repositoryyou can also use ssaudit."
TRANSHELL_CONTENT_HASH_CHECK_FAILED="Failed in checking package hash! \nPossibly reason can be the package is broken, laggy in sync of Spark Store repository, or, there is a malware attempt to attack. \nIf you don't know what happend, please try install again after execute the command below\n sudo aptss update\n\nIf the problem still happen, please click APP Feedback button in the APP information page to feedback to us.\n\n If you are in the Audition GroupPlease use ssaudit instead of ssinstall to audit APPsfor ssinstall is used for password-free install now.\nIf you want to install an app that is removed from Spark Store repositoryyou can also use ssaudit."
TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT="Please run ssinstall as root"
TRANSHELL_CONTENT_FILE_NOT_EXIST="File not exist"
TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB="No delete after install option given, will not delete the deb"
TRANSHELL_CONTENT_DEB_IS_DELETED="--delete-after-install option is given and the installation is succeeded, delete the deb file."

View File

@@ -1,4 +1,6 @@
#!/bin/bash
TRANSHELL_CONTENT_HASH_CHECK_FAILED="软件包校验失败!这不应该发生!\n可能是因为软件包已损坏星火仓库未同步或者最坏的情况恶意软件尝试利用自动安装来入侵系统\n如果你不清楚发生了什么请执行 sudo aptss ssupdate 后再尝试安装。\n如果问题仍然存在请在应用信息界面点击 应用反馈 来提交反馈给我们!\n\n 如果你是审核人员,请使用 ssaudit来替代ssinstall进行审核工作因为现在ssinstall已经被用于免密安装。\n如果你正在尝试安装已经下架的星火应用也可用ssaudit来替代ssinstall"
TRANSHELL_CONTENT_HASH_CHECK_FAILED="软件包校验失败!这不应该发生!\n可能是因为软件包已损坏星火仓库未同步或者最坏的情况恶意软件尝试利用自动安装来入侵系统\n如果你不清楚发生了什么请执行 sudo aptss update 后再尝试安装。\n如果问题仍然存在请在应用信息界面点击 应用反馈 来提交反馈给我们!\n\n 如果你是审核人员,请使用 ssaudit来替代ssinstall进行审核工作因为现在ssinstall已经被用于免密安装。\n如果你正在尝试安装已经下架的星火应用也可用ssaudit来替代ssinstall"
TRANSHELL_CONTENT_PLEASE_RUN_AS_ROOT="请使用root启动ssinstall"
TRANSHELL_CONTENT_FILE_NOT_EXIST="文件不存在"
TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB="未指定安装后删除或安装出错不删除deb包"
TRANSHELL_CONTENT_DEB_IS_DELETED="使用了--delete-after-install选项且安装未出错删除deb包"

View File

@@ -57,6 +57,9 @@ icon.path = /usr/share/icons/hicolor/scalable/apps
ssinstall-transhell.files += pkg/usr/share/ssinstall/transhell
ssinstall-transhell.path = /usr/share/ssinstall/
aptss-transhell.files += pkg/usr/share/aptss/transhell
aptss-transhell.path = /usr/share/aptss/
tmp.files += pkg/tmp/spark-store-install/feedback.sh
tmp.path = /tmp/spark-store-install
@@ -66,6 +69,7 @@ INSTALLS += \
desktop \
icon \
ssinstall-transhell \
aptss-transhell \
# sourceslist \
tmp \
service \

View File

@@ -91,11 +91,12 @@ void Application::setBuildDateTime(const QString &buildDateTime)
qDebug() << "Spark Store has been updated!";
config.setValue("build/version", QString(APP_VERSION));
config.setValue("build/branch",QString(APP_BRANCH));
config.setValue("build/time", buildDateTime);
config.sync();
}
setApplicationVersion(DApplication::buildVersion(QString(APP_VERSION) + "-" + "Flamescion" + "-" + buildDateTime));
setApplicationVersion(DApplication::buildVersion(QString(APP_VERSION) + "-" + QString(APP_BRANCH) + "-" + buildDateTime));
}
void Application::setMainWindow(MainWindow *window)

View File

@@ -20,6 +20,6 @@
"description": "Fix 1 detailed description..."
}
],
"linkUrl": "https://gitee.com/deepin-community-store/spark-store/releases/4.2.3test3",
"linkUrl": "https://gitee.com/deepin-community-store/spark-store/releases/",
"linkButtonVisible": true
}

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

@@ -26,7 +26,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
VERSION = $$BUILD_VERSION
isEmpty(VERSION): VERSION = 4.0.0
DEFINES += APP_VERSION=\\\"'$${VERSION}'\\\"
DEFINES += APP_BRANCH=\\\"'$$system(git symbolic-ref --short -q HEAD)'\\\"
# Disable qWarning / qDebug output in Release
#CONFIG(release, debug | release): DEFINES += QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT

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)
{
@@ -175,7 +175,7 @@ void DownloadItem::slotAsyncInstall(int t)
switch(t)
{
case 0:
installer.start("pkexec", QStringList() << "ssinstall" << "/tmp/spark-store/" + ui->label_filename->text().toUtf8());
installer.start("pkexec", QStringList() << "ssinstall" << "/tmp/spark-store/" + ui->label_filename->text().toUtf8() << + "--delete-after-install");
break;
case 1:
installer.start("deepin-deb-installer", QStringList() << "/tmp/spark-store/" + ui->label_filename->text().toUtf8());
@@ -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

@@ -0,0 +1,14 @@
Debug::RunScripts true;
Dir::Cache::archives "/var/cache/apt/archives";
Dir::Cache "/var/lib/aptss/";
Dir::Etc::SourceParts "/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/";
Dir::State::lists "/var/lib/aptss/lists/";
APT::Get::Fix-Broken true;
APT::Get::List-Cleanup="0";
#clear APT::Update::Post-Invoke-Success;
#clear DPkg::Post-Invoke;
#clear DPkg::Pre-Install-Pkgs;

View File

@@ -1,12 +1,53 @@
#!/bin/bash
source /opt/durapps/spark-store/bin/bashimport/transhell.amber
load_transhell
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"
is_empty_dir(){
return `ls -A $1|wc -w`
}
if [ "$(id -u)" != "0" ];then
#############################无root权限时
echo "${TRANSHELL_CONTENT_RUNNING_IN_NOT_ROOT_USER}"
else
if is_empty_dir /etc/apt/sources.list.d/ ;then
echo "${TRANSHELL_CONTENT_INFO_SOURCES_LIST_D_IS_EMPTY}"
else
ln -sf /etc/apt/sources.list.d/* /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d
###让这里和系统同步,先链接,然后清除无效链接
for a in `find /opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d -type l`
do
stat -L $a >/dev/null 2>/dev/null
if [ $? -gt 0 ];then
rm $a
fi
done
fi
fi
if [ ! -e "/tmp/aptss-conf/apt-fast.conf" ];then
###刷新apt-fast配置
mkdir -p /tmp/aptss-conf/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo "${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}"
echo
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
@@ -14,18 +55,16 @@ 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
echo "接收星火仓库软件信息中..."
if [ ! -e "/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ];then
mkdir -p /tmp/aptss-conf/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo "${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}"
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 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"
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"
apt update -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
#只更新星火源
@@ -41,17 +80,15 @@ if [ "$1" = "install" ] || [ "$1" = "upgrade" ] || [ "$1" = "full-upgrade" ] ;
###执行
bwrap --dev-bind / / \
--bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list \
${SS_APT_FAST} "$@" --allow-downgrades
${SS_APT_FAST} "$@" --allow-downgrades -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
elif [ "$1" = "download" ];then
###执行
bwrap --dev-bind / / \
--bind '/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list' /etc/apt/sources.list.d/sparkstore.list \
${SS_APT_FAST} "$@" --allow-downgrades
${SS_APT_FAST} "$@" --allow-downgrades -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
elif [ "$1" = "policy" ] || [ "$1" = "search" ];then
@@ -59,47 +96,37 @@ elif [ "$1" = "policy" ] || [ "$1" = "search" ];then
###执行
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 "$@"
apt "$@" -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
elif [ "$1" = "ssupdate" ];then
mkdir -p /tmp/aptss-conf/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo "${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}"
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 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"
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"
cp -r /var/lib/apt/lists/* /var/lib/aptss/lists/
apt update -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" -o Dir::Etc::sourcelist="/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list"
#只更新星火源
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"
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/
echo "从服务器获取配置和镜像列表..."
echo "Getting server and mirror lists..."
echo "${TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST}"
echo
curl --progress-bar -o /tmp/aptss-conf/apt-fast.conf "https://d.store.deepinos.org.cn/apt-fast.conf"
chmod -R 755 /tmp/aptss-conf
### 额外一份拿来给aptss自动补全用
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 "$@" -o APT::Get::List-Cleanup="0"
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 "$@" -o APT::Get::List-Cleanup="0" -o Dir::Cache="/etc/aptss/"
apt "$@" -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
else
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 "$@"
apt "$@" -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf
fi

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/aptss/lists/d.spark-app.store_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ] && [ ! -e "/var/lib/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages" ];then
echo "接收星火仓库软件信息中..."
aptss ssupdate
aptss update
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/aptss/lists/d.spark-app.store_${STORE_URL}_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/aptss/lists/d.spark-app.store_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是星火域名单目录仓库配置"
elif [ -e "/var/lib/aptss/lists/d.store.deepinos.org.cn_${STORE_URL}_Packages" ];then
PACKAGES_DATA_PATH="/var/lib/aptss/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/aptss/lists/mirrors.sdu.edu.cn_spark-store-repository_${STORE_URL}_Packages"
echo "星火仓库的Packages位置为 $PACKAGES_DATA_PATH是SDU镜像仓库配置"
fi
@@ -99,6 +107,14 @@ try_run_ret="$?"
dpkg -i "$DEBPATH" || aptss install -yf
#### --delete
if [ "$?" = "0" ] && [ "$2" = "--delete-after-install" ];then
rm "$DEBPATH"
echo "${TRANSHELL_CONTENT_DEB_IS_DELETED}"
else
echo "${TRANSHELL_CONTENT_WILL_NOT_DELETE_DEB}"
fi
else

View File

@@ -12,7 +12,7 @@ case $1 in
;;
upgradable-list)
output=$(env LANGUAGE=en_US 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 list --upgradable -o Dir::Etc::sourcelist="sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="/dev/null" -o APT::Get::List-Cleanup="0" | awk NR\>1)
output=$(env LANGUAGE=en_US apt -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf list --upgradable -o Dir::Etc::sourcelist="/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list" -o Dir::Etc::sourceparts="/dev/null" -o APT::Get::List-Cleanup="0" | awk NR\>1)
IFS_OLD="$IFS"
IFS=$'\n'

View File

@@ -21,7 +21,7 @@ function notify-send() {
}
# 检测网络链接畅通
function network()
function network-check()
{
# 超时时间
local timeout=15
@@ -41,7 +41,7 @@ function network()
fi
}
network
network-check
if [ $? -ne 0 ] ; then
echo "$TRANSHELL_CONTENT_NETWORK_FAIL"
exit -1
@@ -50,9 +50,8 @@ 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"
aptss update
updatetext=`aptss ssupdate 2>&1`

View File

@@ -240,12 +240,12 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="138"/>
<location filename="../src/application.cpp" line="139"/>
<source>Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="148"/>
<location filename="../src/application.cpp" line="149"/>
<source>%1 is released under %2</source>
<translation type="unfinished"></translation>
</message>
@@ -498,7 +498,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="145"/>
<location filename="../src/application.cpp" line="146"/>
<source>Spark Project</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -240,12 +240,12 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="138"/>
<location filename="../src/application.cpp" line="139"/>
<source>Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="148"/>
<location filename="../src/application.cpp" line="149"/>
<source>%1 is released under %2</source>
<translation type="unfinished"></translation>
</message>
@@ -498,7 +498,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/application.cpp" line="145"/>
<location filename="../src/application.cpp" line="146"/>
<source>Spark Project</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -240,12 +240,12 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="138"/>
<location filename="../src/application.cpp" line="139"/>
<source>Version: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="148"/>
<location filename="../src/application.cpp" line="149"/>
<source>%1 is released under %2</source>
<translation>%1%2</translation>
</message>
@@ -498,7 +498,7 @@
<translation>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火计划开发者&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="145"/>
<location filename="../src/application.cpp" line="146"/>
<source>Spark Project</source>
<translation></translation>
</message>

View File

@@ -240,12 +240,12 @@
<context>
<name>DAboutDialog</name>
<message>
<location filename="../src/application.cpp" line="138"/>
<location filename="../src/application.cpp" line="139"/>
<source>Version: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/application.cpp" line="148"/>
<location filename="../src/application.cpp" line="149"/>
<source>%1 is released under %2</source>
<translation>%1%2</translation>
</message>
@@ -498,7 +498,7 @@
<translation>&lt;span style=&apos; font-size:10pt;font-weight:60;&apos;&gt;&lt;/span&gt;&lt;br/&gt;&lt;a href=&apos;https://www.spark-app.store/&apos;&gt;https://www.spark-app.store&lt;/a&gt;&lt;br/&gt;&lt;span style=&apos; font-size:12pt;&apos;&gt;星火计划开发者&lt;/span&gt;</translation>
</message>
<message>
<location filename="../src/application.cpp" line="145"/>
<location filename="../src/application.cpp" line="146"/>
<source>Spark Project</source>
<translation></translation>
</message>