mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-12-15 13:22:04 +08:00
Compare commits
78 Commits
4.2.3test4
...
4.2.3.2Rea
| Author | SHA1 | Date | |
|---|---|---|---|
| c6688e47fb | |||
| e04b2545a9 | |||
| 9b4c3aa2ce | |||
| e6561e0a07 | |||
| 9616deb4b6 | |||
| 96d2ea6669 | |||
| d57c43a2b7 | |||
| 40eadaca35 | |||
| 21bcb67a73 | |||
| 890718fdbb | |||
| 1613825b7c | |||
| bcb399dc30 | |||
| cd581d4de9 | |||
| 41ef63ec4a | |||
| 02419bfdcb | |||
| b67fd11fd5 | |||
| 9a7a80223a | |||
| aa85ee53a8 | |||
| ac45f5eec9 | |||
| 84cc4a9208 | |||
| 795a6ca709 | |||
| dab4606e9b | |||
| 1954196ba1 | |||
| fc0edab44c | |||
| a04cf4e6d9 | |||
| e85576e5f0 | |||
| efba72002a | |||
| 8ff46e554f | |||
| 57db01aeaf | |||
| 0ceb99e121 | |||
| 83b539e7da | |||
| ce6c0a4613 | |||
| cf59aeb4eb | |||
| 17ca13cf00 | |||
|
|
b99225bd3c | ||
| 8f39710cdb | |||
| 7ec6be1969 | |||
| 1543d75339 | |||
| 77eb0d84c7 | |||
| 68ddb3ffcc | |||
| 58ea0249d8 | |||
| eb01bf253e | |||
| c22ce6290b | |||
| 1f7608bf77 | |||
| 16115a455b | |||
| ce680d54f9 | |||
| a90699163f | |||
| 3edf39b4ef | |||
| f5c879b369 | |||
| 2bd9c4a440 | |||
| f494f15922 | |||
| d5df4057e9 | |||
| dc07b7cb02 | |||
| 1bb0bf7d71 | |||
| cf00d54355 | |||
| 1ea7067379 | |||
| 29ad3cc72d | |||
| dfe57bf2c3 | |||
| b37f8d7f7e | |||
| b51b248566 | |||
| 21baf598d7 | |||
| 2c6d706c58 | |||
| 1b1f7578d0 | |||
| 9275425bdf | |||
| 22b1d66c07 | |||
| a3e1d19ac3 | |||
| 762caae49f | |||
| 4e4ee205de | |||
| 9d4e19e606 | |||
| 4d142ec614 | |||
| ee0d3f87ec | |||
| 4ce19e25e5 | |||
| 41a6a3fc04 | |||
| 682a6e38d6 | |||
| 36d273dd5e | |||
| 8850cfd4a3 | |||
| bec8a14baf | |||
| 8918e63484 |
@@ -32,8 +32,7 @@ stages:
|
||||
- cd ..
|
||||
- rm -rf dtk-old-bundle
|
||||
- 'mk-build-deps --install --tool "apt-get -o Debug::pkgProblemResolver=yes -y" '
|
||||
- sed -i 's/-j$(JOBS)/-j2/g' debian/rules
|
||||
- dpkg-buildpackage -b -us -uc
|
||||
- dpkg-buildpackage -j2 -b -us -uc
|
||||
- cd ..
|
||||
- ls -all
|
||||
- pwd
|
||||
|
||||
@@ -33,8 +33,7 @@ stages:
|
||||
- rm -rf dtk-old-bundle
|
||||
- ''
|
||||
- 'mk-build-deps --install --tool "apt-get -o Debug::pkgProblemResolver=yes -y" '
|
||||
- sed -i 's/-j$(JOBS)/-j2/g' debian/rules
|
||||
- dpkg-buildpackage -b -us -uc
|
||||
- dpkg-buildpackage -j2 -b -us -uc
|
||||
- cd ..
|
||||
- ls -all
|
||||
- pwd
|
||||
|
||||
18
README.md
18
README.md
@@ -1,6 +1,13 @@
|
||||
# Spark App Store
|
||||
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](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
|
||||
@@ -51,7 +58,14 @@ Then
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
dpkg-buildpackage
|
||||
dpkg-buildpackage -j
|
||||
```
|
||||
|
||||
Or:
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
./build_and_install.sh
|
||||
```
|
||||
|
||||
|
||||
@@ -70,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)
|
||||
|
||||
21
README.zh.md
21
README.zh.md
@@ -1,6 +1,13 @@
|
||||
# 星火应用商店
|
||||
[](https://gitee.com/deepin-community-store/spark-store/stargazers) [](https://gitee.com/deepin-community-store/spark-store/members)
|
||||
|
||||
## 分支:原理
|
||||
|
||||
此分支用于aarch64-store支持
|
||||
|
||||
---
|
||||
## 请注意,aarch64的支持是实验性的,并未确认持续支持!
|
||||
|
||||
众所周知,国内的Linux应用比较少,wine应用难以获取,优质工具分散在民间各大论坛,无法形成合力,难以改善生态
|
||||
|
||||
生态构建需要的不是某一方的单打独斗,而是人人行动起来,汇聚星火,产生燎原之势
|
||||
@@ -34,13 +41,13 @@
|
||||
Deepin V20/UOS 21 系统下, 安装依赖
|
||||
|
||||
```shell
|
||||
sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin
|
||||
sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin libqt5svg5*
|
||||
|
||||
```
|
||||
|
||||
Ubuntu 22.04 系统下, 安装依赖
|
||||
```shell
|
||||
sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev qtwayland5 qtwayland5-dev-tools
|
||||
sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev qtwayland5 qtwayland5-dev-tools libqt5svg5*
|
||||
|
||||
```
|
||||
|
||||
@@ -48,9 +55,15 @@ sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a lib
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
dpkg-buildpackage
|
||||
dpkg-buildpackage -j
|
||||
```
|
||||
|
||||
或者: 编译并安装
|
||||
```shell
|
||||
git clone https://gitee.com/deepin-community-store/spark-store.git
|
||||
cd spark-store
|
||||
./build_and_install.sh
|
||||
```
|
||||
|
||||
|
||||
## 🚀 协作
|
||||
@@ -65,4 +78,4 @@ https://chat.shenmo.tech/
|
||||
|
||||
spk://store/chat/store.spark-app.feedback
|
||||
|
||||
(安装星火商店后在浏览器打开或复制到搜索栏打开)
|
||||
(安装星火商店后在浏览器打开或复制到搜索栏打开)
|
||||
|
||||
24
build_and_install.sh
Executable file
24
build_and_install.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
|
||||
# Deepin V20/UOS 21 系统下, 安装依赖
|
||||
|
||||
# ```shell
|
||||
# sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin
|
||||
|
||||
# ```
|
||||
|
||||
# Ubuntu 22.04 系统下, 安装依赖
|
||||
# ```shell
|
||||
# sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev qtwayland5 qtwayland5-dev-tools
|
||||
|
||||
# ```
|
||||
|
||||
echo "Deepin V20/UOS 21 系统下, 安装依赖"
|
||||
echo "sudo apt install git qt5-default debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev fakeroot qtwayland5 qtwayland5-dev-tools dde-qt5wayland-plugin"
|
||||
|
||||
echo "Ubuntu 22.04 系统下, 安装依赖"
|
||||
echo "sudo apt install git qtbase5-dev debhelper pkg-config qtchooser libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5 libqt5concurrent5 libdtkcore-dev libdtkgui-dev libdtkwidget-dev qttools5-private-dev libnotify-dev qtwebengine5-dev qtwayland5 qtwayland5-dev-tools"
|
||||
|
||||
dpkg-buildpackage -j
|
||||
sudo apt reinstall ../spark-store_*.deb
|
||||
|
||||
rm ../spark-store_*
|
||||
45
debian/changelog
vendored
45
debian/changelog
vendored
@@ -1,3 +1,48 @@
|
||||
spark-store (4.2.3.2~Reason7) stable; urgency=medium
|
||||
* ssinstall发现无法验证时尝试update而不是ssupdate
|
||||
* 启动每日aptss update
|
||||
* ssinstall在发现无法安装后尝试先进行下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崩溃
|
||||
* 新增: aptss 检查package配置增加sdu,store
|
||||
* 新增: 一键编译并安装脚本
|
||||
* 新增: 后台安装结束后退出任务栏驻留
|
||||
|
||||
-- shenmo <shenmo@spark-app.store> Fri, 30 Jan 2022 00:00:00 +0800
|
||||
|
||||
spark-store (4.2.3~test4) stable; urgency=medium
|
||||
|
||||
* 修复: aptss 无法安装
|
||||
|
||||
5
debian/control
vendored
5
debian/control
vendored
@@ -14,6 +14,7 @@ Build-Depends:
|
||||
libdtkcore-dev(>=5.0),
|
||||
libdtkgui-dev(>=5.0),
|
||||
libdtkwidget-dev(>=5.0),
|
||||
libqt5svg5-dev,
|
||||
qttools5-private-dev,
|
||||
qtwebengine5-dev,
|
||||
qtwayland5,
|
||||
@@ -38,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.
|
||||
|
||||
2
debian/rules
vendored
2
debian/rules
vendored
@@ -24,7 +24,7 @@ override_dh_auto_configure:
|
||||
-o $(CURDIR)/build/
|
||||
|
||||
override_dh_auto_build:
|
||||
make MAKEFLAGS="$(MAKEFLAGS)" -C $(CURDIR)/build
|
||||
make MAKEFLAGS="$(MAKEFLAGS)" -C $(CURDIR)/build
|
||||
|
||||
override_dh_auto_install:
|
||||
make -C $(CURDIR)/build install \
|
||||
|
||||
21
debian/spark-store.postinst
vendored
21
debian/spark-store.postinst
vendored
@@ -1,14 +1,21 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
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/
|
||||
|
||||
2
debian/spark-store.postrm
vendored
2
debian/spark-store.postrm
vendored
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
# Update certain caches
|
||||
update-icon-caches /usr/share/icons/hicolor || true
|
||||
|
||||
23
debian/spark-store.prerm
vendored
23
debian/spark-store.prerm
vendored
@@ -1,4 +1,14 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
function notify-send()
|
||||
{
|
||||
#Detect the user using such display
|
||||
local user=$(who | awk '{print $1}' | head -n 1)
|
||||
|
||||
#Detect the id of the user
|
||||
local uid=$(id -u $user)
|
||||
|
||||
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "$@"
|
||||
}
|
||||
|
||||
if [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then
|
||||
# Remove residual symbol links
|
||||
@@ -6,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
|
||||
@@ -32,4 +41,12 @@ if [ "$1" = "remove" ] || [ "$1" = "purge" ] ; then
|
||||
apt-key del '9D9A A859 F750 24B1 A1EC E16E 0E41 D354 A29A 440C'
|
||||
else
|
||||
echo "非卸载操作,不进行配置清理"
|
||||
|
||||
if [ ! -z "`pidof spark-store`" ];then
|
||||
echo "关闭已有 spark-store.."
|
||||
notify-send "正在升级星火商店" "请在升级结束后重启星火商店" -i spark-store
|
||||
killall spark-store
|
||||
else
|
||||
echo "继续安装 spark-store.."
|
||||
fi
|
||||
fi
|
||||
|
||||
4
pkg/usr/share/aptss/transhell/aptss_en_US.transhell
Normal file
4
pkg/usr/share/aptss/transhell/aptss_en_US.transhell
Normal 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="INFO:sources.list.d directory is empty,will not try to sync"
|
||||
TRANSHELL_CONTENT_GETTING_SERVER_CONFIG_AND_MIRROR_LIST="Getting server and mirror lists..."
|
||||
4
pkg/usr/share/aptss/transhell/aptss_zh_CN.transhell
Normal file
4
pkg/usr/share/aptss/transhell/aptss_zh_CN.transhell
Normal 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="从服务器获取配置和镜像列表..."
|
||||
@@ -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
|
||||
;;
|
||||
|
||||
@@ -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 Group,Please use ssaudit instead of ssinstall to audit APPs,for ssinstall is used for password-free install now.\nIf you want to install an app that is removed from Spark Store repository,you 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 Group,Please use ssaudit instead of ssinstall to audit APPs,for ssinstall is used for password-free install now.\nIf you want to install an app that is removed from Spark Store repository,you 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."
|
||||
|
||||
@@ -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包"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
TARGET = spark-store
|
||||
TEMPLATE = subdirs
|
||||
|
||||
CONFIG += ordered
|
||||
#CONFIG += ordered
|
||||
CONFIG += wayland-compositor
|
||||
|
||||
SUBDIRS += \
|
||||
@@ -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 \
|
||||
|
||||
@@ -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)
|
||||
@@ -113,6 +114,11 @@ void Application::setMainWindow(MainWindow *window)
|
||||
#endif
|
||||
}
|
||||
|
||||
MainWindow *Application::mainWindow()
|
||||
{
|
||||
return m_mainWindow;
|
||||
}
|
||||
|
||||
void Application::initAboutDialog()
|
||||
{
|
||||
if (m_mainWindow == nullptr)
|
||||
|
||||
@@ -20,7 +20,9 @@ public:
|
||||
static void checkAppConfigLocation();
|
||||
|
||||
void setBuildDateTime(const QString &buildDateTime);
|
||||
|
||||
void setMainWindow(MainWindow *window);
|
||||
MainWindow *mainWindow();
|
||||
|
||||
private:
|
||||
void initAboutDialog();
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
68
src/main.cpp
68
src/main.cpp
@@ -11,6 +11,7 @@
|
||||
#include <QSettings>
|
||||
#include <QFile>
|
||||
#include <QStandardPaths>
|
||||
#include <QSurfaceFormat>
|
||||
|
||||
DCORE_USE_NAMESPACE
|
||||
DWIDGET_USE_NAMESPACE
|
||||
@@ -35,15 +36,72 @@ int main(int argc, char *argv[])
|
||||
|
||||
// 龙芯机器配置,使得 DApplication 能正确加载 QTWEBENGINE
|
||||
qputenv("DTK_FORCE_RASTER_WIDGETS", "FALSE");
|
||||
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-features=UseModernMediaControls");
|
||||
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
|
||||
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-features=UseModernMediaControls");
|
||||
// qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--disable-web-security");
|
||||
|
||||
|
||||
// 浏览器开启 GPU 支持
|
||||
#ifdef __sw_64__
|
||||
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode --no-sandbox");
|
||||
#else
|
||||
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blocklist --enable-gpu-rasterization --enable-native-gpu-memory-buffers --enable-accelerated-video-decode");
|
||||
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 环境下统一处理
|
||||
*/
|
||||
if (Utils::isWayland()) {
|
||||
QString env = QString::fromUtf8(qgetenv("QTWEBENGINE_CHROMIUM_FLAGS"));
|
||||
env = env.trimmed();
|
||||
/**
|
||||
* NOTE: 参考帮助手册代码,对于麒麟 CPU 设备,
|
||||
* --disable-gpu 保证 wayland 环境下网页正常显示
|
||||
* --single-process 避免 wayland 环境下 QtWebEngine 崩溃(可选)
|
||||
*/
|
||||
env += " --disable-gpu";
|
||||
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", env.trimmed().toUtf8());
|
||||
|
||||
/**
|
||||
* NOTE: 参考帮助手册代码,对于麒麟 CPU 设备,
|
||||
* 避免 wayland 环境下 QtWebEngine 崩溃
|
||||
*/
|
||||
qputenv("QT_WAYLAND_SHELL_INTEGRATION", "kwayland-shell");
|
||||
QSurfaceFormat format;
|
||||
format.setRenderableType(QSurfaceFormat::OpenGLES);
|
||||
QSurfaceFormat::setDefaultFormat(format);
|
||||
|
||||
/**
|
||||
* NOTE: https://zhuanlan.zhihu.com/p/550285855
|
||||
* 避免 wayland 环境下从 QtWebEngine 后退回到 QWidget 时黑屏闪烁
|
||||
*/
|
||||
qputenv("QMLSCENE_DEVICE", "softwarecontext");
|
||||
DApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
|
||||
}
|
||||
|
||||
DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // 开启 Hidpi 支持
|
||||
|
||||
// 强制使用 DTK 平台插件
|
||||
|
||||
@@ -104,6 +104,22 @@ void MainWindow::openUrl(const QString &url)
|
||||
}
|
||||
}
|
||||
|
||||
bool MainWindow::isCloseWindowAnimation()
|
||||
{
|
||||
return closeWindowAnimation;
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
// 判断下载任务数量,如果没有要下载的,就直接退出主程序
|
||||
if(!downloadlistwidget->isDownloadInProcess()){
|
||||
// 已经全部下载完成
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
BaseWidgetOpacity::closeEvent(event);
|
||||
}
|
||||
|
||||
void MainWindow::initUI()
|
||||
{
|
||||
setWindowTitle(QObject::tr("Spark Store"));
|
||||
|
||||
@@ -29,6 +29,11 @@ public:
|
||||
|
||||
void openUrl(const QString &url);
|
||||
|
||||
bool isCloseWindowAnimation();
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
|
||||
private:
|
||||
void initUI();
|
||||
void initTitleBar();
|
||||
|
||||
@@ -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)];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ void BaseWidgetOpacity::closeEvent(QCloseEvent *event)
|
||||
bool isWayland = Utils::isWayland();
|
||||
if (isWayland)
|
||||
{
|
||||
closeWindowAnimation = true;
|
||||
return DBlurEffectWidget::closeEvent(event);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
* @note 备注
|
||||
* @Sample usage: DownloadItem::install(0);
|
||||
* @param int t, t为安装方式,可以为 0,1,2
|
||||
* @note 执行这个函数时,需要已经检查是否可以安装,但该函数仍然会再检测一次!
|
||||
* @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);
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ private slots:
|
||||
void slotAsyncInstall(int t);
|
||||
|
||||
signals:
|
||||
void finished();
|
||||
void finished(bool success);
|
||||
};
|
||||
|
||||
#endif // DOWNLOADITEM_H
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "backend/downloadworker.h"
|
||||
#include "utils/utils.h"
|
||||
#include "application.h"
|
||||
#include "mainwindow-dtk.h"
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QtConcurrent>
|
||||
@@ -70,6 +71,15 @@ DownloadListWidget::~DownloadListWidget()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
bool DownloadListWidget::isDownloadInProcess()
|
||||
{
|
||||
if (toDownload > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void DownloadListWidget::clearItem()
|
||||
{
|
||||
ui->listWidget->clear();
|
||||
@@ -81,9 +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);
|
||||
@@ -126,8 +141,7 @@ void DownloadListWidget::startRequest(QUrl url, QString fileName)
|
||||
{
|
||||
downloadController = new DownloadController; // 并发下载,在第一次点击下载按钮的时候才会初始化
|
||||
}
|
||||
|
||||
if (downloadController)
|
||||
else
|
||||
{
|
||||
downloadController->disconnect();
|
||||
downloadController->stopDownload();
|
||||
@@ -153,17 +167,17 @@ void DownloadListWidget::httpFinished() // 完成下载
|
||||
|
||||
QtConcurrent::run([=]()
|
||||
{
|
||||
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1)
|
||||
while (downloaditemlist[nowDownload - 1]->readyInstall() == -1) // 安装当前应用,堵塞安装,后面的下载suspend
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
downloaditemlist[nowDownload - 1]->free = true;
|
||||
emit downloadFinished();
|
||||
|
||||
if (nowDownload < allDownload)
|
||||
{
|
||||
// 如果有排队则下载下一个
|
||||
qDebug() << "切换下一个下载...";
|
||||
qDebug() << "Download: 切换下一个下载...";
|
||||
nowDownload += 1;
|
||||
while (downloaditemlist[nowDownload - 1]->close)
|
||||
{
|
||||
@@ -218,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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,12 +22,15 @@ public:
|
||||
DownloadItem *addItem(QString name, QString fileName, QString pkgName, const QPixmap icon, QString downloadurl);
|
||||
int nowDownload = 0;
|
||||
int allDownload = 0;
|
||||
int toDownload = 0;
|
||||
QList<DownloadItem *> getDIList();
|
||||
QList<QUrl> getUrlList();
|
||||
void m_move(int x, int y);
|
||||
explicit DownloadListWidget(QWidget *parent = nullptr);
|
||||
~DownloadListWidget() override;
|
||||
|
||||
bool isDownloadInProcess();
|
||||
|
||||
protected:
|
||||
void mouseMoveEvent(QMouseEvent *event) override;
|
||||
|
||||
@@ -57,6 +60,7 @@ signals:
|
||||
|
||||
private slots:
|
||||
void on_pushButton_clicked();
|
||||
void slotInstallFinished(bool success);
|
||||
};
|
||||
|
||||
#endif // DOWNLOADLISTWIDGET_H
|
||||
|
||||
14
tool/apt-fast-conf/aptss-apt.conf
Normal file
14
tool/apt-fast-conf/aptss-apt.conf
Normal 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;
|
||||
95
tool/aptss
95
tool/aptss
@@ -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.store.deepinos.org.cn_Packages" ] && [ ! -e "/var/lib/apt/lists/d.store.deepinos.org.cn_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"
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
# Feadback 反馈脚本
|
||||
使用 shc 加密, 需要使用 cc、gcc 编译。
|
||||
|
||||
此处既支持amd64也支持aarch64,参见mailget仓库,loongarch的时候再修改
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
551
tool/ss-feedback/sender-d_aarch64.sh.c
Normal file
551
tool/ss-feedback/sender-d_aarch64.sh.c
Normal 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;
|
||||
}
|
||||
534
tool/ss-feedback/sender-d_x86_64.sh.c
Normal file
534
tool/ss-feedback/sender-d_x86_64.sh.c
Normal 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;
|
||||
}
|
||||
27
tool/ssaudit
27
tool/ssaudit
@@ -26,19 +26,34 @@ fi
|
||||
|
||||
|
||||
DEBPATH=`realpath $1`
|
||||
|
||||
echo ----------------------------------------------------------------------------------
|
||||
echo ------------------------------------------------------------
|
||||
try_run_output=$(aptss --dry-run install $DEBPATH)
|
||||
try_run_ret="$?"
|
||||
|
||||
if [ "$try_run_ret" -ne 0 ]
|
||||
if [ "$try_run_ret" -ne 0 ]
|
||||
then
|
||||
echo "Package manager quit with exit code.Here is the log"
|
||||
echo "包管理器以错误代码退出.日志如下"
|
||||
echo
|
||||
echo
|
||||
echo -e "${try_run_output}"
|
||||
exit "$try_run_ret"
|
||||
fi
|
||||
echo "Will try after run aptss update"
|
||||
echo "将会在aptss update之后再次尝试"
|
||||
aptss update
|
||||
echo ----------------------------------------------------------------------------
|
||||
try_run_output=$(aptss --dry-run install $DEBPATH)
|
||||
try_run_ret="$?"
|
||||
if [ "$try_run_ret" -ne 0 ]
|
||||
then
|
||||
echo "Package manager quit with exit code.Here is the log"
|
||||
echo "包管理器以错误代码退出.日志如下"
|
||||
echo
|
||||
echo -e "${try_run_output}"
|
||||
exit "$try_run_ret"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
dpkg -i "$DEBPATH" || aptss install -yf
|
||||
|
||||
|
||||
|
||||
@@ -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.store.deepinos.org.cn_store_Packages" ];then
|
||||
PACKAGES_DATA_PATH="/var/lib/apt/lists/d.store.deepinos.org.cn_store_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,是根目录仓库配置"
|
||||
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,是星火域名单目录仓库配置"
|
||||
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
|
||||
|
||||
@@ -87,18 +95,40 @@ echo --------------------------------------------------------------------------
|
||||
try_run_output=$(aptss --dry-run install $DEBPATH)
|
||||
try_run_ret="$?"
|
||||
|
||||
if [ "$try_run_ret" -ne 0 ]
|
||||
if [ "$try_run_ret" -ne 0 ]
|
||||
then
|
||||
echo "Package manager quit with exit code.Here is the log"
|
||||
echo "包管理器以错误代码退出.日志如下"
|
||||
echo
|
||||
echo -e "${try_run_output}"
|
||||
exit "$try_run_ret"
|
||||
fi
|
||||
echo "Will try after run aptss update"
|
||||
echo "将会在aptss update之后再次尝试"
|
||||
aptss update
|
||||
echo ----------------------------------------------------------------------------
|
||||
try_run_output=$(aptss --dry-run install $DEBPATH)
|
||||
try_run_ret="$?"
|
||||
if [ "$try_run_ret" -ne 0 ]
|
||||
then
|
||||
echo "Package manager quit with exit code.Here is the log"
|
||||
echo "包管理器以错误代码退出.日志如下"
|
||||
echo
|
||||
echo -e "${try_run_output}"
|
||||
exit "$try_run_ret"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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`
|
||||
|
||||
|
||||
@@ -240,12 +240,12 @@
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="133"/>
|
||||
<location filename="../src/application.cpp" line="139"/>
|
||||
<source>Version: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="143"/>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -452,33 +452,33 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="170"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="186"/>
|
||||
<source>Submit App</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="172"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="173"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="129"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="145"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="240"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="134"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="150"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -488,7 +488,7 @@
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="33"/>
|
||||
<location filename="../src/application.cpp" line="34"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="109"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="125"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -498,17 +498,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="140"/>
|
||||
<location filename="../src/application.cpp" line="146"/>
|
||||
<source>Spark Project</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="17"/>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="18"/>
|
||||
<source>Download list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="227"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="243"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -619,12 +619,12 @@
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="228"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
|
||||
<source>About</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="229"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
|
||||
<source>Exit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
@@ -240,12 +240,12 @@
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="133"/>
|
||||
<location filename="../src/application.cpp" line="139"/>
|
||||
<source>Version: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="143"/>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -452,33 +452,33 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="170"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="186"/>
|
||||
<source>Submit App</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="172"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="173"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="129"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="145"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="240"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="134"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="150"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -488,7 +488,7 @@
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="33"/>
|
||||
<location filename="../src/application.cpp" line="34"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="109"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="125"/>
|
||||
<source>Spark Store</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -498,17 +498,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="140"/>
|
||||
<location filename="../src/application.cpp" line="146"/>
|
||||
<source>Spark Project</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="17"/>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="18"/>
|
||||
<source>Download list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="227"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="243"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -619,12 +619,12 @@
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="228"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
|
||||
<source>About</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="229"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
|
||||
<source>Exit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
@@ -240,12 +240,12 @@
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="133"/>
|
||||
<location filename="../src/application.cpp" line="139"/>
|
||||
<source>Version: %1</source>
|
||||
<translation>版本:%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="143"/>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation>%1遵循%2协议发布</translation>
|
||||
</message>
|
||||
@@ -452,33 +452,33 @@
|
||||
<translation>更新</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="170"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="186"/>
|
||||
<source>Submit App</source>
|
||||
<translation>投递应用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation>使用本地投稿器投递应用(推荐)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="172"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
|
||||
<source>Settings</source>
|
||||
<translation>设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="173"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation>应用更新和安装设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="129"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="145"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="240"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="134"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="150"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation>搜索或打开链接</translation>
|
||||
</message>
|
||||
@@ -488,7 +488,7 @@
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="33"/>
|
||||
<location filename="../src/application.cpp" line="34"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="109"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="125"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
@@ -498,17 +498,17 @@
|
||||
<translation><span style=' font-size:10pt;font-weight:60;'>一款由社区提供的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>星火计划开发者</span></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="140"/>
|
||||
<location filename="../src/application.cpp" line="146"/>
|
||||
<source>Spark Project</source>
|
||||
<translation>星火计划</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="17"/>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="18"/>
|
||||
<source>Download list</source>
|
||||
<translation>下载列表</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="227"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="243"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation>显示主窗口</translation>
|
||||
</message>
|
||||
@@ -619,12 +619,12 @@
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="228"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
|
||||
<source>About</source>
|
||||
<translation>关于</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="229"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
|
||||
<source>Exit</source>
|
||||
<translation>退出</translation>
|
||||
</message>
|
||||
|
||||
@@ -240,12 +240,12 @@
|
||||
<context>
|
||||
<name>DAboutDialog</name>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="133"/>
|
||||
<location filename="../src/application.cpp" line="139"/>
|
||||
<source>Version: %1</source>
|
||||
<translation>版本:%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="143"/>
|
||||
<location filename="../src/application.cpp" line="149"/>
|
||||
<source>%1 is released under %2</source>
|
||||
<translation>%1遵循%2协议发布</translation>
|
||||
</message>
|
||||
@@ -452,33 +452,33 @@
|
||||
<translation>軟體更新</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="170"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="186"/>
|
||||
<source>Submit App</source>
|
||||
<translation>上傳軟體</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="171"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="187"/>
|
||||
<source>Submit App with client(Recommanded)</source>
|
||||
<translation>從客戶端上傳軟體(推薦的)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="172"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="188"/>
|
||||
<source>Settings</source>
|
||||
<translation>設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="173"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="189"/>
|
||||
<source>APP Upgrade and Install Settings</source>
|
||||
<translation>軟體升級 和 安裝設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="129"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="224"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="145"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="240"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="134"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="150"/>
|
||||
<source>Search or enter spk://</source>
|
||||
<translation>搜索或打开链接</translation>
|
||||
</message>
|
||||
@@ -488,7 +488,7 @@
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="33"/>
|
||||
<location filename="../src/application.cpp" line="34"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="109"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="125"/>
|
||||
<source>Spark Store</source>
|
||||
<translation>星火应用商店</translation>
|
||||
</message>
|
||||
@@ -498,17 +498,17 @@
|
||||
<translation><span style=' font-size:10pt;font-weight:60;'>一款由社区提供的应用商店</span><br/><a href='https://www.spark-app.store/'>https://www.spark-app.store</a><br/><span style=' font-size:12pt;'>星火计划开发者</span></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/application.cpp" line="140"/>
|
||||
<location filename="../src/application.cpp" line="146"/>
|
||||
<source>Spark Project</source>
|
||||
<translation>星火计划</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="17"/>
|
||||
<location filename="../src/widgets/downloadlistwidget.cpp" line="18"/>
|
||||
<source>Download list</source>
|
||||
<translation>下载列表</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="227"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="243"/>
|
||||
<source>Show MainWindow</source>
|
||||
<translation>显示主窗口</translation>
|
||||
</message>
|
||||
@@ -619,12 +619,12 @@
|
||||
<context>
|
||||
<name>TitleBarMenu</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="228"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="244"/>
|
||||
<source>About</source>
|
||||
<translation>关于</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="229"/>
|
||||
<location filename="../src/mainwindow-dtk.cpp" line="245"/>
|
||||
<source>Exit</source>
|
||||
<translation>退出</translation>
|
||||
</message>
|
||||
|
||||
Reference in New Issue
Block a user