honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

例のごとくATOM Cam2を使い倒す(telnetdとftpdを使う)

さて、ATOM Cam2ですが、例のごとくONVIF対応もなく、
NAS対応がされていないようで、せっかく防水外部設置ができるのに、例えばmicroSD内のファイルを一括ダウンロードするような操作のために本体にアクセスしなければいけなかったりしていまいち使いにくいです。

NAS対応についてですが内部的には対応しているようですが、IPアドレスなどの設定情報を書き込むUIが無いために動作していないように見えます)

f:id:honeylab:20210526022225p:plain

起動ログにはNASに関するメッセージが出ている

ということで、ATOM Cam2を遠隔操作、自動化するための方法をまとめておきます。

 

できること

telnetによるシェル操作

ftpによるファイル転送

注意

・上記の機能追加はセキュリティ上の脆弱性となります。パスワードを適切に設定したり、アクセスポイントに対するセキュリティを強化するなど、十分な対策を行う必要があります。

また、この機能は本体のFlashに何の変更も与えません。
機能が不要になった場合、microSD内のTest.tarを削除すれば、完全に元のカメラシステムに戻ります。

 

やり方

ATOM Cam2では、先代のATOM Camと同じようにファクトリテスト用の謎のバックドアシステムがあります。

qiita.com


これがそのまま残っていますので利用します。
簡単のために私が作成したTest.tarパッケージを置いておきます。

github.com

 

このTest.tarを空、もしくは現在ATOM Cam2で使用しているmicroSDのルートフォルダに入れます。

f:id:honeylab:20210526015513p:plain

microSDを挿入し、ATOM Cam2を再起動します。

しばらくして、カメラがネットワークに接続したら、IPアドレスを確認します。
ローカルLAN内を検索できるアプリや、無線LANルータのDHCP割り当て確認などを使用してもいいですが、ATOMアプリのカメラ→デバイス情報でIPアドレスを確認することもできます。

起動時のスクリプトはこんな感じになっています。

github.com

 

IPアドレスを確認したら、telnetを試してみます。

tera termやRLogin、wsl上のtelnetなどが使用できます。

 

f:id:honeylab:20210526015633p:plain

f:id:honeylab:20210526020535p:plain

ログインに必要なパスワードは"atomcam2"としてあります。
取り扱いには注意してください。

Test.tar内、shadowファイルにハッシュ化されて記述されています。もし変更したい場合、Test.tarを展開し、この部分を編集し、再度Test.tarを作成することができます。

Test.tarのディレクトリ構成を変えると動作しなくなります。

 

ログインしてしまえば、通常のLinuxのように何でも処理することができます。

f:id:honeylab:20210526022113p:plain

 

デフォルトでインストールされているbusyboxシュリンクされていましたので、
このカメラのベースとなっているWyzecam用に作成されたカスタムファームウェアからコピーしています。

github.com

 

[root@Ingenic:~]# busybox
BusyBox v1.29.0.git (2018-06-23 20:08:52 CEST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2015.
Licensed under GPLv2. See source distribution for detailed
copyright notices.

Usage: busybox [function [arguments]...]
or: busybox --list[-full]
or: busybox --install [-s] [DIR]
or: function [arguments]...

BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as.

Currently defined functions:
[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arch, arp,
arping, ash, awk, base64, basename, beep, blkdiscard, blkid, blockdev,
bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, chat, chattr,
chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear,
cmp, comm, conspy, cp, cpio, crond, crontab, cryptpw, cttyhack, cut,
date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df,
dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, dpkg,
dpkg-deb, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env,
envdir, envuidgid, ether-wake, expand, expr, factor, fakeidentd, false,
fatattr, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep,
find, findfs, flash_eraseall, flock, fold, free, freeramdisk, fsck,
fsck.minix, fsfreeze, fstrim, ftpd, ftpget, ftpput, fuser, getopt,
getty, grep, groups, gunzip, gzip, halt, hd, hdparm, head, hexdump,
hexedit, hostid, hostname, httpd, hush, hwclock, i2cdetect, i2cdump,
i2cget, i2cset, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd,
init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs,
iplink, ipneigh, iproute, iprule, iptunnel, kbd_mode, kill, killall,
killall5, klogd, last, less, link, linux32, linux64, linuxrc, ln,
loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq,
lpr, ls, lsattr, lsmod, lsof, lspci, lsscsi, lsusb, lzcat, lzma, lzop,
makedevs, makemime, man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs,
mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod, mkpasswd,
mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mpstat, mt,
mv, nameif, nanddump, nandwrite, nbd-client, nc, netstat, nice, nl,
nmeter, nohup, nproc, nslookup, ntpd, nuke, od, openvt, partprobe,
passwd, paste, patch, pgrep, pidof, ping, ping6, pipe_progress,
pivot_root, pkill, pmap, popmaildir, poweroff, powertop, printenv,
printf, ps, pscan, pstree, pwd, pwdx, raidautorun, rdate, rdev,
readahead, readlink, readprofile, realpath, reboot, reformime,
remove-shell, renice, reset, resize, resume, rev, rm, rmdir, rmmod,
route, rpm, rpm2cpio, rtcwake, run-init, run-parts, runlevel, runsv,
runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch,
setconsole, setfattr, setfont, setkeycodes, setlogcons, setpriv,
setserial, setsid, setuidgid, sh, sha1sum, sha256sum, sha3sum,
sha512sum, showkey, shred, shuf, slattach, sleep, smemcap, softlimit,
sort, split, ssl_client, start-stop-daemon, stat, strings, stty, su,
sulogin, sum, sv, svc, svlogd, svok, swapoff, swapon, switch_root,
sysctl, syslogd, tac, tail, tar, taskset, tc, tcpsvd, tee, telnet,
telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute,
traceroute6, true, truncate, tty, ttysize, tunctl, ubiattach,
ubidetach, ubimkvol, ubirename, ubirmvol, ubirsvol, ubiupdatevol,
udhcpc, udhcpd, udpsvd, uevent, umount, uname, unexpand, uniq,
unix2dos, unlink, unlzma, unshare, unxz, unzip, uptime, users, usleep,
uudecode, uuencode, vconfig, vi, vlock, volname, w, wall, watch,
watchdog, wc, wget, which, who, whoami, whois, xargs, xxd, xz, xzcat,
yes, zcat, zcip

これだけ入ってればたいていのことはできるのではないですかね。

 

続いて、ftpの動作テストです。

FFFTPなどを使用して、接続設定を作成し、接続してみます。

f:id:honeylab:20210526021243p:plain


 SDカード上の録画ファイルは /media/mmc/record に発生します

f:id:honeylab:20210526021341p:plain

このように、mp4ファイルが個別にアクセスできます。

telnetftp、この二つがあれば外部からのファイルアクセスの自動化は十分に可能だと思います。

例えば、一定時間ごとにFTP経由で同期するようにNASに設定したり、別のマシンからとりに行く、などが自由にできると思います。

 

最後に、この操作に関して、製造元は一切関知していませんので、問い合わせなどしないように。
また、いつ使えなくなるかもわかりません。
お約束ですが、これを実行したことで発生する不利益については関知しません。