Part of Cybersecurity Alerts series

🚨 Cảnh báo job “siêu ngon” – Mồi nhử để dev bị lừa tải và giải nén malware

Hôm nay mình share tình huống lừa đảo thâm hiểm mà một bạn dev trong nhóm mới gặp – có nhiều yếu tố technical nên anh em chăm dev sẽ hiểu nhanh. Mình không bị dính, nhưng mất cả buổi mổ xẻ mã độc. Mong anh em đọc cảnh giác, đừng đi theo con đường này!

July 1, 2025
6 min read
By Leo Pham
hackinghacklừa đảoleoodz
Share this post:

🚨 Cảnh báo job “siêu ngon” – Mồi nhử để dev bị lừa tải và giải nén malware

Chào anh em,
Hôm nay mình share tình huống lừa đảo thâm hiểm mà một bạn dev trong nhóm mới gặp – có nhiều yếu tố technical nên anh em chăm dev sẽ hiểu nhanh. Mình không bị dính, nhưng mất cả buổi mổ xẻ mã độc. Mong anh em đọc cảnh giác, đừng đi theo con đường này!


Có thể là hình ảnh về văn bản


🚨 Cái bẫy quá ngon để tin

  • Tự nhiên có người lạ inbox: “Anh ơi, em có đoạn code chạy không được, fix giùm em nhé, trả 15 triệu.”

  • Quả thật nghe hấp dẫn, chỉ cần sửa code mà có 15 củ? Người thuê trả lời rất thật, gửi zip kèm password cũng nhanh lẹ.


📦 File ZIP – Có gì bên trong?

Sau khi tải về và giải nén (có pass luôn), mình mở ra thấy:

  • app.js import 3 file .js, mình chú ý file helper/css.js?. CSS mà .js thì đáng nghi rồi đó.

    Có thể là hình ảnh về ‎văn bản cho biết '‎package.json 1 2 3 x app.js renuire renurinol'haha1.com/noictap! L habel ארווחםם -cOre require( /helpers/ './helpers/css.js') js') js require app-server.‎'‎
  • Trong đó gọi hàm site_version(...), load file .txt, rồi dùng eval(...) – tức là thực thi code JS nghi vấn.

    Có thể là đồ họa về văn bản cho biết 'packagejson fs app.js const const os require require("fs"); ("fs"); require( ("os"); cssjs function site version() { const platform os.platform(); switch ca (platform) { .readFile( 'public/css/types.txt public txt return; } utf8' (err eval (data); } console.Log e.Log return case darwin' return m'; case linux' return l'; default: return } } Unknown' 27 site_version version site'
  • .txt đi kèm toàn khoảng trắng với một dòng empty, còn code JS thì obfuscated – dùng biến, hàm lóng, không thể đọc ngay.

    Có thể là đồ họa về văn bản
  • Quan trọng: không hề có task gì rõ ràng cho dev, tất cả chỉ là mồi câu.


🛠️ Phân tích mã độc JS – Quá trình bóc tách

1. Entry point: AQNoc()
Mình tìm được hàm này là entry point – nơi bước đầu mã độc khởi chạy.

Có thể là hình ảnh về văn bản cho biết 'package.json { types.txt untitied 'name" nodejs 'nodejs-mebsite-boilerplate", -website "version": "1.0.0" "description" "nodejs website boilerplate", "main" app.js", start' Entry point đâu ten 12 13 14 cross-env NODE ENV=production node app- js DODT 00 nodemon index. js ejs,html" e "concat js" "rm public/js/combined. js; rm public/js/combined.min.js; public js/combined concat cli "uglifyjs" touch public/js/combined.min.j uglifyjs public/js/combined.js 0 public "less "lessc public/les public/less/main.less main.less main. less public/ "concat- CSS 'concat cli public/css/font- font awesome.min.css public public/css/css- helpers.m min awesome. min.css .CSS minify CSs": 'touch public/css/combined.min.css; cleancss ο public/css/combined.min.'
js
for (const cSqoc of cmwb) {    
   await wtUnc(cSqoc); 
} 
Có thể là hình ảnh về văn bản cho biết '85 86 87 88 89 90 async function AQNoc() { for (const SQoc of cmwb) { await wtUnc (Qoc); } } AQNoc AQNoc();| /0'
  • Biến cmwb chứa danh sách zip cần xử lý (hai file js.zip, node.zip, với đường dẫn Desktop → /public/js/*.zip).

2. Lần theo wtUnc(...)
Trong đó có quá nhiều hàm obfuscate như b12mb.rbIkb(...), nhưng điểm mấu chốt là:

js
const gBjoc = ${...}; 
await ksIb(gBjoc); 
Có thể là hình ảnh về văn bản
  • ksIb() thực tế là exec command line – mình log ra thì giá trị:

python
.\7za.exe x js.zip -o"C:\...\init" -p<JNFWEIUFNW...> 
.\7za.exe x node.zip -o"C:\...\init" -p<JNFWEIUFNW...> 
Có thể là hình ảnh về văn bản cho biết 'lUsers WDAGUtil #sltlooobeb/etetett data helpers stage >node payload.js WDAGUtilityAccount Account Desktop 1tlDesktplahalesstt_n zipFilePath: outputDir: executableName: zipFilePath: zipF ilePath: outputDir: executableName:'Có thể là hình ảnh về văn bảnCó thể là hình ảnh về văn bản cho biết 'AUsers sersworfueilityAccount1Desktop WDAGUt Desktop data publicljs publicljsV7zip_extra>.V7za.exe BEFMFEEAEAETEARTRRE 7-Zip (a) 24.09 (x86) Copyright (۲) 1999-2024 1999- -2024 Igor Pavlov Scanning the drive for archives: file, 2395743 bytes (2340 KiB) js.zip O"output ir Extracting archive: 2024-11-29 js.zip PJNFHEIUFINMEFB8I298F2398 Path js.zip Type zip Physical Size 2395743 Everything Everythingis is Ok Size: 5543424 Compressed: 2395743'

✅ Bingo! Lệnh này chính là cách mã độc giải nén zip và password nằm ngay trong đó.


📦 Trong ZIP có gì?

Mình thử unzip 2 file lúc đầu chưa biết pass – đều bị kẹt. Sau khi công khai password từ lệnh, mình giải nén và thu được:

  • app.exe

  • node.dll

    Có thể là hình ảnh về ‎văn bản cho biết '‎> WDAGUtilityAccount > Desktop data > Name > Sort public js View 7zip 7zip_extra Extract all Date modified ۔. Type 0-jquery.min.js S 1-jquery.mask.js 5/6/2025 12:43 PM Size File folder 1/12/2019 7:24 AM 2-bootstrap.min.js JavaScript File 1/12/2019 7:24 AM 3-main.js 84 84 KB JavaScript File 1/12/2019 7:24 AM combined.js 19 KB JavaScript File 1/12/2019 7:24 AM combined.min.js 37 37KB KB ·лeлa js.zip 1/12/2019 7:24 AM JavaScript File 4KB - node.zip 1/12/2019 7:24 AM JavaScript File 142 KB JavaScript File 4/30/2025 6:59 PM 131 131KB B 4/30/2025 6:59 PM Compressed (zipp... 2,340 KB Compressed (zipp... 126 KB‎'‎

➡️ Đây chính là payload thực thi sau phần JS giải nén.


🧪 Tóm quá trình

  1. Xác định entry point AQNoc().

  2. Lần theo wtUnc(...), log ra command exec.

  3. Lộ ra password giải nén zip từ runtime.

  4. Giải nén hoàn chỉnh, thu được các file thực thi nghi vấn.


⚠️ Về payload .exe

  • Mình đã test dynamic analysis, hành vi tương tự bài trước – file JavaScript chạy unzip trong public/js, sau đó chạy app.exe.

  • Payload sẽ thu thập dữ liệu trình duyệt (Chrome/Edge/Brave/Opera...), gửi về server ở Nga.

  • Chỉ chạy node (chưa cần admin), nên dễ dàng ăn dữ liệu trình duyệt.

Kết luận: Đây không phải job, mà là bẫy malware. Chỉ cần chạy zip hoặc script, bạn dễ:

  • Mất dữ liệu trình duyệt (cookies, mật khẩu),

  • Bị cài keylogger/backdoor,

  • Mất toàn bộ quyền trên máy.


🛡️ Dev cần lưu ý gì?

  • Không chạy file lạ: .exe, .bat, .ps1, hoặc script yêu cầu quyền hệ thống.

  • Không ham job quá ngon, đặc biệt khi người thuê không rõ background, không có profile.

  • Nếu nhận ZIP có pass lạ: phân tích tĩnh trước (đọc file JS/log console) – đừng unzip và chạy ngay.

  • Check file bằng Windows Defender, Malwarebytes, hoặc upload lên VirusTotal đầu tiên.


💡 Note:

Mình chỉ là web dev bình thường, không chuyên phân tích mã độc – mình dùng cả ChatGPT để viết lại đoạn technical cho dễ hiểu. Ai còn thắc mắc cứ comment mình giải đáp. Nếu thấy bài hữu ích, share để mọi người tránh rủi ro nhé.
Cảm ơn anh em đã đọc!

Last updated: July 1, 2025

Comments