@@ -189,6 +189,127 @@ install_malefic(){
189189 install_resources
190190}
191191
192+ # install evilclaw (optional)
193+ install_evilclaw (){
194+ if [[ -t 0 ]]; then
195+ while true ; do
196+ read -p " Do you want to install EvilClaw (LLM Agent C2 Bridge)? [y/n] " install_ec
197+ install_ec=${install_ec,,}
198+ if [[ " $install_ec " == " y" || " $install_ec " == " yes" ]]; then
199+ break
200+ elif [[ " $install_ec " == " n" || " $install_ec " == " no" ]]; then
201+ log_task_status " completed" " EvilClaw installation skipped"
202+ return
203+ else
204+ echo " Invalid input, please enter y(yes) or n(no)."
205+ fi
206+ done
207+ else
208+ log_task_status " completed" " No interactive shell detected. Skipping EvilClaw installation."
209+ return
210+ fi
211+
212+ local EVILCLAW_VERSION=${EVILCLAW_VERSION:= " v0.1.0" }
213+ local EVILCLAW_DIR=" $IoM_ROOT_DIR /evilclaw"
214+ local EVILCLAW_RELEASES_URL=" https://github.com/chainreactors/EvilClaw/releases/download/$EVILCLAW_VERSION "
215+
216+ mkdir -p " $EVILCLAW_DIR "
217+ pushd " $EVILCLAW_DIR "
218+
219+ log_task_status " in_progress" " Downloading EvilClaw..."
220+ download_file " $EVILCLAW_RELEASES_URL /evilclaw_linux_amd64.tar.gz" " evilclaw.tar.gz"
221+ tar -xzf evilclaw.tar.gz
222+ rm -f evilclaw.tar.gz
223+ chmod +x evilclaw
224+ popd
225+
226+ INSTALL_EVILCLAW=true
227+ log_task_status " completed" " EvilClaw downloaded successfully"
228+ }
229+
230+ # setup evilclaw after server is running
231+ setup_evilclaw (){
232+ if [ " $INSTALL_EVILCLAW " != " true" ]; then
233+ return
234+ fi
235+
236+ local EVILCLAW_DIR=" $IoM_ROOT_DIR /evilclaw"
237+ local SERVER_DIR=" $IoM_ROOT_DIR /malice-network"
238+ local AUTH_FILE=" $EVILCLAW_DIR /evilclaw.auth"
239+
240+ # wait for server to be ready
241+ log_task_status " in_progress" " Waiting for malice-network server to start..."
242+ for i in $( seq 1 30) ; do
243+ if " $SERVER_DIR /malice_network_linux_amd64" listener list & > /dev/null; then
244+ break
245+ fi
246+ sleep 2
247+ done
248+
249+ # generate listener auth for evilclaw
250+ log_task_status " in_progress" " Generating EvilClaw listener certificate..."
251+ pushd " $SERVER_DIR "
252+ ./malice_network_linux_amd64 listener add evilclaw
253+ mv evilclaw.auth " $AUTH_FILE "
254+ popd
255+ log_task_status " completed" " Listener certificate generated"
256+
257+ # generate minimal config.yaml
258+ cat > " $EVILCLAW_DIR /config.yaml" << -EOFCFG
259+ host: "127.0.0.1"
260+ port: 8317
261+
262+ api-keys:
263+ - "changeme"
264+
265+ c2-bridge:
266+ enable: true
267+ auth-file: "$AUTH_FILE "
268+ listener-name: "evilclaw"
269+ listener-ip: "$ip_address "
270+ pipeline-name: "llm-pipeline"
271+ EOFCFG
272+ log_task_status " completed" " EvilClaw config generated at $EVILCLAW_DIR /config.yaml"
273+
274+ # create systemd service
275+ local LOG_DIR=" /var/log/evilclaw"
276+ mkdir -p " $LOG_DIR "
277+ chmod 755 " $LOG_DIR "
278+ cat > /etc/systemd/system/evilclaw.service << -EOF
279+ [Unit]
280+ Description=EvilClaw LLM Agent C2 Bridge
281+ After=malice-network.service
282+ Requires=malice-network.service
283+
284+ [Service]
285+ WorkingDirectory=$EVILCLAW_DIR
286+ Restart=always
287+ RestartSec=5
288+ User=root
289+ ExecStart=$EVILCLAW_DIR /evilclaw
290+
291+ StandardOutput=append:$LOG_DIR /debug.log
292+ StandardError=append:$LOG_DIR /error.log
293+
294+ [Install]
295+ WantedBy=multi-user.target
296+ EOF
297+
298+ chown root:root /etc/systemd/system/evilclaw.service
299+ chmod 600 /etc/systemd/system/evilclaw.service
300+ systemctl daemon-reload
301+ systemctl enable evilclaw
302+ systemctl start evilclaw
303+
304+ log_task_status " in_progress" " EvilClaw config : $EVILCLAW_DIR /config.yaml"
305+ log_task_status " in_progress" " EvilClaw log : $LOG_DIR /debug.log"
306+ log_task_status " completed" " EvilClaw service started successfully!"
307+ echo " "
308+ echo " NOTE: Edit $EVILCLAW_DIR /config.yaml to add your LLM API keys."
309+ echo " EvilClaw supports hot reload — no restart needed after editing."
310+ echo " "
311+ }
312+
192313create_systemd_service (){
193314 local SERVER_FILE=" ${IoM_ROOT_DIR} /malice-network/malice_network_linux_amd64"
194315 local LOG_DIR=" /var/log/malice-network"
@@ -234,13 +355,19 @@ if [[ "$EUID" -ne 0 ]]; then
234355 exit 1
235356fi
236357
358+ INSTALL_EVILCLAW=false
359+
237360# --- get Ip ---
238361setup_environment
239362# --- Install Malice Network ---
240363install_malice_network
241364# --- Install Malefic ---
242365install_malefic
366+ # --- Install EvilClaw (optional) ---
367+ install_evilclaw
243368# --- Install Docker if not installed ---
244369check_and_install_docker
245370# --- Create systemd service ---
246- create_systemd_service
371+ create_systemd_service
372+ # --- Setup EvilClaw (after server starts) ---
373+ setup_evilclaw
0 commit comments