Compare commits

..

833 Commits
v2.7.0 ... noai

Author SHA1 Message Date
c3df982870 Merge pull request #375 from Sniffleupagus/fixRot90
Allow rotation 90 and 270 degrees on screens
2025-03-21 15:47:00 +01:00
6f7b07f21f Merge pull request #380 from wpa-2/patch-3
Update defaults.toml
2025-03-21 15:42:44 +01:00
4c583cf184 Update defaults.toml
removed dupe entries 
iface = "wlan0mon"
mon_start_cmd = "/usr/bin/monstart"
mon_stop_cmd = "/usr/bin/monstop"
mon_max_blind_epochs = 5
no_restart = false

Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-03-20 17:27:31 +00:00
9a8616df51 Merge branch 'jayofelony:noai' into fixRot90 2025-03-17 16:02:24 -07:00
28c2ef294c Support 90 and 270 rotation 2025-03-17 15:36:16 -07:00
255ca31837 Merge pull request #374 from wpa-2/noai
Update defaults.toml
2025-03-14 07:51:52 +01:00
661687e180 Update defaults.toml
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-03-13 19:20:02 +00:00
fb8ee9dbee Keep toml installed
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-03-09 12:04:50 +01:00
d98be99c6b Add PwnCrack.org plugin
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-03-09 11:59:33 +01:00
08e9656bb5 Merge pull request #367 from Sniffleupagus/toml_two_times_baby
Toml two times baby
2025-03-08 23:50:27 +01:00
dbcc488900 Load dotted toml files with old toml library, new ones with tomlkit to preserve format and comments 2025-03-08 13:26:13 -08:00
94b01b2fc7 get_bbox fails on 2.9.5. get_size works 2025-03-08 13:25:32 -08:00
9b4b239deb Merge pull request #364 from wpa-2/noai
Update defaults.toml
2025-03-08 13:00:16 +01:00
4fc029d638 Update defaults.toml
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-03-08 10:35:45 +00:00
9d0ada2a33 defaults.toml small edit
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-03-08 09:12:08 +01:00
da156fde4b defaults.toml small edit
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-03-08 09:12:00 +01:00
edaadfdbd4 auto-update using a github token, to avoid getting rate limited. This is optional
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-03-08 09:09:44 +01:00
0341ac0202 Changed TOML format and parser
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-03-08 09:08:52 +01:00
60832e788d Merge pull request #362 from B0r1s-B4d3n0v/noai
Log entry when Pwnagotchi is Re|Started
2025-03-08 07:27:41 +01:00
87a51d1de7 Merge pull request #361 from wpa-2/noai
Add files via upload
2025-03-08 07:27:19 +01:00
db85c68e63 Log Pwnagotchi Re|Started
Adds a line to the log file to identify when pwnagotchi was restarted
2025-03-07 10:51:08 -06:00
c98745cd1c Add files via upload
Changed log interval time 

Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-03-07 14:32:06 +00:00
d91fe8e17e Merge pull request #358 from JdaieLin/noai
fix: use same curves as pisugar-power-manager
2025-03-03 09:59:52 +01:00
8da625e7e2 fix: use same curves as pisugar-power-manager 2025-03-03 08:57:00 +08:00
6bab0b36d1 Merge pull request #353 from wpa-2/noai
Makes backups work better inside windows and Linux
2025-02-27 17:55:45 +01:00
19de2a2d8f Update defaults.toml
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-26 19:13:15 +00:00
5d4c2e3b3a Add files via upload
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-26 19:12:49 +00:00
e7eba208bd Merge branch 'jayofelony:noai' into noai 2025-02-26 18:45:37 +00:00
b47371cfe6 Update defaults.toml
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-26 18:45:28 +00:00
56b70fcc83 Merge pull request #351 from wpa-2/noai
sorry missed a line
2025-02-25 22:59:15 +01:00
d698c35fef Merge branch 'jayofelony:noai' into noai 2025-02-25 18:31:33 +00:00
1f5785f823 Update defaults.toml
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-25 18:31:21 +00:00
d78220b9ba Merge pull request #349 from C0d3-5t3w/patch-1
Update README.md
2025-02-25 09:44:39 +01:00
faca5b2904 Update README.md
Twitter is now X.

Signed-off-by: 5T3W <stewy1994@gmail.com>
2025-02-24 22:57:44 -08:00
234b38e4e4 Merge pull request #348 from wpa-2/noai
New autobackup plugin as default, fixes to backup scripts,
2025-02-24 18:17:23 +01:00
27b9ec49da Add files via upload
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-24 16:20:59 +00:00
87730543d1 Add files via upload
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-24 16:20:27 +00:00
67e28fa7ab Update defaults.toml
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-24 16:20:02 +00:00
7285863c00 Merge branch 'jayofelony:noai' into noai 2025-02-24 15:57:12 +00:00
23eae9c65a Merge pull request #341 from fmatray/noai
Add Cache plugin, improve Wigle, debug bt-tether, add more sentences to voices
2025-02-17 14:16:58 +01:00
89a85bed78 Merge pull request #342 from wlmh110/noai
PiSugar Plugin update
2025-02-17 14:14:43 +01:00
393981e0ba Remove debgging mesasge in cache 2025-02-17 11:01:16 +01:00
31e542f45a Merge branch 'noai' into noai
Signed-off-by: 铲屎将军 <37292630+wlmh110@users.noreply.github.com>
2025-02-17 16:26:59 +08:00
c433a6c2d5 remove debug messages 2025-02-17 00:49:46 +01:00
7dd809afe0 add otion for cache 2025-02-16 20:29:06 +01:00
d7f7dac0d7 - Catch an exception on lstat() 2025-02-16 20:13:01 +01:00
2dc45bc4b4 - Add more sentences to voice.py, with some geek references 2025-02-16 20:07:22 +01:00
29d1ca6728 Bt-tether: add autoconnect to device
Cache:
- add cache to all hools with access point
- add cleaning
Wigle: use cache
2025-02-13 22:17:09 +01:00
1d635d955b BT-Tether: add a check to DNS config 2025-02-12 14:10:33 +01:00
f20d4017bd Merge branch 'noai' of https://github.com/fmatray/pwnagotchi into noai 2025-02-12 13:04:41 +01:00
5d668ae34e update wigle.py 2025-02-12 13:04:37 +01:00
9d0df49fb6 add cache.py 2025-02-12 13:04:14 +01:00
e1f22cd6a0 modified: .gitignore
new file:   pwnagotchi/plugins/default/cache.py
	modified:   pwnagotchi/plugins/default/wigle.py
- Add a cache plugin
- Add statistics to wigle
2025-02-12 13:02:22 +01:00
f4a7588a48 Update for wigle
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-02-12 12:59:28 +01:00
c66728f03e Edits for defaults.toml
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-02-12 10:42:13 +01:00
20ddc9425c Update defaults.toml
The charging protection feature is disabled by default.
2025-02-12 11:32:14 +08:00
e1bcea681a Next version will be 2.9.5.4
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-02-11 10:33:23 +01:00
43d58b77c9 Remove wardriver config from defaults.toml
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-02-11 10:31:57 +01:00
40918029e7 Small changes
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-02-11 10:28:20 +01:00
54986ef831 Merge pull request #333 from fmatray/noai
Updates for BT-Tether, Wigle and OHCAPI
2025-02-10 21:41:17 +01:00
1400e8aac8 Update defaults.toml
Add options for bt-tether and Wigle

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-10 20:29:13 +01:00
5a398c70bb wigle.py update
- '.wigle_uploads' is no longer hardcoded but moved to the handshakes directory

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-10 19:42:51 +01:00
81d377f491 Set bettercap "ble.recon off"
Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-10 19:34:19 +01:00
1135ec3df1 Update pisugarx.py
bug fix
2025-02-10 19:11:49 +08:00
d3231a11ce Update pisugarx.py
bug fix
2025-02-10 19:08:19 +08:00
a00d94b520 Update pisugarx.py 2025-02-10 18:26:52 +08:00
beb8308969 Update pisugarx.py
Added charging voltage protection function
2025-02-10 18:23:26 +08:00
2893632ee5 Add display
- Now the plugins display some statistics from WIGLE

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-09 18:44:02 +01:00
0b3b38bb44 Wigle.py update
- Correct the CSV format 
- Add 2 missing columns: frequency(populated) and RCOI(not populated)
- Before sending to wigle, if cvs_dir is set, the CVS data ti written to that directory
- Update auth method to match the api: api_name + api_key
- Refactoring into only one plugin class


Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-09 01:50:57 +01:00
d4874a18e1 utils.py update
- Add WifiInfo.FREQUENCY to extract_from_pcap()
- Move the "Invalid field" to the the "else" as a default

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-09 01:32:59 +01:00
5a113a2163 wigle.py update
- CSV format debug
- Update auth method to API Name+key
- Add logs
- Code refactor and cleaning

stil debugging

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-08 17:29:33 +01:00
e82621c80b update
New Features:

Low Battery Shutdown Functionality
Bug Fixes:

Resolved an issue where the main process would become blocked when unable to connect to a device.
2025-02-08 17:52:54 +08:00
1337494e74 bt-tether.py update
- Add a delay before going up to give a change to the NetworkManager to get ready
- now check DNS format

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-08 00:52:57 +01:00
675e275f34 Add web hook to bt-tether.py
Webhook now show Bluetooth, Device and Connection configuration

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-08 00:07:41 +01:00
7a0301b57f bt-tether rework
- Move connexion to NetworkManager autoconnect for more reliability
- Check options formats for several values
- Add a dns option to be able to choose another DNS provider (ex: OpenNIC for no traceability)
- The "BT" show more information (Device Connected/disconnected, Connexion Up/Down)
- Status now show a message on error
- nmcli calls are non-blocking  
- Less logs when disconnected (ex: phone's bluetooth is off) 

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-02-07 22:34:52 +01:00
4774a983f9 Merge branch 'jayofelony:noai' into noai 2025-02-06 23:49:30 +01:00
83b9077e09 Fix gdrivesync defaults
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-02-02 22:22:27 +01:00
ef0680a140 Delete scripts/restore.sh
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-02 19:36:01 +00:00
a54579cf3d Delete scripts/backup.sh
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-02 19:35:51 +00:00
c08f33c2c5 Merge branch 'jayofelony:noai' into noai 2025-02-02 19:35:00 +00:00
fe7e7ec31a Backup and restore edits
Windows and linux files 

Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-02-02 19:34:51 +00:00
10d387afcf Fix gdrivesync.py
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-29 12:50:02 +01:00
4748b671bc Bug report update
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-27 12:04:07 +01:00
17f04f7506 Merge pull request #318
Added DNS check to plugins command
2025-01-27 10:24:45 +01:00
76c4888e88 Merge pull request #319
Update gdrivesync.py
2025-01-27 10:23:58 +01:00
d44b8d02b6 Merge remote-tracking branch 'origin/noai' into noai 2025-01-27 10:23:05 +01:00
02454597b2 Version 2.9.5.3
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-27 10:22:55 +01:00
cb207d4d70 Update gdrivesync.py
Updated backup items

Signed-off-by: findingmoist <128169791+findingmoist@users.noreply.github.com>
2025-01-25 20:06:15 -05:00
7b9150af6b Merge branch 'jayofelony:noai' into noai 2025-01-25 23:02:21 +00:00
8787c1bdd3 Update cmd.py
Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2025-01-25 23:02:06 +00:00
ec93838b7a Update defaults.toml 2025-01-25 17:26:31 +01:00
f6d5a481bb Removed unused import
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-24 23:48:38 +01:00
eee3eb962b Small changes on pisugarx.py
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-24 23:48:25 +01:00
847e9f5908 Enable auto-update by default now.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-24 23:47:58 +01:00
af1544535c Merge pull request #316 from wlmh110/noai
Update pisugarx.py
2025-01-24 09:41:50 +01:00
0fbf209881 Update pisugarx.py
Complete the basic information retrieval for the PiSugar power module without the need for additional installation of PiSugar-server:
1. Automatically determine the model of PiSugar in use.
2. Automatically initialize the power module.
3. Retrieve the battery level and charging status.
2025-01-24 15:16:51 +08:00
cf14f3f663 Another fix for bt-tether
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-21 17:30:06 +01:00
948fe89ce6 Another fix for bt-tether
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-21 14:37:02 +01:00
89af46c6fc Update ohcapi.py
A more elegant code to test the internet connection

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-01-20 22:01:10 +01:00
8d1a5babe8 Version 2.9.5.2 will be next
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-20 21:30:58 +01:00
042d5ba765 Change in defaults for PwnDroid.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-20 21:13:17 +01:00
58857058a4 Revert "PwnDroid, new plugin for the companion app on Android to share GPS data from your Android phone."
This reverts commit 0e06d3bd76.
2025-01-20 21:11:40 +01:00
5e6443ae58 Merge remote-tracking branch 'origin/noai' into noai 2025-01-20 21:11:14 +01:00
0e06d3bd76 PwnDroid, new plugin for the companion app on Android to share GPS data from your Android phone.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-20 21:10:46 +01:00
64f7c6e1e5 Merge pull request #311 from fmatray/noai
Web redirections for GRID, OHCAPI and Wigle
2025-01-20 19:18:10 +01:00
8442ce93be Update ohcapi.py
version update

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-01-20 15:43:55 +01:00
730fa7dc8e Update wigle.py
version update

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-01-20 15:43:35 +01:00
0959140098 Update grid.py
Rediction to https://opwngrid.xyz in the plugins' page

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-01-20 15:41:49 +01:00
7c4764bff8 Update ohcapi.py
add a web hook to redirect to onlinehashcrack

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-01-20 15:30:00 +01:00
e179165850 Update wigle.py
Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-01-20 15:28:46 +01:00
0140a1fc97 Update wigle.py
add a redirection to wiggle.net

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-01-20 15:27:54 +01:00
cb0c6c6e44 Quick release, because of error in bt-tether plugin.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-18 10:30:52 +01:00
0ceeb94111 https://github.com/jayofelony/pwnagotchi/issues/300
It needed a comma at the end of the line. Silly me.

Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-18 10:29:41 +01:00
6bf50a36dd Merge remote-tracking branch 'origin/noai' into noai 2025-01-18 10:28:09 +01:00
fb0fda4d0d https://github.com/jayofelony/pwnagotchi/issues/300
Revert, as this is the correct method.

Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-18 10:27:59 +01:00
51f86d0286 Merge pull request #302 from fmatray/noai
Update ohcapi.py
2025-01-16 07:37:10 +01:00
614e844a51 https://github.com/jayofelony/pwnagotchi/issues/300
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-15 21:58:15 +01:00
fd16b2c94d Update ohcapi.py
catch an exception when internet is not available

Signed-off-by: Frédéric <fmatray@users.noreply.github.com>
2025-01-13 15:32:48 +01:00
a4d5930477 Set ohcapi to false
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-12 22:36:42 +01:00
f9b2a76665 Change bettercap to my own repo
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-12 18:23:38 +01:00
80279ca02b Increased extra_channels for auto-tune so hopefully multiple pwns can see each other better.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-10 20:39:02 +01:00
c7a06a4e43 Add checks for non empty config
Add manual DNS 8.8.8.8/1.1.1.1

Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-06 21:50:18 +01:00
9b969375b7 Next release will be 2.9.5
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-06 12:09:15 +01:00
61eff05227 Removal of onlinehashcrack.py, we now have ohcapi.py instead. This uses the new API of OHC.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-06 12:08:38 +01:00
21151dd9ef Merge pull request #292 from rohanday3/rohanday3-patch-1
Add OHC API plugin
2025-01-06 11:23:07 +01:00
cd3eb0963b Update defaults.toml
Signed-off-by: Rohan Dayaram <rohanday4@gmail.com>
2025-01-06 10:53:34 +02:00
a41a8a277f Create ohcapi.py
Signed-off-by: Rohan Dayaram <rohanday4@gmail.com>
2025-01-06 10:48:46 +02:00
4b7a3bc138 Create pwndroid_privacy_policy
Signed-off-by: Jayofelony <oudshoorn.jeroen@gmail.com>
2025-01-05 20:16:51 +01:00
6fa6ca8a67 If MAC is left empty, we don't write it to config.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-05 19:19:43 +01:00
6b5631373a Update for better wifi channel calculation
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-04 17:54:26 +01:00
de5cd8705f Update for better wifi channel calculation
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-04 15:55:19 +01:00
a317528aeb Update bug report template
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-04 09:29:23 +01:00
1ec6931740 Update bug report template
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-04 09:28:08 +01:00
45138c7fae Update bug report template
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-04 09:25:49 +01:00
dcd91268a1 Update bug report template
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-04 09:25:06 +01:00
27c8a113de Make webui login optional.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-03 12:04:17 +01:00
9ea6728a26 2.9.4-2
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-02 22:30:25 +01:00
af4e4d9a35 Another wpa-sec fix
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-02 22:30:04 +01:00
b2175cbcc4 Quick fix version
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-02 18:34:34 +01:00
28c61ae02c Quick fix for wpa-sec
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-02 18:34:13 +01:00
358d400d23 Set user-agent to opwngrid.xyz
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-01 15:06:51 +01:00
09aace1cf7 Set user-agent to opwngrid.xyz
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-01 15:05:53 +01:00
fc0c72f7df Set a custom user-agent to hopefully help with uploading.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2025-01-01 14:54:26 +01:00
b13243466b Removed calculation for Fahrenheit, just set celsius to False.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-29 17:02:55 +01:00
bb34980179 Typo
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-29 12:25:24 +01:00
ff0c1aa2f6 Defining everything for connection modify
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-29 12:23:05 +01:00
7f2b3c7106 Changed config to self.options
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-29 11:40:00 +01:00
3e5d802e8d Cleaner connection method for bt-tether
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-29 11:36:31 +01:00
3e5e2bfb30 Disable session-stats by default
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-29 11:10:15 +01:00
aa4c352bbd Remove ': ' from display
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 20:20:23 +01:00
578731e978 Remove AT from display.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 20:19:26 +01:00
6d9131b4f6 Merge pull request #280 from wpa-2/patch-1
Update defaults.toml
2024-12-28 20:08:38 +01:00
4c826c90cb Update defaults.toml
<3 

Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2024-12-28 15:40:52 +00:00
1b11383011 Update --wizard to match new bt-tether settings.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 16:33:47 +01:00
6e93616ed7 Define phone-name in comment
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 15:59:22 +01:00
824cd7efef Add error log when something other than android/ios is entered as phone type.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 15:51:19 +01:00
246e280201 Remove on_ready code, not actually being run.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 15:46:03 +01:00
4e6b513fc7 Set metric to 100
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 15:33:46 +01:00
5dbdf1e8de Fix bt-tether to actually use IP set in config.toml
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 15:32:22 +01:00
b28a0eb606 Update bug report for next release
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 15:31:41 +01:00
97f7e71ad7 Next release will be 2.9.4
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-28 15:31:21 +01:00
89b9eb0e46 Merge pull request #276 from j0se/feature/dynamic-var-usbiface
Update linux_connection_share.sh
2024-12-25 14:27:21 +01:00
d1f0b7bb08 feat: dynamic usbiface 2024-12-25 12:53:48 +01:00
7e26085016 Update ISSUE_TEMPLATE.yml 2024-12-22 23:39:21 +01:00
772d844526 Update bug_report.yml 2024-12-22 23:38:48 +01:00
0377b396c9 Merge pull request #267 from renewedbullet/patch-2
Update pisugarx.py
2024-12-22 02:17:51 +01:00
3fc319b650 auto-update fix
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-22 02:01:08 +01:00
f34471e044 pisugarx 0 decimals for capacity
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-22 01:54:20 +01:00
LH
de7e9b1c6d Update pisugarx.py
limits % to  no deci dunno how i missed this lol

Signed-off-by: LH <140523069+renewedbullet@users.noreply.github.com>
2024-12-21 19:47:35 -05:00
868314e244 Version 2.9.3-2 has some fixes coming.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-22 01:08:08 +01:00
7a8cc36a38 Set interface-name in the bt-tether config.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-22 01:07:46 +01:00
a3dce7fcbd Merge remote-tracking branch 'origin/noai' into noai 2024-12-22 00:59:27 +01:00
0472faa2bf Show only 2 decimals for capacity in %.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-22 00:59:19 +01:00
ae2eb77c7b Update backup.sh 2024-12-21 15:57:10 +01:00
b30daddb80 Add charging status
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-21 09:36:37 +01:00
f81a8a7b75 Add charging status
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-21 01:17:40 +01:00
cb99e99e0e Better error catching
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-21 01:12:24 +01:00
3c07d6860e Check for lowercase android/ios
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-21 01:09:22 +01:00
2cd564137d Change back wpa-sec.py
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-21 01:09:02 +01:00
bcd49f3b40 Update backup script
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-20 14:34:25 +01:00
05f75b1605 Update auto-update.py
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-20 13:45:35 +01:00
f98350f8a8 Update to 2.9.3
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-20 13:43:21 +01:00
29b1ec1ce9 Disable auto-update by default.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-20 13:41:40 +01:00
7764e1dfdf Small changes to wpa-sec.py
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-20 08:55:08 +01:00
35deab25f2 Small update to the build
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-18 20:16:50 +01:00
39d6a774e9 Small update to the build
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-18 20:16:44 +01:00
4d024afded Small update to the build
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-18 20:16:21 +01:00
bad8d458cc Remove multiple checks for blind epochs.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-18 14:42:44 +01:00
c2d231a3fb Disable IPv6 for bluetooth connections.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-18 14:42:17 +01:00
724e674134 Remove pisugar2 and 3 from custom repo's.
Upgrade pisugarx some more.

Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-18 00:21:58 +01:00
a70772b312 Change location of display item.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-18 00:21:21 +01:00
4f07fce44b Update on Wi-Fi channels
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-18 00:20:59 +01:00
5c8e57fd83 Type hints added
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-17 18:57:36 +01:00
9c0891b9c6 Small change not worth mentioning
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-17 18:57:20 +01:00
d543144d27 Added optional rotation/fixed display setting
Added optional fixed display parameter

Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-17 18:56:37 +01:00
4f332c14f0 Fix logging
Changed position on display
Change IP to default BT Tether IP

Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-17 18:26:30 +01:00
b95ec0dd0f Merge pull request #256
Update pisugarx.py
2024-12-17 18:16:16 +01:00
LH
09ecfeed66 Update pisugarx.py
limits the voltage to x.xx 

Signed-off-by: LH <140523069+renewedbullet@users.noreply.github.com>
2024-12-16 17:50:37 -05:00
de62008d2d Add default for gps_listener
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-16 21:36:18 +01:00
df3666777b Update wpa-sec to properly display password.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-16 20:47:44 +01:00
459cc8e54c Added random starting voice line.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-16 20:47:22 +01:00
d1c5cd5e5d Disconnect BT when disabling plugin.
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
2024-12-16 20:30:37 +01:00
d16fa0097c New bt-tether.py plugin, easier set up. 2024-12-16 19:32:36 +01:00
ffa80a5d28 New PiSugar plugin for both PiSugar2 and PiSugar3 batteries. 2024-12-16 19:31:57 +01:00
11fe8a607c Update wpa-sec.py to include show_pwd when download_results is enabled.
This option can be disabled/enabled by editing config.toml
2024-12-16 19:31:06 +01:00
7dc0eb4591 Update README.md 2024-12-15 15:01:04 +01:00
9b64b67745 Removed AI mentions since it was removed. 2024-12-15 08:00:33 +01:00
55ba9e0ee8 Fix pisugar2.py to check for "new model" and correctly display charging voice. 2024-12-15 00:22:14 +01:00
b016766e87 Fix pisugar2.py to check for "new model" and correctly display charging voice. 2024-12-15 00:10:18 +01:00
387e11a5c5 Add new default plugin (pisugar2) and defaults.
Added new requirement to pyproject.toml to make it work.
2024-12-14 23:28:21 +01:00
913c22193d Updated voice for each language, since AI was removed. 2024-12-12 11:00:53 +01:00
8be4d40960 Set low limit frequency for 2.4Ghz 2024-12-12 10:35:27 +01:00
26fbedd52d Added 6Ghz Wi-Fi channels, in case you use an external dongle that can. 2024-12-12 10:20:57 +01:00
79c590fb38 Added new starting line. 2024-12-12 09:53:31 +01:00
ef3696510b Removed 'on_ai_..' 2024-12-12 09:53:19 +01:00
7b7bbc4aad Remove blink function, we don't use the led blink function anymore. 2024-12-12 09:48:48 +01:00
b18546f30d Update README.md 2024-12-12 09:35:59 +01:00
4d1aa79bfd Removed tensorflow debug from log.py 2024-12-12 08:48:10 +01:00
6145692db0 Update README.md, since it doesn't use AI anymore. 2024-12-12 08:47:48 +01:00
a97f45859a New PR template 2024-12-11 19:50:12 +01:00
8c0b66edfb Small edit 2024-12-11 19:46:08 +01:00
4dd7520d16 Update to bug report 2024-12-11 19:32:30 +01:00
0700bb2c1a Update to bug report 2024-12-11 19:31:20 +01:00
4639870dc5 Update to bug report 2024-12-11 19:17:03 +01:00
3d6e920ec6 Update to bug report 2024-12-11 19:16:38 +01:00
ec47242af3 Update to bug report 2024-12-11 19:15:36 +01:00
71e405fa63 Update to bug report 2024-12-11 19:15:11 +01:00
9911cdb5bb Update to bug report 2024-12-11 19:12:31 +01:00
10c4e5a984 Update to bug report 2024-12-11 18:58:48 +01:00
ee1d1dba9b Update to bug report 2024-12-11 18:55:21 +01:00
e4b95700a5 Update to bug report 2024-12-11 18:54:55 +01:00
0b987656b5 Update to bug report 2024-12-11 18:49:37 +01:00
f36d4aea77 Small final edit 2024-12-09 20:21:58 +01:00
3ccfbbc940 Small final edit 2024-12-09 20:18:30 +01:00
f29c0e08df Merge pull request #241
Move self._view_on_starting() outside of loading keys exception
2024-12-08 21:03:41 +01:00
0c44b02765 Move self._view_on_starting() outside of loading keys exception
When _view_on_starting is inside the try:except:, any display errors, especially from misconfigured plugins, will trigger the exception and delete RSA keys unnecessarily.
By moving _view_on_starting after the except: clause, only errors during key loading will lead to deleted keys. view errors will silently fail.

Signed-off-by: Sniffleupagus <129890632+Sniffleupagus@users.noreply.github.com>
2024-12-06 11:06:38 -08:00
39c38d130b Merge remote-tracking branch 'origin/noai' into noai 2024-12-05 21:11:33 +01:00
81f71710b6 Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-05 21:11:28 +01:00
14ae34860f Merge remote-tracking branch 'origin/noai' into noai 2024-12-04 08:07:38 +01:00
b3df38e921 Delete brain from grid as there is no more AI. 2024-12-04 08:07:19 +01:00
ae108b402c Merge pull request #239 from Sniffleupagus/patch-4
Add session stats reporting to AUTO mode
2024-12-04 07:52:12 +01:00
9e08a6294c Add session stats reporting to AUTO mode
add MANU session stats to AUTO mode, too

Signed-off-by: Sniffleupagus <129890632+Sniffleupagus@users.noreply.github.com>
2024-12-03 10:36:48 -08:00
68d123c4ec Merge pull request #237
Fix driver log reference
2024-12-02 13:15:31 +01:00
ad4b6891a6 Merge branch 'noai' of https://github.com/V0r-T3x/pwnagotchi into noai 2024-12-01 20:37:33 -05:00
260e501628 upgrade to avoid thread overflow
this is creating a thread per plugin. This is avoiding pressure on the system.

The fix was found by Nursejackass
https://github.com/Sniffleupagus/pwnagotchi-snflpgs/blob/snflpgs/pwnagotchi/plugins/__init__.py
2024-12-01 20:37:12 -05:00
ad9f800b13 Merge branch 'jayofelony:noai' into noai 2024-12-01 20:17:14 -05:00
83e9ee6318 fixing log reference 2024-12-01 20:15:38 -05:00
5b20c0fb16 Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 19:53:51 +01:00
6a217f3684 Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 19:52:31 +01:00
5bbbcea2af Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 19:47:01 +01:00
07e7ec661c Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 19:29:41 +01:00
706ae3b152 Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 19:29:32 +01:00
5713613451 Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 19:14:53 +01:00
b6b5e92f6b Revert "Small edit"
This reverts commit 6f16c65132.
2024-12-01 19:14:33 +01:00
85856b2698 Revert "Small edit"
This reverts commit bdc6afd0be.
2024-12-01 19:14:27 +01:00
bdc6afd0be Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 19:10:48 +01:00
a5679a8f6c Merge remote-tracking branch 'origin/noai' into noai 2024-12-01 18:53:20 +01:00
6f16c65132 Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 18:53:14 +01:00
9217338a74 Update build 2024-12-01 16:28:57 +01:00
cafc8de564 Update build 2024-12-01 16:27:11 +01:00
1cf8faddda Update build 2024-12-01 15:54:16 +01:00
3c4cb155d3 Merge remote-tracking branch 'origin/noai' into noai 2024-12-01 15:38:57 +01:00
6edd91f9b9 Update build 2024-12-01 15:34:59 +01:00
246996a50a Merge remote-tracking branch 'origin/noai' into noai 2024-12-01 13:09:24 +01:00
5956eb22b5 Small edit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 13:09:19 +01:00
b8ecc7a75f Update build 2024-12-01 12:59:56 +01:00
644d342daa Remove builder/data folder, we don't need that anymore.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 12:58:37 +01:00
a78042b0fd Remove builder/data folder, we don't need that anymore.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 12:57:33 +01:00
8edf72c8ef Remove builder/data folder, we don't need that anymore.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-12-01 12:54:06 +01:00
53e4b7f2ba Merge pull request #234
Display update for 2.9.2 no AI
2024-12-01 12:53:22 +01:00
f6f30632f8 Display update for 2.9.2 no AI
display check with 2.9.2
-gfxhat
	sn3218 library missing from the venv, added to /hw/libs/pimoroni/gfxhat/
	cleanup of the code (EPD changed to LCD)
	logging info added for config options (contrast, color)
	touch control work in progress (6 touch buttons with short and long press and LED feedback)
-i2coled
	cleanup of the code (EPD changed to OLED)
	Logging info added for config options (width, height, i2c address)
-oledlcd and oledlcdvert
	working out of the box
	logging info added for available gpio breakouts (buttons)
-displayhatmini
	working out of the box
	logging info added for available gpio breakouts (buttons, rgb LED, i2c bus)
-pirateaudio
	working out of the box
	logging info added for available gpio breakouts (buttons, i2s bus)
-pitft
	working out of the box
	logging info added for available gpio breakouts (buttons)
-tftbonnet
	working out of the box
	logging info added for available gpio breakouts (buttons, i2c bus)
-minipitft
	working out of the box
	logging info added for available gpio breakouts (buttons, i2c bus)

-minipitft2
	cant test on HW but should work!
	logging info added for available gpio breakouts (buttons, i2c bus)
-argonpod
	cant test on HW but should work!
	logging info added for available gpio breakouts (buttons, IR)
2024-12-01 12:47:34 +01:00
a8563d8107 Merge pull request #233
Create gps_listener.py
2024-11-30 09:30:30 +01:00
dab9b8c4bb Create gps_listener.py
Receive GPS coordinates via termux-location and save whenever an handshake is captured.

Signed-off-by: Kris Henriksen <krishenriksen@users.noreply.github.com>
2024-11-30 08:25:39 +07:00
4ade52925d Update build 2024-11-29 09:23:20 +01:00
cf1e8aa4fa Remove workflow, as it is deprecated now.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-27 16:38:17 +01:00
2d02b8c2a0 Merge pull request #232
Plugin for WittyPi battery
2024-11-27 15:04:44 +01:00
12b386f74e Create wittypi.py
Signed-off-by: Kris Henriksen <krishenriksen@users.noreply.github.com>
2024-11-27 09:01:44 +07:00
fa2b8b97c4 Update package requirements
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-26 07:34:37 +01:00
a2fd70ee27 Merge pull request #231 from V0r-T3x/noai
adding 4 new displays
2024-11-26 06:51:13 +01:00
13bedbc834 adding 3 new displays
gamepi15
gamepi20
spotpear154lcd
2024-11-25 19:56:16 -05:00
c67915af00 Merge pull request #228
Display hat mini drivers for pwnagotchi
2024-11-25 17:56:15 +01:00
131bfc4c1c Display drivers for pwnagotchi
<!--- Provide a general summary of your changes in the Title above -->

## Description
<!--- Describe your changes in detail -->
Display support for the following screens:
- [Pimoroni GFX Hat](https://shop.pimoroni.com/products/gfx-hat?variant=12828343631955):
ui.display.type = "gfxhat"
Contrast and Backlight color can be imported from config.toml:
ui.display.contrast = 40
ui.display.blcolor = "olive"
Available backlight colors:
white, grey, maroon, red, purple, fuchsia, green,
lime, olive, yellow, navy, blue, teal, aqua
- [Adafruit miniPiTFT](https://www.adafruit.com/product/4484):
ui.display.type = "minipitft"
- [Adafruit miniPiTFT2](https://www.adafruit.com/product/4393):
ui.display.type = "minipitft2"
- [ArgonPod](https://argon40.com/products/pod-display-2-8inch):
ui.display.type = "argonpod"
- [DisplayHatMini](https://shop.pimoroni.com/products/display-hat-mini?variant=39496084717651):
Driver updated to fix issues
- I2C Oled:
Default I2C address changed to 0x3C, because most boards are coming with it by default.
Can be modified in config
ui.display.type = "i2coled"
ui.display.i2c_addr = 0x3C
ui.display.width = 128
ui.display.height = 64

## Motivation and Context
Future plan for LCD and OLED screens:
Change from the pwnagotchis hw libraries for drivers to LumaOLED LumaLCD packages.
Luma Core: https://github.com/rm-hull/luma.core
Luma LCD: https://github.com/rm-hull/luma.lcd
Luma OLED: https://github.com/rm-hull/luma.oled
It has the most used LCD and OLED drivers ready, and adding new screens could be easier in the future.

## How Has This Been Tested?
Except the argonpod and minipitft2 all screens were tested on previous builds,
should work in 2.9.2, but before release I would like to test it with an image.

## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [x] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Checklist:
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [x] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [x] I have updated the documentation accordingly.
- [x] I've read the [CONTRIBUTION](https://github.com/evilsocket/pwnagotchi/blob/master/CONTRIBUTING.md) guide
- [x] I have signed-off my commits with `git commit -s`
2024-11-25 17:37:21 +01:00
d21c2cb30c Update package requirements
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-24 09:17:05 +01:00
90d1e33eb3 Update package requirements
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-24 09:06:13 +01:00
b9b5ae2fc8 Make pi restart when there are 5 blind epochs instead of 50.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-24 00:19:32 +01:00
8fba99fa08 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-23 14:13:23 +01:00
c918b620a8 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-23 14:12:53 +01:00
6c3e5229ea Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-23 13:41:38 +01:00
3486020e54 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-23 13:41:17 +01:00
29ecad81cd Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 14:46:17 +01:00
489deb09d7 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 14:02:09 +01:00
42d1f92e02 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 14:01:38 +01:00
99f75bf5eb Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 13:17:30 +01:00
4918b9a921 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 11:52:09 +01:00
f55a08609d Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 11:51:02 +01:00
4a2b8e71a3 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 11:50:05 +01:00
4fb7752493 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 11:40:58 +01:00
e9b4667ffc Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-22 08:01:59 +01:00
ccf491a5dc Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-20 13:46:36 +01:00
c47fb379cb Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-20 13:39:45 +01:00
1d216a959c Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-19 19:43:11 +01:00
7108edc2ad Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-19 19:38:35 +01:00
3bfa73087c Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-19 19:37:01 +01:00
fa154ee279 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-18 07:54:50 +01:00
34700dd30b Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-17 21:56:10 +01:00
dda8f24904 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-17 21:52:03 +01:00
89103257ea Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-17 21:13:24 +01:00
76045b3564 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-17 21:09:54 +01:00
e04badc254 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-11-17 20:04:18 +01:00
32cea62999 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-19 13:46:48 +02:00
2b0824c8ab Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-18 23:32:08 +02:00
4a076bd229 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-18 23:21:27 +02:00
d5ef7dc303 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-18 23:19:25 +02:00
f21998214b Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-18 22:16:25 +02:00
d0f4796265 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-18 22:06:11 +02:00
e582925a8f Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-15 18:20:04 +02:00
111f871ea2 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-15 18:19:58 +02:00
4393854718 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-14 20:07:25 +02:00
ccce288182 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-14 19:02:05 +02:00
deefada29c Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-12 21:55:41 +02:00
28c1e112c8 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-11 10:23:54 +02:00
a45fd4627b Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-11 10:23:10 +02:00
164755590f Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-11 10:18:58 +02:00
ae2c0e3db4 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-11 10:18:30 +02:00
13515dfa98 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-11 10:14:25 +02:00
af632abc63 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-09-11 10:13:31 +02:00
4029b2ffa0 Merge pull request #203 from Sniffleupagus/usr1-save-recovery
add mode parameter to agent._restart, and call agent._restart from US…
2024-09-08 21:04:46 +02:00
32d244ec6f add mode parameter to agent._restart, and call agent._restart from USR1 handler instead of pwnagotchi.restart() 2024-09-08 19:25:09 +01:00
Rai
79e141320c Merge pull request #202 from quymdh/dev-q
Update: agent.py, train.py
2024-08-31 04:37:15 +10:00
330110843c Fix:
- Pwnagochi service is not running
 - Handshake not being captured
2024-08-30 16:19:43 +00:00
dc5b297a82 Merge pull request #197 from keganpowers34/patch-1
Update waveshare3in7.py
2024-08-26 21:43:22 +02:00
e8f23d654c Update waveshare3in7.py
fix return outside of function error 

Signed-off-by: keganpowers34 <42286354+keganpowers34@users.noreply.github.com>
2024-08-26 12:04:39 -06:00
Rai
aedbf6bbfb Update README.md
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-08-26 23:26:40 +10:00
0b3fc98f1c Merge pull request #196 from EatPrilosec/fixbuild
Fix build
2024-08-25 22:13:21 +02:00
7edaa9040e remove unnecessary action input
Signed-off-by: EatPrilosec <ae3nerdgod@gmail.com>
2024-08-25 07:02:37 -04:00
6b6f5923ee Compensate for ../../../<output file>.img
i assume this is for local builds, because it outputs the file outside of runner workdir entirely. compensated by making extra directory levels

Signed-off-by: EatPrilosec <ae3nerdgod@gmail.com>
2024-08-25 05:29:56 -04:00
d6bd65333e Employ matrix build strategy
- workaround for binfmt error
- speeds up builds
- allows for easier board additions

Signed-off-by: EatPrilosec <ae3nerdgod@gmail.com>
2024-08-24 22:44:46 -04:00
f81f1cedfc fix build
libraspberrypi-bin seems to be provided by raspi-utils now

Signed-off-by: EatPrilosec <ae3nerdgod@gmail.com>
2024-08-24 12:05:59 -04:00
f6fa4ef39e fix build
libraspberrypi-bin seems to be provided by raspi-utils now

Signed-off-by: EatPrilosec <ae3nerdgod@gmail.com>
2024-08-24 12:05:09 -04:00
e2ac10babb Merge pull request #195 from mendoitarou/master
Update Japanese (JA) Language
2024-08-23 20:54:10 +02:00
bff310ea3e Add files via upload
Signed-off-by: mendoitarou_ <42207304+mendoitarou@users.noreply.github.com>
2024-08-23 21:01:31 +09:00
a53130321f Update voice.po
Signed-off-by: mendoitarou_ <42207304+mendoitarou@users.noreply.github.com>
2024-08-23 20:39:56 +09:00
730cdad7cd Delete pwnagotchi/locale/ja/LC_MESSAGES/voice.mo
Signed-off-by: mendoitarou_ <42207304+mendoitarou@users.noreply.github.com>
2024-08-23 20:39:22 +09:00
85746046e1 Merge pull request #192 from wlmh110/master
waveshare e-lnk 2.13 V3/V4 update
2024-08-21 18:31:45 +02:00
fbe8211a10 waveshare e-lnk 2.13 V3/V4 update
Optimize the initialization function to resolve the issue of noise in the first few frames caused by the lack of buffer initialization.

Signed-off-by: 铲屎将军 <37292630+wlmh110@users.noreply.github.com>
2024-08-21 22:43:47 +08:00
Rai
ea4f495ab8 Merge pull request #167 from Sniffleupagus/patch-3
Add new configuration option "ui.cursor" to enable or disable blinking cursor
2024-08-19 02:26:24 +10:00
afb840212d Added ui.cursor to defaults.toml
Signed-off-by: Sniffleupagus <129890632+Sniffleupagus@users.noreply.github.com>
2024-08-18 12:16:14 -04:00
82b64baaed Fixed default value to maintain original behavior (True)
Signed-off-by: Sniffleupagus <129890632+Sniffleupagus@users.noreply.github.com>
2024-08-18 12:15:03 -04:00
244d3c03f9 Change 'showcursor' to 'curso
Signed-off-by: Sniffleupagus <129890632+Sniffleupagus@users.noreply.github.com>
2024-08-18 12:06:45 -04:00
Rai
c440a73824 Update README.md
changes a few url

Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-08-17 21:57:02 +10:00
Rai
48b3d6dcb5 Update waveshare3in7.py
adds fixes for #185 

Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-08-13 23:21:13 +10:00
Rai
b9531c60a2 adds v3 and v4 to waveshare 2in3 is any
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-08-13 23:07:40 +10:00
Rai
27aac52e1f missed a thread
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-08-11 02:57:44 +10:00
77998cd214 Merge pull request #182 from rai68/log-changes
Log changes
2024-08-07 19:45:35 +02:00
Rai
03c33e1be3 Merge branch 'master' into log-changes
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-08-07 00:58:01 +10:00
4f63af63a8 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-31 00:33:52 +02:00
6ceb27f837 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-30 22:51:03 +02:00
5d5cde5409 Revert "Update build"
This reverts commit 2630068c7b.
2024-07-28 17:22:45 +02:00
2630068c7b Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-28 17:21:28 +02:00
Rai
de940d0e77 Merge branch 'jayofelony:master' into log-changes 2024-07-28 20:27:09 +10:00
0f36a10567 Update __init__.py 2024-07-28 17:46:53 +10:00
65a93812ef Merge remote-tracking branch 'origin/master' 2024-07-26 23:29:05 +02:00
022ebccf30 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-26 23:28:59 +02:00
Rai
e5812e86c1 fixes an indent in 1in44 lcd waveshare
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-07-13 19:05:12 +10:00
1ee940c798 adds daemonise and plugin as threads 2024-07-09 07:35:53 +10:00
e3f0da6193 small fixes 2024-07-09 04:57:52 +10:00
f9efbb56cd Update defaults.toml 2024-07-09 04:24:43 +10:00
89a589af72 changes to logging and threading 2024-07-09 04:22:18 +10:00
a100933678 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-02 15:10:17 +02:00
3584f3f551 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-02 15:04:51 +02:00
3fdcebc90c Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-02 15:04:33 +02:00
e33bec1d31 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-02 15:03:06 +02:00
de0a09e39d Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-01 20:15:45 +02:00
dbb83b4825 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-01 16:05:45 +02:00
956c083985 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-01 16:00:09 +02:00
62c324730c Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-01 13:17:12 +02:00
8dc6f78610 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-01 13:16:44 +02:00
0542c002d0 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-01 13:16:28 +02:00
702d463194 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-07-01 07:51:18 +02:00
087fd9cf09 Revert
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-30 20:07:53 +02:00
28335419f6 MLS is offline
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-30 20:07:41 +02:00
db444588dd Wiki
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-16 17:07:58 +02:00
de08804b7f pycharm files
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:04:42 +02:00
9d6a7e9441 Same files added to create a package
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:04:17 +02:00
14480346fe Change how spi is called.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:03:56 +02:00
7b6ad4e99a More pythonic
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:03:36 +02:00
313edb1524 Duplicate display file
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:03:23 +02:00
820f2cef59 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:02:58 +02:00
c76d9f4909 Try to get a fix for device is busy while changing channels.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:02:47 +02:00
69ff6cd03c Add pisugar 3 plugin to default plugins
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:02:23 +02:00
09f6281666 Remove bt helper
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:02:07 +02:00
2f1c216387 Add inky phat v2
Change import for v1

Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:01:52 +02:00
87d8beb9be Change bettercap version check for oPwngrid
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:01:17 +02:00
e63be1ffd8 Add extra check for fix_services.py
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:00:53 +02:00
d5755103a0 Remove pisugar2 settings
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 20:00:30 +02:00
2014c22262 Fix couple displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 19:59:51 +02:00
5295692da9 Added display inky phat v2
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-15 19:58:54 +02:00
b7eb86d55c Update view.py 2024-06-13 05:45:42 +10:00
81c3581138 Merge pull request #149
Move BT status position in view
2024-06-12 21:00:40 +02:00
7d8b66e1cb Update displayhatmini.py 2024-06-13 04:18:57 +10:00
689d39c450 more changes 2024-06-13 03:37:51 +10:00
8eccd71c6b changes to ui 2024-06-13 02:55:05 +10:00
Rai
caf73700fd Merge branch 'jayofelony:master' into master 2024-06-12 20:40:08 +10:00
e9c12dde94 Add new configuration option "ui.showcursor" to enable or disable blinking cursor by name
When ui.fps is not zero, the default UI adds a blinking cursor next to the pwnagotchi name, as a verification that the display is updating. This proposed change adds a configuration option "ui.showcursor" to allow users to disable the cursor. If ui.showcursor is set to "true" in config.toml, the cursor will show, if set "false" in config, the cursor will not be shown. Default behavior if ui.showcursor is not set is maintained (cursor will show). If ui.fps is set to 0, the cursor will not be shown regardless of the ui.showcursor setting.

(tested on a single pwny with showcursor unset, false, and true, multiple times)

Signed-off-by: Sniffleupagus <129890632+Sniffleupagus@users.noreply.github.com>
2024-06-11 10:00:32 -07:00
3f40c0b7b3 Switch to bettercap lite
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-06 14:36:33 +02:00
318e3480ce Remove clear on exit, invokes an extra restart at boot
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-06 13:43:59 +02:00
1614d1f94d Updated fix_services.py
Updated pwnagotchi

Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-06 13:41:19 +02:00
4e1f08f6a8 Updated partnership with PiSugar team.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-05 10:55:21 +02:00
cbc601e38b Updated displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-05 10:50:15 +02:00
20bae7adaa Version 2.9.2
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-03 21:49:57 +02:00
ed62ac0b84 Version 2.9.2
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-03 20:06:32 +02:00
f0ecee0555 Merge remote-tracking branch 'origin/master' 2024-06-02 12:47:58 +02:00
8e99ae419d Version 2.9.2
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-06-02 12:47:51 +02:00
88957059ef Merge pull request #148 from energydrinksjunkie/master
added serbian language
2024-05-01 23:27:45 +02:00
c42e8d0f5d Move BT status position in view
This moves the position of BT status a little to the left to make enough space for battery plugin status.

When a battery plugin is used along with bt-tether, BT status can overwrite the first character of the battery plugin status.

Signed-off-by: Ayman Bagabas <ayman.bagabas@gmail.com>
2024-05-01 16:26:11 -04:00
5b5718c186 added serbian language 2024-05-01 22:22:01 +02:00
70f0dcb891 Merge pull request #144 from jfhenriques/master
Fix condition error in view.py when using invert=true
2024-04-26 19:06:09 +02:00
8f02c36d63 Merge branch 'jayofelony:master' into master 2024-04-26 16:16:11 +01:00
9941f093e9 Fix issue with FilledRect when using ui.invert=true 2024-04-26 16:14:05 +01:00
de07226be1 Update _version.py 2024-04-26 17:03:16 +02:00
6603e01005 Update pwnlib 2024-04-26 17:02:51 +02:00
e2fa3ca138 Update pwnlib 2024-04-26 17:02:33 +02:00
357ffc67e5 Update _version.py
Signed-off-by: Jayofelony <oudshoorn.jeroen@gmail.com>
2024-04-26 09:19:13 +02:00
ea8fb5e533 Merge pull request #139 from RKouchoo/master
Fix 3.7 orientation
2024-04-26 06:37:39 +02:00
31afd6d0ba Merge pull request #138 from kszabi1/fix-ui-components-draw
Fix [#137 issue]: Incorrect use of assignment operator (=) instead of comparison operator (==) in draw method
2024-04-26 06:37:28 +02:00
b38274e652 Fix 3.7 orientation 2024-04-26 13:21:55 +10:00
518e8c219c Fix incorrect use of assignment operator (=) instead of comparison operator (==) in draw method of ui/components.py 2024-04-26 01:34:26 +02:00
4e07fbf1aa Update raspberrypi32.yml
Signed-off-by: Jayofelony <oudshoorn.jeroen@gmail.com>
2024-04-25 20:30:45 +02:00
b3e81a95c8 Update raspberrypi32.yml
Signed-off-by: Jayofelony <oudshoorn.jeroen@gmail.com>
2024-04-25 20:06:54 +02:00
050966215b Merge pull request #132
I2C oled support for SSD1306 chipsed oled screens
2024-04-22 08:41:34 +02:00
fef442edbb I2C oled driver mods by NurseJackass
I2C oled config can be added in the config.toml
Default is 128x64 display on i2c address 0x3C

ui.display.type = "i2coled"
ui.display.i2c_addr = 0x3C
ui.display.width = 128
ui.display.height = 64
2024-04-18 17:39:53 +02:00
1064936503 Small changes
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-04-15 15:23:47 +02:00
a762a7f763 Merge remote-tracking branch 'origin/master' 2024-04-15 15:23:41 +02:00
8fd0e358a9 Small changes
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-04-15 15:23:34 +02:00
9a941c1d46 Merge branch 'jayofelony:master' into master 2024-04-04 15:46:29 +02:00
ead5a3baac Merge pull request #121 from rai68/patch-2
Update components.py
2024-04-03 21:58:17 +02:00
ac2973889d Update FUNDING.yml 2024-04-03 21:14:22 +02:00
Rai
8991dd6811 Update components.py
this allows plugins / ui elements of bitmap to be inverted for plugins etc

Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-04-04 03:04:31 +10:00
415e5cd551 Small changes
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-04-03 09:39:38 +02:00
47705ba1a2 Update config.txt at creation of image file, no more overwriting at auto-update.
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-04-03 09:39:10 +02:00
7c7bbc770b Merge branch 'jayofelony:master' into master 2024-04-02 17:54:00 +02:00
ab83de4905 separate I2C Oled display
Separate files for ggeneric I2C Oled display with SSD1306 driver
128x64 resolution is tested, 128x32 and 96x16 resolutions is not tested yet
2024-04-02 17:46:11 +02:00
8f7741cd9e Remove unused imports
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-04-01 17:30:51 +02:00
835886e6f6 Merge pull request #114
Update Traditional Chinese (TW) Language
2024-04-01 17:29:58 +02:00
6b2039a8e6 Merge pull request #116
Fix Waveshare V2 Position
2024-04-01 17:29:28 +02:00
d53d0c7841 Merge pull request #117
Fix range of lines about the displays
2024-04-01 17:29:10 +02:00
6c40998b51 Merge pull request #118
Fix typo in ansible script
2024-04-01 17:28:18 +02:00
a71a90ba3d Delete config.py 2024-04-01 01:37:47 +02:00
b03f6f747b Generic I2C Oled support , waveshare oled/lcd vertical layout
work in progress for the triple screen project
2024-03-31 23:55:15 +02:00
a8ba88c9cc Fix typo in ansible script
Signed-off-by: Morten Winther Olsson <18525061+olwimo@users.noreply.github.com>
2024-03-30 08:04:55 +01:00
f597bd6d29 Fix range of lines about the displays
Signed-off-by: Benoît Allard <benoit.allard@gmx.de>
2024-03-29 15:08:07 +01:00
a3f103ac06 Fix Waveshare V2 Position
The current location "178, 84" does not correctly display the temperature symbol (Cellsius, Kelvin, etc.). I fix the code whit the correct position.

Signed-off-by: Andrea Draghetti <drego85@draghetti.it>
2024-03-29 08:57:45 +01:00
e0a068e51d Upload tw voice.mo
Signed-off-by: alan67160 <20385640+alan67160@users.noreply.github.com>
2024-03-27 18:46:42 +08:00
dc1b3c7635 Delete tw voice.mo
Signed-off-by: alan67160 <20385640+alan67160@users.noreply.github.com>
2024-03-27 18:45:59 +08:00
3657859a73 Update tw voice.po
Signed-off-by: alan67160 <20385640+alan67160@users.noreply.github.com>
2024-03-27 18:45:21 +08:00
33ff5a0bf8 Fix ui.invert
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-27 07:37:59 +01:00
666f65c640 Merge pull request #110
Update Portuguese (Brazil) Language
2024-03-27 07:36:24 +01:00
84d45a0d45 Version 2.9.0
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-27 07:20:45 +01:00
06a4491008 Update 32bit to use latest pwngrid/bettercap
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-27 07:17:35 +01:00
5485f83ca6 Update Portuguese (Brazil) Language 2024-03-26 14:06:55 -03:00
Rai
8a242a707b Update LCD_2inch4.py
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-03-27 02:06:05 +10:00
Rai
8a3eacb5d2 Update LCD_2inch4.py
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-03-27 02:05:24 +10:00
ab541458fa add extra check for fix_services
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-26 12:15:00 +01:00
ac345c2ee7 make_latest: true
generate_release_notes: true

Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-26 07:58:06 +01:00
468cfd9f4f prerelease: false
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-26 07:55:06 +01:00
d6bc5c0e66 Reboot after auto-update
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-26 00:07:15 +01:00
4905eb6b26 Optimize display imports
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-26 00:05:50 +01:00
697a7778b1 Fix fix_services.py
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-25 23:29:10 +01:00
9287283ee7 Added 11 waveshare lcd displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-25 22:53:07 +01:00
8013109ef7 Refactoring displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-25 22:52:42 +01:00
f140fe1a2d Update setup.py to look for empty apt_packages.txt
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-25 11:58:46 +01:00
8fe503c67d No new apt-packages needed
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-25 08:11:39 +01:00
d81013412e Update several displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-24 15:18:58 +01:00
3c701822bd Update donation method
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-24 12:58:26 +01:00
2f5ddb492a Small typo's
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-24 12:58:07 +01:00
9e3324221d Fix adafruit 2.13inch display
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-24 12:57:40 +01:00
b069b82984 Version 2.8.9
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-24 12:57:20 +01:00
cb7d965271 Update MOTD
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-24 12:57:08 +01:00
7abf9ff8da Update faces.py
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-23 09:49:46 +01:00
18fb956251 Update setup.py
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-23 09:46:32 +01:00
afb1d11cd8 Added Adafruit 2in13_V3 display
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-23 09:24:52 +01:00
627be80e6c add system wide aliases, if you were to use custom users
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 19:09:49 +01:00
c4c4d6c417 in case you use an unsupported display it will default to dummy display, displaying nothing
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 19:09:27 +01:00
8dcae13ce9 add commented dtoverlay=disable-wifi
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 19:09:00 +01:00
1352e99774 Fix wrong imports
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 18:34:49 +01:00
2182d7c29d Update Frysian Language
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 09:56:47 +01:00
703c05a93b Full SSID again
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 09:06:04 +01:00
697cc5d88b Add DummyDisplay
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 08:37:56 +01:00
4b04f9b7a5 Install OS packages from auto-update
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 08:37:22 +01:00
c7b94a0707 Version 2.8.8 starts here
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-22 08:37:01 +01:00
5116bac2a7 Multiple changes
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-20 22:32:04 +01:00
51625e61f9 Multiple changes
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-20 22:25:36 +01:00
bf9a0a96c1 Update raspberrypi64.yml 2024-03-20 21:17:20 +01:00
bd03f07aa8 Update raspberrypi32.yml 2024-03-20 21:16:50 +01:00
3f13df8f20 Merge pull request #104
Update defaults.toml
2024-03-20 07:20:19 +01:00
ce0275f2ae Update defaults.toml
Removed main.filter since it's no longer referenced in agent.py as of this commit 1a55afd74a (diff-0548f0a21e1984ecf3c32d6cd9c17e6a62f4f139c001360935890f649b745cc7)

Signed-off-by: seelenamt <dandrewe@gmail.com>
2024-03-19 10:51:59 -05:00
b971f18f75 Update Sponsor links
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-19 13:19:54 +01:00
ea9d11d018 Update Sponsor links
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-19 13:19:00 +01:00
8a572f1b70 Update Sponsor links
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-19 13:16:14 +01:00
0c4f2a5093 small change
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-19 09:25:17 +01:00
7edd752664 small change
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-19 07:56:06 +01:00
cc550aa236 small change
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-18 15:05:00 +01:00
ff033d41d3 Revert "fallback to older 32bit image"
This reverts commit b33af167d4.
2024-03-18 14:56:59 +01:00
6d0a0d8d5f fallback to older 32bit image
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-18 13:04:19 +01:00
b33af167d4 fallback to older 32bit image
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-18 12:03:20 +01:00
9053762e71 2.8.7.2
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-18 11:59:32 +01:00
26fef7dd99 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	builder/data/64bit/raspberrypi64.yml
2024-03-18 11:58:33 +01:00
5dd17291f7 Fix a lot of stuff
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-18 11:58:22 +01:00
bac79f3465 Update _version.py 2024-03-17 21:17:08 +01:00
bb8dfe0244 Update raspberrypi64.yml 2024-03-17 21:16:25 +01:00
1b16975031 Update workflow
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 09:24:57 +01:00
dd2b559ebc Update workflow
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 09:22:35 +01:00
93ba2a7f79 Update workflow
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 09:20:02 +01:00
dd18072002 Update workflow
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 09:18:31 +01:00
1eafbb841f Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 01:10:56 +01:00
aa817288ea Update Raspios image
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 00:50:17 +01:00
43285eb2c0 Update Raspios image
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 00:47:49 +01:00
4b29476c2f Update Raspios image
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 00:46:09 +01:00
1a8ff930d9 Update nexmon
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-17 00:34:54 +01:00
8a65afdc8f Update nexmon
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-16 10:52:56 +01:00
6fcd1b0e23 Fix displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-15 15:50:43 +01:00
e0b0f5d800 Fix displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-15 15:07:55 +01:00
2243079bf6 Fix displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-15 15:07:15 +01:00
e10eb31ed1 Fix displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-15 13:41:27 +01:00
1c8114e444 Merge remote-tracking branch 'origin/master' 2024-03-15 10:00:01 +01:00
91638a151f Fix displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-15 09:59:55 +01:00
d4adaabcbd Merge pull request #93
Screen support
2024-03-13 23:03:44 +01:00
006cdb0fe3 Add 2 waveshare displays
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-13 22:41:18 +01:00
29386fb945 Update build to kernel 6.6.20
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-13 21:49:12 +01:00
4b4646d604 Added 2 waveshare diplays:
5.79 inch
5.79b inch

Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-13 21:49:00 +01:00
3fae6ec312 Screen support
Screen support for the following displays:
Adafruit pitft (2,4" and 2,8" tested)
Adafruit tft bonnet
Pimoroni pirate audio
Waveshare OLED/LCD hat
2024-03-13 16:31:49 +01:00
09a82aa0b4 revert pcapng
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-13 07:59:37 +01:00
541865a2eb Merge pull request #92 from jayofelony/dev
Dev
2024-03-13 07:57:37 +01:00
928de2769d Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-13 07:55:53 +01:00
6987840da2 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	Makefile
#	pwnagotchi/plugins/default/hashie.py
2024-03-07 21:37:27 +01:00
58de15ce2d Update Makefile
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-06 16:55:04 +01:00
b5ea3da619 Update Makefile
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-06 15:23:40 +01:00
6c68d4608f Fix gps plugin
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-06 15:23:30 +01:00
14a727954b Update Makefile and build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-05 21:48:33 +01:00
aeada2ee6e Fix waveshare2in7_V2.py
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-05 21:48:16 +01:00
ebb8fef3fc Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-05 19:54:47 +01:00
e531288369 Added WeAct 2.9 inch display
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-05 19:54:33 +01:00
2015b56c5d Fix waveshare3in52.py
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-05 19:54:10 +01:00
2497475057 Added WeAct 2.9 inch display
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-05 19:54:01 +01:00
0bdbbc23fd Version 2.8.7
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-05 19:53:35 +01:00
111787544f Merge remote-tracking branch 'origin/master' 2024-03-05 16:31:06 +01:00
efa5d8b197 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-05 16:31:00 +01:00
9e5fb49d7c Merge pull request #78 from rai68/master
Update view.py - bug fix, my self left a broken debug line in
2024-03-05 06:14:15 +01:00
Rai
cbbd7d5a6d Merge branch 'jayofelony:master' into master 2024-03-05 14:36:29 +10:00
Rai
90c5818123 Update view.py
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-03-05 13:23:30 +10:00
eb76ef4c54 Update build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-04 21:21:48 +01:00
59e42daeb5 Update bash
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-03-04 21:13:33 +01:00
5b7014c68e Change MOTD 2024-03-04 21:01:23 +01:00
42cc3136ee Update wizard script 2024-03-04 20:54:25 +01:00
2a243870f7 Update wizard script 2024-03-04 20:49:38 +01:00
8f043ff5ef Update wizard script 2024-03-04 20:47:52 +01:00
255bbdbc08 Update wizard script 2024-03-04 20:40:16 +01:00
6f57b66cf4 Add display invert to --install 2024-03-04 20:35:09 +01:00
a4c25e9996 Add display invert to --install 2024-03-04 20:28:31 +01:00
9495d55296 Add display invert to --install 2024-03-04 20:25:22 +01:00
69e7503d67 Add display invert to --install 2024-03-04 20:21:41 +01:00
25cb1f2175 Add display invert to --install 2024-03-04 20:11:20 +01:00
54b7ce5d0d Add display invert to --install 2024-03-04 20:08:45 +01:00
1f9afd541d Add display invert to --install 2024-03-04 19:59:48 +01:00
87eae76a58 Add display invert to --install 2024-03-04 16:07:17 +01:00
6691257036 change small font size 2024-03-04 16:00:31 +01:00
2149c5dbdf remove color = black 2024-03-04 15:55:50 +01:00
77af772b4b remove color = black 2024-03-04 15:53:18 +01:00
14e4fc6d47 Add a interactive configuration installer 2024-03-04 15:48:52 +01:00
5be8580a59 Add a interactive configuration installer 2024-03-04 15:46:23 +01:00
f7a599ab8f Add a interactive configuration installer 2024-03-04 15:42:36 +01:00
5f907b236a Add a interactive configuration installer 2024-03-04 15:39:24 +01:00
bc92613700 Add a interactive configuration installer 2024-03-04 15:36:17 +01:00
501ec9ca2b Add a interactive configuration installer 2024-03-04 15:34:39 +01:00
e5e0180f3c Add a interactive configuration installer 2024-03-04 15:32:08 +01:00
ea60808700 Add a interactive configuration installer 2024-03-04 15:26:48 +01:00
a34db250b5 Add a interactive configuration installer 2024-03-04 15:24:45 +01:00
d29aca15a9 Add ui.invert = false to defaults 2024-03-04 15:24:17 +01:00
8531b89771 Add ui.invert = false to defaults 2024-03-04 13:02:33 +01:00
59d510d0e1 Merge pull request #77
Adds invertable BLACK/WHITE to config
2024-03-04 12:56:52 +01:00
913b1a6e1d Update 2.7 inch display 2024-03-04 12:55:12 +01:00
Rai
de2cdaa3c9 Update view.py
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-03-04 20:41:19 +10:00
Rai
f2cf34a8b9 Update view.py
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-03-04 20:39:55 +10:00
Rai
bbb46128fe Update view.py
Signed-off-by: Rai <58925163+rai68@users.noreply.github.com>
2024-03-04 20:39:20 +10:00
46713b6e73 Update view.py 2024-03-04 19:59:34 +10:00
aa2b09fb21 Update build 2024-03-01 10:19:32 +01:00
9125e43b20 Add display type variants, no new displays 2024-03-01 10:08:03 +01:00
7e4d926b14 Fix setup.py 2024-03-01 10:07:33 +01:00
6417ef5a78 Upgrade pip, setuptools, wheel 2024-03-01 10:07:25 +01:00
46c03063fe Version 2.8.6 2024-02-29 23:05:30 +01:00
d5384d5a81 Moved all reset logging to debug, except for plugin loaded.
Removed the counter from display
2024-02-29 23:01:05 +01:00
e800c66e57 Let auto-update check for armhf/aarch64 (pwngrid/bettercap) 2024-02-29 22:49:21 +01:00
e3a404cb39 Fix waveshare1in54.py 2024-02-29 10:23:15 +01:00
6cb6aaeb81 Merge remote-tracking branch 'origin/master' 2024-02-29 10:22:52 +01:00
5761dac073 Fix pwnagotchi plugins list error if no update has been ran first 2024-02-29 10:22:41 +01:00
3ada0628e1 Merge pull request #74 from Sniffleupagus/patch-1
Automatically remove invalid ai parameters leftover from tensorflow
2024-02-28 18:25:47 +01:00
9fa772c36a Automatically remove invalid ai parameters leftover from tensorflow
Ease transition from old Pwnagotchi running tensor flow to new running torch, but automatically dumping the invalid parameters.

Signed-off-by: Sniffleupagus <129890632+Sniffleupagus@users.noreply.github.com>
2024-02-28 09:58:41 -05:00
a92e66137c Fix build 2024-02-27 11:59:22 +01:00
a7e98cf166 Fix build 2024-02-27 10:24:44 +01:00
9a1a264a9f Fix waveshare1in54.py 2024-02-27 10:21:29 +01:00
8a0d482fe0 Make pwnlog point to correct log location 2024-02-27 10:19:30 +01:00
0cc320d31f Fix waveshare1in54.py 2024-02-27 10:12:38 +01:00
d841d2b649 Update build 2024-02-27 10:11:00 +01:00
966126a986 Update build 2024-02-27 10:10:06 +01:00
d67935fa6a Update build 2024-02-26 21:27:10 +01:00
46d867ce7f Update build 2024-02-26 21:20:56 +01:00
2e16069850 Update workflow 2024-02-26 20:36:16 +01:00
6e3cbbdd39 Update Makefile 2024-02-26 20:15:55 +01:00
a19bd6a181 Update setup.py 2024-02-26 19:38:54 +01:00
6c03d95724 Update build 2024-02-26 19:34:14 +01:00
60a9da9acc Update workflow 2024-02-26 13:09:15 +01:00
25aba0d73c Update workflow 2024-02-26 13:04:00 +01:00
ecde496534 Update workflow 2024-02-26 11:49:39 +01:00
7ebd4dd7a0 Update workflow 2024-02-26 10:48:21 +01:00
35f1707436 Update workflow 2024-02-26 08:58:06 +01:00
60ced12ea5 Update workflow 2024-02-26 08:56:37 +01:00
6082a0c169 Update workflow 2024-02-26 08:55:05 +01:00
a72c1b1628 Update workflow 2024-02-26 08:54:05 +01:00
e37a0bdc62 Update workflow 2024-02-26 08:52:17 +01:00
262f8bf551 Update workflow 2024-02-26 08:48:30 +01:00
5311dd9ddc Update workflow 2024-02-25 21:54:39 +01:00
bd9c44b4a3 Update workflow 2024-02-25 20:50:08 +01:00
3b01aec872 Update workflow 2024-02-25 20:33:09 +01:00
3e571bff2d Update workflow 2024-02-25 14:29:23 +01:00
391941e64a Update workflow 2024-02-25 14:28:09 +01:00
3fff6182ed Update workflow 2024-02-25 14:23:16 +01:00
73e0a1fce7 Update auto-update.py 2024-02-25 13:42:12 +01:00
9ba23d77d1 Update Makefile
Remove bananagotchi files
2024-02-25 13:35:23 +01:00
8be75627e9 Update build 2024-02-25 12:58:40 +01:00
c2a36aa678 Update README.md 2024-02-25 12:29:11 +01:00
fdf0a087f6 Update workflow 2024-02-25 12:23:56 +01:00
c6efa5df08 Update workflow 2024-02-25 12:11:47 +01:00
62327a711e Update workflow 2024-02-25 12:11:20 +01:00
bb460a9cc6 Update workflow 2024-02-25 12:07:11 +01:00
93b2322ab5 Update workflow 2024-02-25 12:05:14 +01:00
53a8af4711 Update workflow 2024-02-25 12:04:16 +01:00
ed5decffa0 Version 2.8.5 2024-02-25 12:00:29 +01:00
147cbfaa07 Version 2.8.5 2024-02-25 11:56:44 +01:00
ced9b4d5ee Update requirements.txt 2024-02-25 11:55:46 +01:00
472c3165ed Update workflow publisher 2024-02-25 11:50:56 +01:00
1578d13d98 Fix builder 2024-02-25 11:46:30 +01:00
0965e7eb3e Update image filename
Add pishrink to Makefile
2024-02-25 11:25:22 +01:00
b789c14f14 Change image filename, 32bit/64bit
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-25 11:18:19 +01:00
0855b44d59 Update everyting!
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-25 11:17:05 +01:00
55c6007d32 Update everyting!
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-25 11:10:59 +01:00
a7cf8a3383 Delete pwnagotchi/ui/hw/libs directory
Signed-off-by: Jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-25 10:45:28 +01:00
faa48b2752 Change repo's
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-25 10:42:47 +01:00
d20619340c Edit build
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-25 10:10:07 +01:00
43a07fe969 Edit Makefile
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-25 10:07:02 +01:00
bcce22c164 Edit Makefile
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-25 10:06:35 +01:00
0264b7a7db Merge remote-tracking branch 'origin/master' 2024-02-24 11:08:19 +01:00
fba5dd0341 Correct layout for waveshare3in52.py
Signed-off-by: jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-24 11:08:00 +01:00
dd7760efdf Merge pull request #56 from Sniffleupagus/DummyDisplay
Added DummyDisplay for arbitrary screen size when headless
2024-02-20 20:49:04 +01:00
f7cd0fb1fc Initialize as "DummyDisplay", not "inky"
Signed-off-by: Sniffleupagus <129890632+Sniffleupagus@users.noreply.github.com>
2024-02-20 11:18:15 -05:00
611a3e7fb5 fix for waveshare3in7.py 2024-02-15 20:51:55 +01:00
599c6211e4 version 2.8.4 2024-02-15 20:48:27 +01:00
eb48d29851 fix on 38 displays 2024-02-15 20:46:48 +01:00
0999b95be0 update build 2024-02-15 09:55:01 +01:00
ae351e5e9c update waveshare3in0g.py 2024-02-15 09:54:49 +01:00
fa58136c0e update waveshare3in7.py 2024-02-15 09:34:45 +01:00
3d5185f2c1 update waveshare3in7.py 2024-02-15 09:30:03 +01:00
b6bb7b9080 update waveshare3in7.py 2024-02-15 09:26:33 +01:00
20715351af revert back to drschottky 2024-02-14 08:53:54 +01:00
1d3c781d12 version 2.8.3 2024-02-13 23:25:55 +01:00
bd51b4330f version 2.8.3 2024-02-13 23:15:05 +01:00
f216a21132 update 2024-02-13 23:13:49 +01:00
5ae357c3dc Merge remote-tracking branch 'origin/master' 2024-02-13 23:11:10 +01:00
ed9afe6856 Revert "Changed from dphys-swapfile to zram-tools"
This reverts commit 26913016b9.
2024-02-13 23:10:53 +01:00
25d932fa9b Revert "zramswap"
This reverts commit 0dbd611ed5.
2024-02-13 23:10:52 +01:00
ebd25d50b0 Update README.md 2024-02-09 23:13:26 +01:00
0585fe75fe update 2024-02-09 13:14:10 +01:00
27e784a5d7 update 2024-02-09 13:12:40 +01:00
c02efb5224 update Makefile 2024-02-09 13:11:02 +01:00
a7634a2b4a update Makefile 2024-02-09 13:01:47 +01:00
ca4feb895e Revert "Revert "Testing pcapng fileformat""
This reverts commit 0e274af5a0.
2024-02-08 22:51:57 +01:00
107d366c82 update Makefile 2024-02-08 21:40:28 +01:00
488968ba7f Revert "update Makefile"
This reverts commit 9a40567d
2024-02-08 20:18:58 +01:00
0dd8f72c95 Merge pull request #58 from jayofelony/dev
dev
2024-02-08 20:07:20 +01:00
0e274af5a0 Revert "Testing pcapng fileformat"
This reverts commit 7040be2d30.
2024-02-08 20:06:33 +01:00
8627c8800d Merge pull request #57 from jayofelony/dev
Dev
2024-02-08 07:53:53 +01:00
53ed6f61c6 Merge branch 'master' into dev
Signed-off-by: Jayofelony <oudshoorn.jeroen@gmail.com>
2024-02-08 07:53:45 +01:00
835523241b update build 2024-02-08 07:51:19 +01:00
418dbf21e3 Added DummyDisplay for arbitrary screen size when headless 2024-02-07 15:16:26 -08:00
9a40567daa update Makefile 2024-02-06 22:12:05 +01:00
eab331686d Merge pull request #54 from crs-k/dev
Add PiShrink step to the workflow (#1)
2024-02-06 22:10:12 +01:00
e1d8001fb4 Add PiShrink step to the workflow (#1)
* Add PiShrink step to the workflow

* Add environment variables for Raspberry Pi 64-bit builder

* Update Makefile command to include debug information

* Add source distribution target to Makefile

* Remove unnecessary provisioner command

* Add armhf architecture support

* Remove armhf architecture provisioning

* Refactor Makefile to remove unnecessary files

* Update Makefile command in publish.yml

* Update pwngrid URL in raspberrypi64.yml

* Add permissions to publish workflow

* Remove unnecessary permissions in publish.yml
2024-02-06 12:53:45 -05:00
3cc172a526 update Makefile 2024-02-06 09:06:54 +01:00
41afe302d9 update Makefile 2024-02-06 09:05:42 +01:00
5bcca7e89b update README.md 2024-02-06 08:52:16 +01:00
4a12436942 add architecture armhf 2024-02-06 08:41:28 +01:00
d8b6363d37 Merge pull request #51
Waveshare 3.52 in e-ink update
2024-02-06 08:36:21 +01:00
b3d8a44208 Update waveshare3in52.py
Signed-off-by: Chris Kerins <clkerins@gmail.com>
2024-02-05 20:14:18 -05:00
ck
3fb91498cd Enable Makefile execution and remove disk image creation 2024-02-05 17:52:51 -05:00
ck
7587f38c28 Update disk.img path in publish.yml 2024-02-05 17:46:20 -05:00
ck
d7fefa78f0 Commented out make step and added code to create .img file 2024-02-05 17:40:38 -05:00
ck
1ef3a88679 Update distDir path in publish.yml 2024-02-05 17:34:23 -05:00
291ef39563 Update README.md to show support for Pi 5 2024-02-05 22:10:53 +01:00
16d80a09e6 Update README.md to show support for Pi 5 2024-02-05 22:10:34 +01:00
ck
4ffad03c91 Update distDir path in publish.yml 2024-02-05 15:44:50 -05:00
ck
0638832532 Update mountpoint for boot partition 2024-02-05 13:42:59 -05:00
ck
f895b06978 Update qemu binary paths for arm64 2024-02-05 13:19:56 -05:00
ck
f410feb2bb Add check for qemu-aarch64 in binfmt_misc 2024-02-05 13:09:36 -05:00
ck
1ffe6c4e3d Remove Makefile2 and update build process 2024-02-05 12:34:34 -05:00
ck
dfbfd7f891 Update pwngrid to version 1.11.1 2024-02-05 12:34:09 -05:00
ck
a50695aef2 Update publish workflow and add Makefile2 2024-02-05 12:18:04 -05:00
ck
829a6962d6 Update binfmt-support and add checks for qemu-user-static package, binfmt-support service, and binfmt_misc filesystem 2024-02-05 12:17:41 -05:00
ck
ce1315b85f Add binfmt_misc registration for qemu-aarch64 2024-02-05 12:08:07 -05:00
ck
6a2703cc27 Update QEMU in publish.yml 2024-02-05 11:34:03 -05:00
ck
502e856934 Update QEMU and restart binfmt-support 2024-02-05 11:22:39 -05:00
dffcbbf447 Revert "Revert "Testing pcapng fileformat""
This reverts commit d142840307.
2024-02-05 17:16:13 +01:00
ck
333804c3bb Remove unnecessary build configuration for Raspberry Pi 32 Pwnagotchi 2024-02-05 11:10:29 -05:00
ck
50b1ceed81 Remove unnecessary file from pwnagotchi build process 2024-02-05 11:01:49 -05:00
ck
877b9fbba3 Update Makefile and builder/pwnagotchi.json.pkr.hcl 2024-02-05 10:57:33 -05:00
ck
8724ca546d Update packer builder-arm source URL 2024-02-05 10:51:18 -05:00
961d3a536a Merge pull request #2 from crs-k/waveshare-352-support
Waveshare 352 support
2024-02-05 10:38:39 -05:00
ck
c882d0b67a Update arm plugin source in pwnagotchi.json.pkr.hcl 2024-02-05 10:29:01 -05:00
ck
12fd081ae0 Update required_plugins in pwnagotchi.json.pkr.hcl 2024-02-05 10:09:57 -05:00
ck
e1be0f7674 Remove unnecessary clean-up step in Makefile 2024-02-05 10:01:12 -05:00
396b30f780 Merge pull request #1 from crs-k:waveshare-352-support
Add publish workflow and update display layout
2024-02-05 09:31:24 -05:00
ck
e7d8d632a0 Add publish workflow and update display layout 2024-02-05 09:30:49 -05:00
5a6ec7b4b8 Next version will be 2.8.2 2024-02-04 18:28:09 +01:00
92cd5d3fdb Merge pull request #47 from jayofelony/dev
removed blind bug check from fix_services.py
2024-02-04 18:09:33 +01:00
99caa7a973 removed blind bug check from fix_services.py 2024-02-04 18:08:31 +01:00
a94e7eef02 Merge pull request #46 from jayofelony/dev
Dev to master
2024-02-04 18:04:44 +01:00
1cefae55d1 moved the majority of logging to debug 2024-02-04 17:48:22 +01:00
c5ee1df855 unused function 2024-02-04 17:44:05 +01:00
d142840307 Revert "Testing pcapng fileformat"
This reverts commit 7040be2d30.
2024-02-04 17:42:56 +01:00
e558146e28 moves the majority of logging to debug 2024-02-04 17:42:40 +01:00
11a3330153 small fix 2024-02-04 17:42:22 +01:00
53b2dd8628 update build for latest kernel 2024-02-04 17:42:10 +01:00
6381f9443b remove blind bug, as its not a blind bug anymore. 2024-02-04 17:41:57 +01:00
fa7e87b974 remove blind bug, as its not a blind bug anymore.
delayed hopping channels by .2 seconds to give firmware time to get ready for hopping.
2024-02-04 17:41:41 +01:00
cca2ff2da4 Merge pull request #45 from wpa-2/patch-1
MOTD updated
2024-02-03 17:09:03 +01:00
78415b3137 Update 01-motd
Maybe a good idea to point people to the new wiki instead. 


Signed-off-by: wpa-2 <9049886+wpa-2@users.noreply.github.com>
2024-02-03 15:13:44 +00:00
34284aa1bc Change to seemoo-lab nexmon 2024-02-01 13:50:51 +01:00
56ebb60662 Change to seemoo-lab nexmon 2024-02-01 13:26:20 +01:00
84f6624844 Change to seemoo-lab nexmon 2024-02-01 13:04:06 +01:00
3bcbb0ce9a Version 2.8.1 2024-01-29 22:52:16 +01:00
e01e457992 Remove bettercap client settings, so you cannot mess it up. 2024-01-29 22:24:20 +01:00
1780859889 Merge pull request #37 from Ravioli5/patch-1
Update 01-motd
2024-01-29 16:15:12 +01:00
fdd98bb37a Update 01-motd
-fixed grammar (added a word)

Signed-off-by: Ravioli5 <157115073+Ravioli5@users.noreply.github.com>
2024-01-29 13:33:47 +05:30
86991304a5 Merge remote-tracking branch 'origin/dev' into dev 2024-01-28 22:12:20 +01:00
4f62759d6d Revert grid name 2024-01-28 22:12:06 +01:00
7b7ba02aad Changed setup.py 2024-01-28 22:12:06 +01:00
7040be2d30 Testing pcapng fileformat 2024-01-28 22:12:05 +01:00
d0617ccfaf Revert grid name 2024-01-28 22:08:17 +01:00
a0b5078b64 Changed setup.py 2024-01-28 22:05:14 +01:00
54c1ffd63c Updated wiglewifi version to 1.6 2024-01-28 22:02:57 +01:00
7530709d0c Updated wiglewifi version to 1.6 2024-01-28 21:46:50 +01:00
a9a6fd424b Small changes/fixes for debugging 2024-01-28 21:46:22 +01:00
8c97301992 Readability changes for webgpsmap.py 2024-01-28 21:45:53 +01:00
91eaa22188 Fix for waveshare2in13b_V4.py implementation 2024-01-28 21:44:19 +01:00
31a4af4c21 sudo pwnagotchi plugins update
`sudo pwnagotchi plugins list`

Do not work, somehow I forgot to remove a test I did.
2024-01-28 21:44:04 +01:00
dceeaff1fb Next update will be 2.8.0 2024-01-28 21:43:17 +01:00
c0241dc8df Update README.md 2024-01-27 16:11:59 +01:00
8f405f4ab2 Merge pull request #35 from Kal-Toh/patch-1
Update README.md
2024-01-27 16:11:19 +01:00
bd79e71563 Update README.md
This is a small change to address questions I had about the installation process.

Signed-off-by: Rory <104321806+Kal-Toh@users.noreply.github.com>
2024-01-27 14:03:40 +00:00
7f662585aa Merge pull request #34 from findingmoist/master
Update 01-motd
2024-01-27 10:03:24 +01:00
d23ff8d47a Update 01-motd
* Changed face so it shows
* updated python3 version so $_version shows the update number

Signed-off-by: findingmoist <128169791+findingmoist@users.noreply.github.com>
2024-01-26 18:56:40 -05:00
04435229fe Update build for RPi5 2024-01-26 15:28:04 +01:00
42e236bafe Update build for RPi5 2024-01-26 10:45:18 +01:00
5081b72695 Merge remote-tracking branch 'origin/master' 2024-01-25 23:48:49 +01:00
652740f050 Version 2.7.9
Add Esperanzo language
Updated Pt-Br language
Updated Italian language
2024-01-25 23:48:41 +01:00
1b6b12bdf5 Add Esperanzo language
Updated Pt-Br language
Updated Italian language
2024-01-25 23:48:06 +01:00
c610335a34 Add Esperanzo language
Edited Pt-Br language
2024-01-25 22:23:01 +01:00
6c39ed97dd Update build for Pi 5 users
Version 2.7.8
2024-01-25 21:38:04 +01:00
967f1663c6 Update build for Pi 5 users
Version 2.7.8
2024-01-25 17:51:15 +01:00
ffe1e90ccd Update build for Pi 5 users
Version 2.7.8
2024-01-25 17:49:17 +01:00
f2d2bcbfdf Update build for Pi 5 users
Version 2.7.8
2024-01-25 17:30:15 +01:00
bfc0795fb8 Update build for Pi 5 users
Version 2.7.8
2024-01-25 16:31:35 +01:00
1a55afd74a Update build for Pi 5 users
Version 2.7.8
2024-01-25 15:16:33 +01:00
1594e7c129 Update build for Pi 5 users
Version 2.7.8
2024-01-24 15:51:09 +01:00
a244e70a1c Update build for Pi 5 users
Version 2.7.8
2024-01-24 11:00:32 +01:00
d35d5d6c3c Update build for Pi 5 users
Version 2.7.8
2024-01-24 10:51:02 +01:00
7aacf9fb44 Update build for Pi 5 users
Version 2.7.8
2024-01-24 10:24:01 +01:00
dde6fa4c2a Update build for Pi 5 users 2024-01-24 01:47:23 +01:00
7dfb2f2ff6 Update build for Pi 5 users 2024-01-23 14:56:34 +01:00
cf46ab3da9 Removed hashie interval and deprecated functions of hcxpcapngtool. 2024-01-23 14:47:06 +01:00
6824e541a4 Removed hashie interval and deprecated functions of hcxpcapngtool. 2024-01-23 14:40:41 +01:00
1c4e8fa750 Removed hashie interval and deprecated functions of hcxpcapngtool. 2024-01-23 14:36:46 +01:00
a50ec4a65c Removed hashie interval and deprecated functions of hcxpcapngtool. 2024-01-23 14:35:12 +01:00
5414fdf21d Removed hashie interval and deprecated functions of hcxpcapngtool. 2024-01-23 13:29:31 +01:00
c9883bb4f9 Add hcxtools to apt_packages.txt 2024-01-23 12:27:59 +01:00
045f5853bc Test 2024-01-23 12:26:33 +01:00
6dfcaf05d5 Hashie enabled by default 2024-01-23 12:26:00 +01:00
e2f8119d2c Install apt-packages while installing pwnagotchi, if needed 2024-01-23 12:22:30 +01:00
d675b3d0dd Added hcxtools as installed package. 2024-01-23 11:46:50 +01:00
30850b6530 Added hcxtools as installed package. 2024-01-23 11:42:47 +01:00
1e9c9bae42 Added hcxtools as installed package. 2024-01-23 11:38:14 +01:00
64241515ad Added hashie to default plugins, to convert pcaps to a crackable format from the start. 2024-01-23 11:37:34 +01:00
c9f232dae2 Added hashie to default plugins, to convert pcaps to a crackable format from the start. 2024-01-23 11:37:23 +01:00
4f97bcaa83 Moved aircrackonly to default plugins, is also enabled by default. To immediately delete empty handshakes. 2024-01-23 11:25:04 +01:00
7d2a03c79f Changing behaviour when mon_max_blind_epochs is hit, from full reboot to simple restart to save uptime. 2024-01-23 11:13:23 +01:00
f89ba85f73 Couple updated displays from Waveshare, not 213g.
166c012cde
2024-01-23 10:59:25 +01:00
57f03f4359 Removed paw-gps.py, as it is no longer supported. 2024-01-22 23:56:13 +01:00
9bc266f9ff Make wigle, wpa-sec, onlinehashcrack and grid plugins check against main.whitelist instead of their own whitelist. Possibly reduces possibility of errors in config.
https://github.com/jayofelony/pwnagotchi-bookworm/issues/24
2024-01-22 23:29:43 +01:00
b0db0285bc Version 2.7.7 2024-01-22 23:12:59 +01:00
cca3e77d50 Version 2.7.6 2024-01-22 14:25:16 +01:00
4fe603bf5e Small edit to net-pos.py 2024-01-22 12:35:21 +01:00
9a9ee70a78 Fixed wigle plugin 2024-01-22 12:06:20 +01:00
7fc8838f76 2.7.5 2024-01-21 11:43:58 +01:00
94b2ff7047 2.7.5 2024-01-21 11:40:27 +01:00
8edb0fdaa4 2.7.5 2024-01-21 11:33:22 +01:00
b557768159 Fix gdrivesync.py 2024-01-21 11:32:39 +01:00
5a6967eb4d Fix gdrivesync.py 2024-01-21 11:14:17 +01:00
c0c35231cf Fix gdrivesync.py 2024-01-21 11:13:51 +01:00
88362b3354 Version 2.7.4 2024-01-21 00:00:45 +01:00
e50cf04967 Moved self._display = None to base.py for easier debugging display files.
Fixed waveshare2in13g.py
2024-01-20 23:54:32 +01:00
85a64a3914 Merge pull request #23 from Opalinus/master
Repair broken Waveshare213g #22
2024-01-20 23:27:02 +01:00
63d0c20a3e Repair broken Waveshare213g 2024-01-20 20:16:01 +01:00
044639a6d4 Fix 2.7V2 display 2024-01-20 10:23:50 +01:00
7fc2c6b25f Update README.md 2024-01-19 12:25:08 +01:00
c5d5d9bb14 Changed Makefile 2024-01-19 09:04:08 +01:00
129ae92447 Version 2.7.3 2024-01-19 08:51:56 +01:00
2560692ee2 Fixed a mistake on display loading 2024-01-19 08:50:16 +01:00
1424e0d510 Added display waveshare2in66b 2024-01-19 08:43:00 +01:00
2c9eaa436a Added display waveshare2in13g 2024-01-19 08:34:41 +01:00
0c5c6058a5 Added display waveshare2in13g 2024-01-19 07:28:31 +01:00
a3fb39d78c Update README.md 2024-01-18 23:36:25 +01:00
bac62bc4aa Fix for pwnlib 2024-01-17 23:17:48 +01:00
f7a5f2a554 Update build 2024-01-17 21:55:27 +01:00
6921fd14a3 Update Makefile 2024-01-17 20:46:03 +01:00
0dbd611ed5 zramswap 2024-01-17 20:42:28 +01:00
18b9093f70 Version 2.7.2 2024-01-17 20:11:38 +01:00
26913016b9 Changed from dphys-swapfile to zram-tools
Fix on auto-update.py
2024-01-17 19:55:07 +01:00
0786b6757e Changed from dphys-swapfile to zram-tools
Fix on auto-update.py
2024-01-17 19:53:36 +01:00
0f4eda8039 Changed from ext4 to f2fs
Changed from dphys-swapfile to zram-tools
Fix on auto-update.py
2024-01-17 19:51:38 +01:00
1672a35f09 Changed MAC check for whitelist upto last 2 characters. 2024-01-17 18:28:53 +01:00
80e7e6c550 Changed MAC check for whitelist upto last 2 characters. 2024-01-17 18:26:45 +01:00
ca274036ab Version 2.7.1 2024-01-17 18:23:15 +01:00
649e8a4222 Small fixes 2024-01-17 18:22:57 +01:00
63f0a761c1 Added a skip for hostnames/mac addresses on whitelist 2024-01-17 18:22:42 +01:00
8a64918b55 Added Hebrew language 2024-01-16 10:45:47 +01:00
638 changed files with 20019 additions and 9090 deletions

3
.github/FUNDING.yml vendored
View File

@ -1,4 +1,3 @@
# These are supported funding model platforms
patreon: pwnagotchi_torch
github: jayofelony
github: jayofelony

View File

@ -1,36 +0,0 @@
<!--- Provide a general summary of the issue in the Title above -->
## Expected Behaviour
<!--- If you're describing a bug, tell us what should happen -->
<!--- If you're suggesting a change/improvement, tell us how it should work -->
## Current Behaviour
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
<!--- or ideas how to implement the addition or change -->
## Steps to Reproduce (for bugs)
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
## Context
<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Your Environment
- [ ] You're using the official images
- [ ] You're using a raspberry pi 0
- [ ] You're using a supported LCD
<!--- Include as many relevant details about the environment you experienced the bug in -->

63
.github/ISSUE_TEMPLATE.yml vendored Normal file
View File

@ -0,0 +1,63 @@
name: Bug Report
description: File a bug report.
title: "[Bug]: "
labels: ["bug", "triage"]
projects: ["pwnagotchi"]
assignees:
- jayofelony
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
- type: input
id: contact
attributes:
label: Contact Details
description: How can we get in touch with you if we need more info?
placeholder: ex. email@example.com
validations:
required: false
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Tell us what you see!
value: "A bug happened!"
validations:
required: true
- type: dropdown
id: version
attributes:
label: Version
description: What version of our software are you running?
options:
- 2.9.5.2
- 2.9.5.3
default: 0
validations:
required: true
- type: dropdown
id: 3rd-party-hardware
attributes:
label: 3rd Party Hardware
description: Are you using any 3rd party hardware? By selecting "Yes", you agree that you have tested the issue without the 3rd party hardware. And acknowledge that the issue may be related to the 3rd party hardware, for which we cannot provide full support.
options:
- "Yes"
- "No"
default: 1
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/jayofelony/pwnagotchi/blob/noai/CODE_OF_CONDUCT.md).
options:
- label: I agree to follow this project's Code of Conduct
required: true

View File

@ -1,32 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. ...
2. ...
3. ...
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- Pwnagotchi version
- OS version
- Type of hardware
- Any additional hardware used
**Additional context**
Add any other context about the problem here.

63
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@ -0,0 +1,63 @@
name: Bug Report
description: File a bug report.
title: "[Bug]: "
labels: ["bug", "triage"]
projects: ["pwnagotchi"]
assignees:
- jayofelony
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
- type: input
id: contact
attributes:
label: Contact Details
description: How can we get in touch with you if we need more info?
placeholder: ex. email@example.com
validations:
required: false
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Tell us what you see!
value: "A bug happened!"
validations:
required: true
- type: dropdown
id: version
attributes:
label: Version
description: What version of our software are you running?
options:
- 2.9.5.2
- 2.9.5.3
default: 0
validations:
required: true
- type: dropdown
id: 3rd-party-hardware
attributes:
label: 3rd Party Hardware
description: Are you using any 3rd party hardware? By selecting "Yes", you agree that you have tested the issue without the 3rd party hardware. And acknowledge that the issue may be related to the 3rd party hardware, for which we cannot provide full support.
options:
- "Yes"
- "No"
default: 1
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/jayofelony/pwnagotchi/blob/noai/CODE_OF_CONDUCT.md).
options:
- label: I agree to follow this project's Code of Conduct
required: true

59
.github/PULL_REQUEST_TEMPLATE.yml vendored Normal file
View File

@ -0,0 +1,59 @@
name: Pull Request Template
description: Template for submitting pull requests.
body:
- type: markdown
attributes:
value: |
## Description
Provide a detailed description of your changes here.
- type: textarea
id: motivation_and_context
attributes:
label: Motivation and Context
description: Why is this change necessary? What problem does it solve?
placeholder: Add details here. Link to open issues if applicable.
validations:
required: true
- type: checkboxes
id: issue_proposal
attributes:
label: Did you raise an issue for this change? ([required](https://github.com/evilsocket/pwnagotchi/blob/master/CONTRIBUTING.md))
options:
- label: "Yes, I raised an issue."
required: true
- type: textarea
id: testing
attributes:
label: How has this been tested?
description: Provide a detailed description of how your changes were tested.
placeholder: Add details about your testing environment, the tests you ran, and the impact of your changes.
validations:
required: true
- type: checkboxes
id: types_of_changes
attributes:
label: What types of changes does this Pull Request introduce?
options:
- label: "Bug fix (non-breaking change that fixes an issue)"
- label: "New feature (non-breaking change that adds functionality)"
- label: "Breaking change (fix or feature that affects existing functionality)"
validations:
required: true
- type: checkboxes
id: checklist
attributes:
label: Verify the following
options:
- label: "My code follows the code style of this project."
- label: "My change requires a change to the documentation."
- label: "I have updated the documentation accordingly."
- label: "I have read the [CONTRIBUTION](https://github.com/evilsocket/pwnagotchi/blob/master/CONTRIBUTING.md) guide."
- label: "I have signed off my commits with `git commit -s`."
validations:
required: true

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.pyc
.vscode

4
.idea/deployment.xml generated
View File

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PublishConfigData" filePermissions="493" folderPermissions="493" remoteFilesAllowedToDisappearOnAutoupload="false" />
<component name="PublishConfigData" filePermissions="493" folderPermissions="493" remoteFilesAllowedToDisappearOnAutoupload="false" confirmBeforeUploading="false">
<option name="confirmBeforeUploading" value="false" />
</component>
</project>

5
.idea/misc.xml generated
View File

@ -3,5 +3,8 @@
<component name="Black">
<option name="sdkName" value="Python 3.11 (pwnagotchi)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (pwnagotchi-torch-bookworm)" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (pwnagotchi)" project-jdk-type="Python SDK" />
<component name="PythonCompatibilityInspectionAdvertiser">
<option name="version" value="3" />
</component>
</project>

3
.idea/pwnagotchi.iml generated
View File

@ -2,9 +2,10 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.venv" />
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.10 (pwnagotchi-torch-bookworm)" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="Python 3.12 (pwnagotchi)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">

10
.idea/sshConfigs.xml generated Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SshConfigs">
<configs>
<sshConfig authType="PASSWORD" connectionConfig="{&quot;serverAliveInterval&quot;:300}" id="8b69df7d-cec5-421f-8edf-53ed6233f6b6" port="22" customName="pwnagotchi" nameFormat="CUSTOM" useOpenSSHConfig="true">
<option name="customName" value="pwnagotchi" />
</sshConfig>
</configs>
</component>
</project>

14
.idea/webServers.xml generated Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WebServers">
<option name="servers">
<webServer id="cf2a1148-a103-4472-a782-7debdc6dabf9" name="pwnagotchi">
<fileTransfer accessType="SFTP" port="22" sshConfigId="8b69df7d-cec5-421f-8edf-53ed6233f6b6" sshConfig="pwnagotchi">
<advancedOptions>
<advancedOptions dataProtectionLevel="Private" passiveMode="true" shareSSLContext="true" />
</advancedOptions>
</fileTransfer>
</webServer>
</option>
</component>
</project>

View File

@ -1,9 +1,6 @@
exclude *.pyc .DS_Store .gitignore MANIFEST.in
include setup.py
include distribute_setup.py
exclude *.pyc .gitignore MANIFEST.in
include README.md
include LICENSE
recursive-include bin *
recursive-include pwnagotchi *.py
recursive-include pwnagotchi *.yml
recursive-include pwnagotchi *.*

View File

@ -1,32 +1,3 @@
PACKER_VERSION := 1.10.0
PWN_HOSTNAME := pwnagotchi
PWN_VERSION := $(shell cut -d"'" -f2 < pwnagotchi/_version.py)
MACHINE_TYPE := $(shell uname -m)
ifneq (,$(filter x86_64,$(MACHINE_TYPE)))
GOARCH := amd64
else ifneq (,$(filter i686,$(MACHINE_TYPE)))
GOARCH := 386
else ifneq (,$(filter arm64% aarch64%,$(MACHINE_TYPE)))
GOARCH := arm64
else ifneq (,$(filter arm%,$(MACHINE_TYPE)))
GOARCH := arm
else
GOARCH := amd64
$(warning Unable to detect CPU arch from machine type $(MACHINE_TYPE), assuming $(GOARCH))
endif
# The Ansible part of the build can inadvertently change the active hostname of
# the build machine while updating the permanent hostname of the build image.
# If the unshare command is available, use it to create a separate namespace
# so hostname changes won't affect the build machine.
UNSHARE := $(shell command -v unshare)
ifneq (,$(UNSHARE))
UNSHARE := $(UNSHARE) --uts
endif
all: clean image clean
update_langs:
@for lang in pwnagotchi/locale/*/; do\
echo "updating language: $$lang ..."; \
@ -38,31 +9,3 @@ compile_langs:
echo "compiling language: $$lang ..."; \
./scripts/language.sh compile $$(basename $$lang); \
done
PACKER := ~/pwnagotchi/packer
PACKER_URL := https://releases.hashicorp.com/packer/$(PACKER_VERSION)/packer_$(PACKER_VERSION)_linux_$(GOARCH).zip
$(PACKER):
mkdir -p $(@D)
curl -L "$(PACKER_URL)" -o $(PACKER).zip
unzip $(PACKER).zip -d $(@D)
rm $(PACKER).zip
chmod +x $@
SDIST := dist/pwnagotchi-$(PWN_VERSION).tar.gz
$(SDIST): setup.py pwnagotchi
python3 setup.py sdist
# Building the image requires packer, but don't rebuild the image just because packer updated.
pwnagotchi: | $(PACKER)
# If the packer or ansible files are updated, rebuild the image.
pwnagotchi: $(SDIST) builder/pwnagotchi.json.pkr.hcl builder/raspberrypi64.yml $(shell find builder/data -type f)
cd builder && $(PACKER) init pwnagotchi.json.pkr.hcl && sudo $(UNSHARE) $(PACKER) build -var "pwn_hostname=$(PWN_HOSTNAME)" -var "pwn_version=$(PWN_VERSION)" pwnagotchi.json.pkr.hcl
.PHONY: image
image: pwnagotchi
clean:
- rm -rf build dist pwnagotchi.egg-info
- rm -f $(PACKER)

View File

@ -1,58 +1,42 @@
# Pwnagotchi-Torch
<a href="https://github.com/jayofelony/pwnagotchi-bookworm/releases/latest"><img alt="Release" src="https://img.shields.io/github/release/jayofelony/pwnagotchi-bookworm.svg"></a><br/>
**This fork of [Pwnagotchi](https://www.pwnagotchi.ai) is only for 64-bit Raspberry Pi's. Such as the 02W, 3(b+) and 4(b) ~~and the new Raspberry Pi 5~~!!.**
# Pwnagotchi
This is the main source for all forks:
- RPiZeroW (32bit)
- RPiZero2W, RPi3, RPi4, RPi5 (64bit)
It seems the Pi 5 is unable to run in monitor mode, will keep you updated on this.
**For installation docs check out the [wiki](https://github.com/jayofelony/pwnagotchi/wiki)!**
If you are using an older 32-bit version Raspberry Pi, ZeroWH, use this [fork](https://github.com/jayofelony/pwnagotchi-torch/releases/tag/v2.6.4) and make sure you download the `armhf` version.
---
Download latest image file [here](https://github.com/jayofelony/pwnagotchi-bookworm/releases/tag/v2.6.7), and let it auto-update from here on out.
**Use RPi imager to flash, please don't flash a new user as this will mess with logs created.**
SSH credentials are `pi/raspberry`.
# Donations:
I would like to thank
- [findingmoist](https://github.com/findingmoist)
- [kr4k0n](https://github.com/kr4k0n)
for donating!
[Pwnagotchi-Torch](https://www.patreon.com/pwnagotchi_torch)
If you want to sponsor this project you can use GH Sponsor or cryptocurrency:
[GH Sponsor](https://github.com/sponsors/jayofelony)
Or send some ethereum: 0x33ceC4Abe80fDE460a924d596d4dE31Bc0767bb6
**Proudly partnering with [PiSugar](https://www.pisugar.com)!!**
---
[Pwnagotchi](https://pwnagotchi.ai/) is an [A2C](https://hackernoon.com/intuitive-rl-intro-to-advantage-actor-critic-a2c-4ff545978752)-based "AI" leveraging [bettercap](https://www.bettercap.org/) that learns from its surrounding Wi-Fi environment to maximize the crackable WPA key material it captures (either passively, or by performing authentication and association attacks). This material is collected as PCAP files containing any form of handshake supported by [hashcat](https://hashcat.net/hashcat/), including [PMKIDs](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/),
[Pwnagotchi](https://pwnagotchi.org/) is a Raspberry Pi leveraging [bettercap](https://www.bettercap.org/) that survives from its surrounding Wi-Fi environment to maximize the crackable WPA key material it captures (either passively, or by performing authentication and association attacks). This material is collected as PCAP files containing any form of handshake supported by [hashcat](https://hashcat.net/hashcat/), including [PMKIDs](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/),
full and half WPA handshakes.
![ui](https://i.imgur.com/X68GXrn.png)
Instead of merely playing [Super Mario or Atari games](https://becominghuman.ai/getting-mario-back-into-the-gym-setting-up-super-mario-bros-in-openais-gym-8e39a96c1e41?gi=c4b66c3d5ced) like most reinforcement learning-based "AI" *(yawn)*, Pwnagotchi tunes [its parameters](https://github.com/evilsocket/pwnagotchi/blob/master/pwnagotchi/defaults.toml) over time to **get better at pwning Wi-Fi things to** in the environments you expose it to.
The "old" Pwnagotchi used to have AI to help it learn from its environment, but since then AI seemed to destabilize the Wi-Fi firmware. So I have chosen to remove the AI completely to give the Pwnagotchi more up-time and longer battery life when taking it on a walk.
More specifically, Pwnagotchi is using an [LSTM with MLP feature extractor](https://stable-baselines.readthedocs.io/en/master/modules/policies.html#stable_baselines.common.policies.MlpLstmPolicy) as its policy network for the [A2C agent](https://stable-baselines.readthedocs.io/en/master/modules/a2c.html). If you're unfamiliar with A2C, here is [a very good introductory explanation](https://hackernoon.com/intuitive-rl-intro-to-advantage-actor-critic-a2c-4ff545978752) (in comic form!) of the basic principles behind how Pwnagotchi learns. (You can read more about how Pwnagotchi learns in the [Usage](https://www.pwnagotchi.ai/usage/#training-the-ai) doc.)
**Keep in mind:** Unlike the usual RL simulations, Pwnagotchi learns over time. Time for a Pwnagotchi is measured in epochs; a single epoch can last from a few seconds to minutes, depending on how many access points and client stations are visible. Do not expect your Pwnagotchi to perform amazingly well at the very beginning, as it will be [exploring](https://hackernoon.com/intuitive-rl-intro-to-advantage-actor-critic-a2c-4ff545978752) several combinations of [key parameters](https://www.pwnagotchi.ai/usage/#training-the-ai) to determine ideal adjustments for pwning the particular environment you are exposing it to during its beginning epochs ... but ** listen to your Pwnagotchi when it tells you it's boring!** Bring it into novel Wi-Fi environments with you and have it observe new networks and capture new handshakes—and you'll see. :)
Multiple units within close physical proximity can "talk" to each other, advertising their presence to each other by broadcasting custom information elements using a parasite protocol I've built on top of the existing dot11 standard. Over time, two or more units trained together will learn to cooperate upon detecting each other's presence by dividing the available channels among them for optimal pwnage.
Multiple units within close physical proximity can "talk" to each other, advertising their presence to each other by broadcasting custom information elements using a parasite protocol I've built on top of the existing dot11 standard.
## Documentation
https://www.pwnagotchi.ai
https://github.com/jayofelony/pwnagotchi/wiki
https://pwnagotchi.org
## Links
| &nbsp; | Official Links |
|-----------|-------------------------------------------------------------|
| Website | [pwnagotchi.ai](https://pwnagotchi.ai/) |
| Forum | [community.pwnagotchi.ai](https://community.pwnagotchi.ai/) |
| Slack | [pwnagotchi.slack.com](https://invite.pwnagotchi.ai/) |
| Subreddit | [r/pwnagotchi](https://www.reddit.com/r/pwnagotchi/) |
| Twitter | [@pwnagotchi](https://twitter.com/pwnagotchi) |
| &nbsp; | Official Links |
|-----------|----------------------------------------------------------|
| Website | [pwnagotchi.org](https://pwnagotchi.org/) |
| Chat | [discord](https://discord.gg/PGgnzFbz4M) |
| Subreddit | [r/pwnagotchi](https://www.reddit.com/r/pwnagotchi/) |
## License
`pwnagotchi` is made with ♥ by [@evilsocket](https://twitter.com/evilsocket) and the [amazing dev team](https://github.com/evilsocket/pwnagotchi/graphs/contributors). It is released under the GPL3 license.
`pwnagotchi` created by [@evilsocket](https://x.com/evilsocket) and updated by [us](https://github.com/jayofelony/pwnagotchi/graphs/contributors). It is released under the GPL3 license.

View File

@ -1,226 +0,0 @@
#!/usr/bin/python3
import logging
import argparse
import time
import signal
import sys
import toml
import requests
import os
import pwnagotchi
from pwnagotchi import utils
from pwnagotchi.google import cmd as google_cmd
from pwnagotchi.plugins import cmd as plugins_cmd
from pwnagotchi import log
from pwnagotchi import restart
from pwnagotchi import fs
from pwnagotchi.utils import DottedTomlEncoder, parse_version as version_to_tuple
def pwnagotchi_cli():
def do_clear(display):
logging.info("clearing the display ...")
display.clear()
sys.exit(0)
def do_manual_mode(agent):
logging.info("entering manual mode ...")
agent.mode = 'manual'
agent.last_session.parse(agent.view(), args.skip_session)
if not args.skip_session:
logging.info(
"the last session lasted %s (%d completed epochs, trained for %d), average reward:%s (min:%s max:%s)" % (
agent.last_session.duration_human,
agent.last_session.epochs,
agent.last_session.train_epochs,
agent.last_session.avg_reward,
agent.last_session.min_reward,
agent.last_session.max_reward))
while True:
display.on_manual_mode(agent.last_session)
time.sleep(5)
if grid.is_connected():
plugins.on('internet_available', agent)
def do_auto_mode(agent):
logging.info("entering auto mode ...")
agent.mode = 'auto'
agent.start()
while True:
try:
# recon on all channels
agent.recon()
# get nearby access points grouped by channel
channels = agent.get_access_points_by_channel()
# for each channel
for ch, aps in channels:
agent.set_channel(ch)
if not agent.is_stale() and agent.any_activity():
logging.info("%d access points on channel %d" % (len(aps), ch))
# for each ap on this channel
for ap in aps:
# send an association frame in order to get for a PMKID
agent.associate(ap)
# deauth all client stations in order to get a full handshake
for sta in ap['clients']:
agent.deauth(ap, sta)
time.sleep(1) # delay to not trigger nexmon firmware bugs
# An interesting effect of this:
#
# From Pwnagotchi's perspective, the more new access points
# and / or client stations nearby, the longer one epoch of
# its relative time will take ... basically, in Pwnagotchi's universe,
# Wi-Fi electromagnetic fields affect time like gravitational fields
# affect ours ... neat ^_^
agent.next_epoch()
if grid.is_connected():
plugins.on('internet_available', agent)
except Exception as e:
if str(e).find("wifi.interface not set") > 0:
logging.exception(
"main loop exception due to unavailable wifi device, likely programmatically disabled (%s)", e)
logging.info(
"sleeping 60 seconds then advancing to next epoch to allow for cleanup code to trigger")
time.sleep(60)
agent.next_epoch()
else:
logging.exception("main loop exception (%s)", e)
def add_parsers(parser):
"""
Adds the plugins and google subcommands
"""
subparsers = parser.add_subparsers()
# Add parsers from plugins_cmd
plugins_cmd.add_parsers(subparsers)
# Add parsers from google_cmd
google_cmd.add_parsers(subparsers)
parser = argparse.ArgumentParser(prog="pwnagotchi")
# pwnagotchi --help
parser.add_argument('-C', '--config', action='store', dest='config', default='/etc/pwnagotchi/default.toml',
help='Main configuration file.')
parser.add_argument('-U', '--user-config', action='store', dest='user_config', default='/etc/pwnagotchi/config.toml',
help='If this file exists, configuration will be merged and this will override default values.')
parser.add_argument('--manual', dest="do_manual", action="store_true", default=False, help="Manual mode.")
parser.add_argument('--skip-session', dest="skip_session", action="store_true", default=False,
help="Skip last session parsing in manual mode.")
parser.add_argument('--clear', dest="do_clear", action="store_true", default=False,
help="Clear the ePaper display and exit.")
parser.add_argument('--debug', dest="debug", action="store_true", default=False,
help="Enable debug logs.")
parser.add_argument('--version', dest="version", action="store_true", default=False,
help="Print the version.")
parser.add_argument('--print-config', dest="print_config", action="store_true", default=False,
help="Print the configuration.")
# Jayofelony added these
parser.add_argument('--check-update', dest="check_update", action="store_true", default=False,
help="Check for updates on Pwnagotchi. And tells current version.")
parser.add_argument('--donate', dest="donate", action="store_true", default=False,
help="How to donate to this project.")
# pwnagotchi plugins --help
add_parsers(parser)
args = parser.parse_args()
if plugins_cmd.used_plugin_cmd(args):
config = utils.load_config(args)
log.setup_logging(args, config)
rc = plugins_cmd.handle_cmd(args, config)
sys.exit(rc)
if google_cmd.used_google_cmd(args):
config = utils.load_config(args)
log.setup_logging(args, config)
rc = google_cmd.handle_cmd(args)
sys.exit(rc)
if args.version:
print(pwnagotchi.__version__)
sys.exit(0)
if args.donate:
print("Donations can made @ https://www.patreon.com/pwnagotchi_torch \n\nBut only if you really want to!")
sys.exit(0)
if args.check_update:
resp = requests.get("https://api.github.com/repos/jayofelony/pwnagotchi-bookworm/releases/latest")
latest = resp.json()
latest_ver = latest['tag_name'].replace('v', '')
local = version_to_tuple(pwnagotchi.__version__)
remote = version_to_tuple(latest_ver)
if remote > local:
user_input = input("There is a new version available! Update from v%s to v%s?\n[y(es)/n(o)]"
% (pwnagotchi.__version__, latest_ver))
# input validation
if user_input.lower() in ('y', 'yes'):
if os.path.exists('/root/.auto-update'):
os.system("rm /root/.auto-update && systemctl restart pwnagotchi")
os.system("systemctl restart pwnagotchi")
print("Okay, give me a couple minutes. Just watch pwnlog while you wait.")
print("Okay, guess not!")
print("You are currently on the latest release, v%s." % pwnagotchi.__version__)
sys.exit(0)
config = utils.load_config(args)
if args.print_config:
print(toml.dumps(config, encoder=DottedTomlEncoder()))
sys.exit(0)
from pwnagotchi.identity import KeyPair
from pwnagotchi.agent import Agent
from pwnagotchi.ui import fonts
from pwnagotchi.ui.display import Display
from pwnagotchi import grid
from pwnagotchi import plugins
pwnagotchi.config = config
fs.setup_mounts(config)
log.setup_logging(args, config)
fonts.init(config)
pwnagotchi.set_name(config['main']['name'])
plugins.load(config)
display = Display(config=config, state={'name': '%s>' % pwnagotchi.name()})
if args.do_clear:
do_clear(display)
sys.exit(0)
agent = Agent(view=display, config=config, keypair=KeyPair(view=display))
def usr1_handler(*unused):
logging.info('Received USR1 singal. Restart process ...')
restart("MANU" if args.do_manual else "AUTO")
signal.signal(signal.SIGUSR1, usr1_handler)
if args.do_manual:
do_manual_mode(agent)
else:
do_auto_mode(agent)
if __name__ == '__main__':
pwnagotchi_cli()

View File

@ -1,5 +0,0 @@
[main]
plugins=keyfile,ifupdown
[ifupdown]
managed=true

View File

@ -1,36 +0,0 @@
_show_complete()
{
local cur opts node_names all_options opt_line
all_options="
pwnagotchi -h --help -C --config -U --user-config --manual --skip-session --clear --debug --version --print-config --check-update --donate {plugins,google}
pwnagotchi plugins -h --help {list,install,enable,disable,uninstall,update,upgrade}
pwnagotchi plugins list -i --installed -h --help
pwnagotchi plugins install -h --help
pwnagotchi plugins uninstall -h --help
pwnagotchi plugins enable -h --help
pwnagotchi plugins disable -h --help
pwnagotchi plugins update -h --help
pwnagotchi plugins upgrade -h --help
pwnagotchi google -h --help {login,refresh}
pwnagotchi google login -h --help
pwnagotchi google refresh -h --help
"
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
# shellcheck disable=SC2124
cmd="${COMP_WORDS[@]:0:${#COMP_WORDS[@]}-1}"
opt_line="$(grep -m1 "$cmd" <<<"$all_options")"
if [[ ${cur} == -* ]] ; then
opts="$(echo "$opt_line" | tr ' ' '\n' | awk '/^ *-/{gsub("[^a-zA-Z0-9-]","",$1);print $1}')"
# shellcheck disable=SC2207
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
fi
# shellcheck disable=SC2086
opts="$(echo $opt_line | grep -Po '{\K[^}]+' | tr ',' '\n')"
# shellcheck disable=SC2207
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
}
complete -F _show_complete pwnagotchi

View File

@ -1,26 +0,0 @@
# /etc/dphys-swapfile - user settings for dphys-swapfile package
# author Neil Franklin, last modification 2010.05.05
# copyright ETH Zuerich Physics Departement
# use under either modified/non-advertising BSD or GPL license
# this file is sourced with . so full normal sh syntax applies
# the default settings are added as commented out CONF_*=* lines
# where we want the swapfile to be, this is the default
#CONF_SWAPFILE=/var/swap
# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=2048
# set size to computed value, this times RAM size, dynamically adapts,
# guarantees that there is enough swap without wasting disk space on excess
#CONF_SWAPFACTOR=2
# restrict size (computed and absolute!) to maximally this limit
# can be set to empty for no limit, but beware of filled partitions!
# this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
# but is also sensible on 64bit to prevent filling /var or even / partition
#CONF_MAXSWAP=2048

View File

@ -1,2 +0,0 @@
allow-hotplug eth0
iface eth0 inet dhcp

View File

@ -1,2 +0,0 @@
auto lo
iface lo inet loopback

View File

@ -1,8 +0,0 @@
allow-hotplug usb0
iface usb0 inet static
address 10.0.0.2
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
gateway 10.0.0.1
metric 101

View File

@ -1,2 +0,0 @@
allow-hotplug wlan0
iface wlan0 inet static

View File

@ -1,13 +0,0 @@
[Unit]
Description=bettercap api.rest service.
Documentation=https://bettercap.org
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/bin/bettercap-launcher
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target

View File

@ -1,19 +0,0 @@
[Unit]
Description=pwnagotchi Deep Reinforcement Learning instrumenting bettercap for WiFI pwning.
Documentation=https://pwnagotchi.ai
Wants=network.target
After=pwngrid-peer.service
[Service]
Type=simple
WorkingDirectory=~
ExecStart=/usr/bin/pwnagotchi-launcher
Restart=always
RestartSec=30
TasksMax=infinity
LimitNPROC=infinity
StandardOutput=null
StandardError=null
[Install]
WantedBy=multi-user.target

View File

@ -1,16 +0,0 @@
[Unit]
Description=pwngrid peer service.
Documentation=https://pwnagotchi.ai
Wants=network.target
After=bettercap.service
[Service]
Environment=LD_PRELOAD=/usr/local/lib/libpcap.so.1
Environment=LD_LIBRARY_PATH=/usr/local/lib
Type=simple
ExecStart=/usr/local/bin/pwngrid -keys /etc/pwnagotchi -peers /root/peers -address 127.0.0.1:8666 -client-token /root/.api-enrollment.json -wait -log /home/pi/logs/pwngrid-peer.log -iface wlan0mon
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target

View File

@ -1,33 +0,0 @@
#!/bin/sh
_hostname=$(hostname)
_version=$(cut -d"'" -f2 < /usr/local/lib/python3.9/dist-packages/pwnagotchi/_version.py)
echo
echo "(◕‿‿◕) $_hostname"
echo
echo " Hi! I'm a pwnagotchi $_version, please take good care of me!"
echo " Here are some basic things you need to know to raise me properly!"
echo
echo " If you want to change my configuration, use /etc/pwnagotchi/config.toml"
echo " All plugin config files are located in /etc/pwnagotchi/conf.d/"
echo " Read the readme if you want to use gdrivesync plugin!!"
echo
echo " All the configuration options can be found on /etc/pwnagotchi/default.toml,"
echo " but don't change this file because I will recreate it every time I'm restarted!"
echo
echo " I use oPwnGrid as my main API, you can check stats at https://opwngrid.xyz"
echo
echo " I'm managed by systemd. Here are some basic commands."
echo
echo " If you want to know what I'm doing, you can check my logs with the command"
echo " - pwnlog"
echo " - sudo pwnagotchi --version, to check the current version"
echo " - sudo pwnagotchi --donate, to see how you can donate to this project"
echo " - sudo pwnagotchi --check-update, to see if there is a new version available"
echo
echo " If you want to know if I'm running, you can use"
echo " sudo systemctl status pwnagotchi"
echo
echo " You can restart me using"
echo " pwnkill"
echo
echo " You learn more about me at https://pwnagotchi.ai/"

View File

@ -1,15 +0,0 @@
client_config_backend: file
client_config_file: /root/client_secrets.json
client_config:
client_id: <YOUR CLIENT ID>
client_secret: <YOUR CLIENT SECRET>
save_credentials: True
save_credentials_backend: file
save_credentials_file: /root/credentials.json
get_refresh_token: True
oauth_scope:
- https://www.googleapis.com/auth/drive
- https://www.googleapis.com/auth/drive.install

View File

@ -1,28 +0,0 @@
#!/usr/bin/env bash
source /usr/bin/pwnlib
# we need to decrypt something
if is_crypted_mode; then
while ! is_decrypted; do
echo "Waiting for decryption..."
sleep 1
done
fi
# check if wifi driver is bugged
if ! check_brcm; then
if ! reload_brcm; then
echo "Could not reload wifi driver. Reboot"
reboot
fi
sleep 10
fi
# start mon0
start_monitor_interface
if is_auto_mode_no_delete; then
/usr/local/bin/bettercap -no-colors -caplet pwnagotchi-auto -iface wlan0mon
else
/usr/local/bin/bettercap -no-colors -caplet pwnagotchi-manual -iface wlan0mon
fi

View File

@ -1,148 +0,0 @@
#!/usr/bin/env python3
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import parse_qsl
_HTML_FORM_TEMPLATE = """
<!DOCTYPE html>
<html>
<head>
<title>Decryption</title>
<style>
body {{ text-align: center; padding: 150px; }}
h1 {{ font-size: 50px; }}
body {{ font: 20px Helvetica, sans-serif; color: #333; }}
article {{ display: block; text-align: center; width: 650px; margin: 0 auto;}}
input {{
padding: 12px 20px;
margin: 8px 0;
box-sizing: border-box;
border: 1px solid #ccc;
}}
input[type=password] {{
width: 75%;
font-size: 24px;
}}
input[type=submit] {{
cursor: pointer;
width: 75%;
}}
input[type=submit]:hover {{
background-color: #d9d9d9;
}}
</style>
</head>
<body>
<article>
<h1>Decryption</h1>
<p>Some of your files are encrypted.</p>
<p>Please provide the decryption password.</p>
<div>
<form action="/set-password" method="POST">
{password_fields}
<input type="submit" value="Submit">
</form>
</div>
</article>
</body>
</html>
"""
POST_RESPONSE = """
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
/* Center the loader */
#loader {
position: absolute;
left: 50%;
top: 50%;
z-index: 1;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #3498db;
width: 120px;
height: 120px;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
}
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
#myDiv {
display: none;
text-align: center;
}
</style>
<script type="text/javascript">
function checkPwnagotchi() {
var target = 'http://' + document.location.hostname + ':8080/';
var xhr = new XMLHttpRequest();
xhr.open('GET', target);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200 || xhr.status == 401) {
window.location.replace(target);
}else{
setTimeout(checkPwnagotchi, 1000);
}
}
};
xhr.send();
}
setTimeout(checkPwnagotchi, 1000);
</script>
</head>
<body style="margin:0;">
<div id="loader"></div>
</body>
</html>
"""
HTML_FORM = None
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(HTML_FORM.encode())
def do_POST(self):
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
for mapping, password in parse_qsl(body.decode('UTF-8')):
with open('/tmp/.pwnagotchi-secret-{}'.format(mapping), 'wt') as pwfile:
pwfile.write(password)
self.send_response(200)
self.end_headers()
self.wfile.write(POST_RESPONSE.encode())
with open('/root/.pwnagotchi-crypted') as crypted_file:
mappings = [line.split()[0] for line in crypted_file.readlines()]
fields = ''.join(['<label for="{m}">Passphrase for {m}:</label>\n<input type="password" id="{m}" name="{m}" value=""><br>'.format(m=m)
for m in mappings])
HTML_FORM = _HTML_FORM_TEMPLATE.format(password_fields=fields)
httpd = HTTPServer(('0.0.0.0', 80), SimpleHTTPRequestHandler)
httpd.serve_forever()

View File

@ -1,2 +0,0 @@
#!/usr/bin/env bash
sudo /usr/bin/tvservice -o

View File

@ -1,2 +0,0 @@
#!/usr/bin/env bash
sudo /usr/bin/tvservice -p

View File

@ -1,3 +0,0 @@
#!/usr/bin/env bash
source /usr/bin/pwnlib
start_monitor_interface

View File

@ -1,3 +0,0 @@
#!/usr/bin/env bash
source /usr/bin/pwnlib
stop_monitor_interface

View File

@ -1,16 +0,0 @@
#!/usr/bin/env bash
source /usr/bin/pwnlib
# we need to decrypt something
if is_crypted_mode; then
while ! is_decrypted; do
echo "Waiting for decryption..."
sleep 1
done
fi
if is_auto_mode; then
/usr/local/bin/pwnagotchi
else
/usr/local/bin/pwnagotchi --manual
fi

View File

@ -1,199 +0,0 @@
#!/usr/bin/env bash
# well ... it blinks the led
blink_led() {
# shellcheck disable=SC2034
for i in $(seq 1 "$1"); do
echo 0 >/sys/class/leds/led0/brightness
sleep 0.3
echo 1 >/sys/class/leds/led0/brightness
sleep 0.3
done
echo 0 >/sys/class/leds/led0/brightness
sleep 0.3
}
# check if brcm is stuck
check_brcm() {
if [[ "$(journalctl -n10 -k --since -5m | grep -c 'brcmf_cfg80211_nexmon_set_channel.*Set Channel failed')" -ge 5 ]]; then
return 1
fi
return 0
}
# reload mod
reload_brcm() {
if ! modprobe -r brcmfmac; then
return 1
fi
sleep 1
if ! modprobe brcmfmac; then
return 1
fi
sleep 2
iw dev wlan0 set power_save off
return 0
}
# starts mon0
start_monitor_interface() {
rfkill unblock all
ifconfig wlan0 up
sleep 3
iw dev wlan0 set power_save off
iw phy "$(iw phy | head -1 | cut -d" " -f2)" interface add wlan0mon type monitor
sleep 2
rfkill unblock all
ifconfig wlan0 down
ifconfig wlan0mon up
iw dev wlan0mon set power_save off
}
# stops mon0
stop_monitor_interface() {
ifconfig wlan0mon down && iw dev wlan0mon del
reload_brcm
ifconfig wlan0 up
}
# returns 0 if the specificed network interface is up
is_interface_up() {
if grep -qi 'up' /sys/class/net/"$1"/operstate; then
return 0
fi
return 1
}
# returns 0 if conditions for AUTO mode are met
is_auto_mode() {
# check override file first
if [ -f /root/.pwnagotchi-manual ]; then
# remove the override file if found
rm -rf /root/.pwnagotchi-manual
return 1
fi
# check override file first
if [ -f /root/.pwnagotchi-auto ]; then
# remove the override file if found
rm -rf /root/.pwnagotchi-auto
return 0
fi
# if usb0 is up, we're in MANU
if is_interface_up usb0; then
return 1
fi
# if eth0 is up (for other boards), we're in MANU
if is_interface_up eth0; then
return 0
fi
# no override, but none of the interfaces is up -> AUTO
return 0
}
# returns 0 if conditions for AUTO mode are met
is_auto_mode_no_delete() {
# check override file first
if [ -f /root/.pwnagotchi-manual ]; then
return 1
fi
# check override file first
if [ -f /root/.pwnagotchi-auto ]; then
return 0
fi
# if usb0 is up, we're in MANU
if is_interface_up usb0; then
return 1
fi
# if eth0 is up (for other boards), we're in MANU
if is_interface_up eth0; then
return 0
fi
# no override, but none of the interfaces is up -> AUTO
return 0
}
# check if we need to decrypt something
is_crypted_mode() {
if [ -f /root/.pwnagotchi-crypted ]; then
return 0
fi
return 1
}
# decryption loop
is_decrypted() {
while read -r mapping container mount; do
# mapping = name the device or file will be mapped to
# container = the luks encrypted device or file
# mount = the mountpoint
# fail if not mounted
if ! mountpoint -q "$mount" >/dev/null 2>&1; then
if [ -f /tmp/.pwnagotchi-secret-"$mapping" ]; then
</tmp/.pwnagotchi-secret-"$mapping" read -r SECRET
if ! test -b /dev/disk/by-id/dm-uuid-*"$(cryptsetup luksUUID "$container" | tr -d -)"*; then
if echo -n "$SECRET" | cryptsetup luksOpen -d- "$container" "$mapping" >/dev/null 2>&1; then
echo "Container decrypted!"
fi
fi
if mount /dev/mapper/"$mapping" "$mount" >/dev/null 2>&1; then
echo "Mounted /dev/mapper/$mapping to $mount"
continue
fi
fi
if ! ip -4 addr show wlan0 | grep inet >/dev/null 2>&1; then
>/dev/null 2>&1 ip addr add 192.168.0.10/24 dev wlan0
fi
if ! pgrep -f decryption-webserver >/dev/null 2>&1; then
>/dev/null 2>&1 decryption-webserver &
fi
if ! pgrep wpa_supplicant >/dev/null 2>&1; then
>/tmp/wpa_supplicant.conf cat <<EOF
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
ap_scan=2
network={
ssid="DECRYPT-ME"
mode=2
key_mgmt=WPA-PSK
psk="pwnagotchi"
frequency=2437
}
EOF
>/dev/null 2>&1 wpa_supplicant -u -s -O -D nl80211 -i wlan0 -c /tmp/wpa_supplicant.conf &
fi
if ! pgrep dnsmasq >/dev/null 2>&1; then
>/dev/null 2>&1 dnsmasq -k -p 53 -h -O "6,192.168.0.10" -A "/#/192.168.0.10" -i wlan0 -K -F 192.168.0.50,192.168.0.60,255.255.255.0,24h &
fi
return 1
fi
done </root/.pwnagotchi-crypted
# overwrite passwords
python3 -c 'print("A"*4096)' | tee /tmp/.pwnagotchi-secret-* >/dev/null
# delete
rm /tmp/.pwnagotchi-secret-*
sync # flush
pkill wpa_supplicant
pkill dnsmasq
pid="$(pgrep -f "decryption-webserver")"
[[ -n "$pid" ]] && kill "$pid"
return 0
}

View File

@ -1,101 +0,0 @@
# This is not working quite yet
# https://github.com/mkaczanowski/packer-builder-arm/pull/172
packer {
required_plugins {
#arm = {
# version = "~> 1"
# source = "github.com/cdecoux/builder-arm"
#}
ansible = {
source = "github.com/hashicorp/ansible"
version = "~> 1"
}
}
}
variable "pwn_hostname" {
type = string
}
variable "pwn_version" {
type = string
}
source "arm" "rpi64-pwnagotchi" {
file_checksum_url = "https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-12-11/2023-12-11-raspios-bookworm-arm64-lite.img.xz.sha256"
file_urls = ["https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-12-11/2023-12-11-raspios-bookworm-arm64-lite.img.xz"]
file_checksum_type = "sha256"
file_target_extension = "xz"
file_unarchive_cmd = ["unxz", "$ARCHIVE_PATH"]
image_path = "../../../pwnagotchi-rpi-bookworm-${var.pwn_version}-arm64.img"
qemu_binary_source_path = "/usr/bin/qemu-aarch64-static"
qemu_binary_destination_path = "/usr/bin/qemu-aarch64-static"
image_build_method = "resize"
image_size = "9G"
image_type = "dos"
image_partitions {
name = "boot"
type = "c"
start_sector = "8192"
filesystem = "fat"
size = "256M"
mountpoint = "/boot/firmware"
}
image_partitions {
name = "root"
type = "83"
start_sector = "532480"
filesystem = "ext4"
size = "0"
mountpoint = "/"
}
}
# a build block invokes sources and runs provisioning steps on them. The
# documentation for build blocks can be found here:
# https://www.packer.io/docs/from-1.5/blocks/build
build {
name = "Raspberry Pi 64 Pwnagotchi"
sources = ["source.arm.rpi64-pwnagotchi"]
provisioner "file" {
destination = "/usr/bin/"
sources = [
"data/usr/bin/bettercap-launcher",
"data/usr/bin/hdmioff",
"data/usr/bin/hdmion",
"data/usr/bin/monstart",
"data/usr/bin/monstop",
"data/usr/bin/pwnagotchi-launcher",
"data/usr/bin/pwnlib",
]
}
provisioner "shell" {
inline = ["chmod +x /usr/bin/*"]
}
provisioner "file" {
destination = "/etc/systemd/system/"
sources = [
"data/etc/systemd/system/bettercap.service",
"data/etc/systemd/system/pwnagotchi.service",
"data/etc/systemd/system/pwngrid-peer.service",
]
}
provisioner "file" {
destination = "/etc/update-motd.d/01-motd"
source = "data/etc/update-motd.d/01-motd"
}
provisioner "shell" {
inline = ["chmod +x /etc/update-motd.d/*"]
}
provisioner "shell" {
inline = ["apt-get -y --allow-releaseinfo-change update", "apt-get -y dist-upgrade", "apt-get install -y --no-install-recommends ansible"]
}
provisioner "ansible-local" {
command = "ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 PWN_VERSION=${var.pwn_version} PWN_HOSTNAME=${var.pwn_hostname} ansible-playbook"
extra_arguments = ["--extra-vars \"ansible_python_interpreter=/usr/bin/python3\""]
playbook_file = "raspberrypi64.yml"
}
}

View File

@ -1,619 +0,0 @@
---
- hosts:
- 127.0.0.1
gather_facts: true
become: true
vars:
kernel:
min: "6.1"
full: "6.1.0-rpi7-rpi-v8"
pwnagotchi:
hostname: "{{ lookup('env', 'PWN_HOSTNAME') | default('pwnagotchi', true) }}"
version: "{{ lookup('env', 'PWN_VERSION') | default('pwnagotchi-torch', true) }}"
system:
boot_options:
- "dtoverlay=dwc2"
- "dtoverlay=spi1-3cs"
- "dtparam=i2c1=on"
- "dtparam=i2c_arm=on"
- "dtparam=spi=on"
- "gpu_mem=16"
modules:
- "i2c-dev"
services:
enable:
- bettercap.service
- dphys-swapfile.service
- fstrim.timer
- pwnagotchi.service
- pwngrid-peer.service
disable:
- apt-daily-upgrade.service
- apt-daily-upgrade.timer
- apt-daily.service
- apt-daily.timer
- avahi-daemon.service
- avahi-daemon.socket
- bluetooth.service
- ifup@wlan0.service
- triggerhappy.service
- wpa_supplicant.service
packages:
caplets:
source: "https://github.com/jayofelony/caplets.git"
bettercap:
source: "https://github.com/jayofelony/bettercap.git"
url: "https://github.com/jayofelony/bettercap/releases/download/2.32.2/bettercap-2.32.2.zip"
ui: "https://github.com/bettercap/ui/releases/download/v1.3.0/ui.zip"
pwngrid:
source: "https://github.com/jayofelony/pwngrid.git"
url: "https://github.com/jayofelony/pwngrid/releases/download/v1.10.5/pwngrid-1.10.5-aarch64.zip"
apt:
downgrade:
- libpcap-dev_1.9.1-4_arm64.deb
- libpcap0.8-dbg_1.9.1-4_arm64.deb
- libpcap0.8-dev_1.9.1-4_arm64.deb
- libpcap0.8_1.9.1-4_arm64.deb
hold:
- libpcap-dev
- libpcap0.8
- libpcap0.8-dev
- libpcap0.8-dbg
remove:
- avahi-daemon
- nfs-common
- triggerhappy
- wpasupplicant
install:
- aircrack-ng
- autoconf
- bc
- bison
- bluez
- build-essential
- curl
- dkms
- dphys-swapfile
- fbi
- flex
- fonts-dejavu
- fonts-dejavu-core
- fonts-dejavu-extra
- fonts-freefont-ttf
- g++
- gawk
- gcc-arm-none-eabi
- git
- libatlas-base-dev
- libavcodec59
- libavformat59
- libblas-dev
- libbluetooth-dev
- libbz2-dev
- libc-ares-dev
- libc6-dev
- libcap-dev
- libdbus-1-dev
- libdbus-glib-1-dev
- libeigen3-dev
- libelf-dev
- libffi-dev
- libfl-dev
- libfuse-dev
- libgdbm-dev
- libgl1-mesa-glx
- libgmp3-dev
- libgstreamer1.0-0
- libhdf5-dev
- liblapack-dev
- libncursesw5-dev
- libnetfilter-queue-dev
- libopenblas-dev
- libopenjp2-7
- libopenmpi-dev
- libopenmpi3
- libpcap-dev
- libraspberrypi-bin
- libraspberrypi-dev
- libraspberrypi-doc
- libraspberrypi0
- libsqlite3-dev
- libssl-dev
- libswscale5
- libtiff6
- libtool
- libusb-1.0-0-dev
- lsof
- make
- python3-yaml
- python3-dbus
- python3-flask
- python3-flask-cors
- python3-flaskext.wtf
- python3-gast
- python3-pil
- python3-pycryptodome
- python3-requests
- python3-scapy
- python3-smbus2
- python3-spidev
- python3-tweepy
- python3-werkzeug
- firmware-atheros
- firmware-brcm80211
- firmware-libertas
- firmware-misc-nonfree
- firmware-realtek
- python3-pip
- python3-setuptools
- python3-smbus
- qpdf
- raspberrypi-kernel-headers
- rsync
- screen
- tcpdump
- texinfo
- time
- tk-dev
- unzip
- vim
- wget
- wl
- xxd
- zlib1g-dev
environment:
ARCHFLAGS: "-arch aarch64"
QEMU_UNAME: "{{ kernel.full }}"
tasks:
- name: Create pi user
copy:
dest: /boot/firmware/userconf
content: |
pi:$6$3jNr0GA9KIyt4hmM$efeVIopdMQ8DGgEPCWWlbx3mJJNAYci1lEXGdlky0xPyjqwKNbwTL5SrCcpb4144C4IvzWjn7Iv.QjqmU7iyT/
- name: change hostname
lineinfile:
dest: /etc/hostname
regexp: '^raspberrypi'
line: "{{pwnagotchi.hostname}}"
state: present
when: lookup('file', '/etc/hostname') == "raspberrypi"
register: hostname
- name: add hostname to /etc/hosts
lineinfile:
dest: /etc/hosts
regexp: '^127\.0\.1\.1[ \t]+raspberrypi'
line: "127.0.1.1\t{{pwnagotchi.hostname}}"
state: present
when: hostname.changed
- name: disable sap plugin for bluetooth.service
lineinfile:
dest: /lib/systemd/system/bluetooth.service
regexp: '^ExecStart=/usr/libexec/bluetooth/bluetoothd$'
line: 'ExecStart=/usr/libexec/bluetooth/bluetoothd --noplugin=sap,a2dp'
state: present
- name: configure dphys-swapfile
lineinfile:
path: /etc/dphys-swapfile
regexp: "^CONF_SWAPSIZE=.*$"
line: "CONF_SWAPSIZE=2048"
- name: install packages
apt:
name: "{{ packages.apt.install }}"
state: present
update_cache: yes
install_recommends: false
###########################################
#
# libpcap v1.9 - build from source
#
###########################################
# check for presence, then it can re-run in later parts if needed
# use the "make" built in
# install libpcap before bettercap and pwngrid, so they use it
- name: clone libpcap v1.9 from github
git:
repo: 'https://github.com/the-tcpdump-group/libpcap.git'
dest: /usr/local/src/libpcap
version: libpcap-1.9
- name: build and install libpcap into /usr/local/lib
shell: "./configure && make && make install"
args:
executable: /bin/bash
chdir: /usr/local/src/libpcap
- name: remove libpcap build folder
file:
state: absent
path: /usr/local/src/libpcap
- name: create symlink /usr/local/lib/libpcap.so.1.9.1
file:
src: /usr/local/lib/libpcap.so.1.9.1
dest: /usr/local/lib/libpcap.so.0.8
state: link
# Install nexmon to fix wireless scanning (takes 2.5G of space)
- name: clone nexmon repository
git:
repo: https://github.com/DrSchottky/nexmon.git
dest: /usr/local/src/nexmon
- name: make firmware
shell: "source ./setup_env.sh && make"
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
- name: make firmware patch (bcm43455c0)
shell: "source ./setup_env.sh && cd /usr/local/src/nexmon/patches/bcm43455c0/7_45_206/nexmon/ && make"
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
- name: install new firmware (bcm43455c0)
copy:
src: /usr/local/src/nexmon/patches/bcm43455c0/7_45_206/nexmon/brcmfmac43455-sdio.bin
dest: /usr/lib/firmware/brcm/brcmfmac43455-sdio.bin
follow: true
- name: make firmware patch (bcm43436b0)
shell: "source ./setup_env.sh && cd /usr/local/src/nexmon/patches/bcm43436b0/9_88_4_65/nexmon/ && make"
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
- name: install new firmware (bcm43436b0)
copy:
src: /usr/local/src/nexmon/patches/bcm43436b0/9_88_4_65/nexmon/brcmfmac43436-sdio.bin
dest: /usr/lib/firmware/brcm/brcmfmac43436-sdio.bin
follow: true
- name: make firmware patch (bcm43430a1)
shell: "source ./setup_env.sh && cd /usr/local/src/nexmon/patches/bcm43430a1/7_45_41_46/nexmon/ && make"
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
- name: install new firmware (bcm43430a1)
copy:
src: /usr/local/src/nexmon/patches/bcm43430a1/7_45_41_46/nexmon/brcmfmac43430-sdio.bin
dest: /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin
follow: true
- name: copy 43430-sdio as 43436s-sdio for the special 43430/1 /2
copy:
src: /usr/lib/firmware/brcm/brcmfmac43430-sdio.bin
dest: /usr/lib/firmware/brcm/brcmfmac43436s-sdio.bin
follow: true
# delete blob files that make nexmon sad
- name: Delete the firmware blob files to avoid some nexmon crashing
file:
state: absent
path: '{{ item }}'
loop:
- /usr/lib/firmware/brcm/brcmfmac43430-sdio.clm_blob
- /usr/lib/firmware/brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.clm_blob
- /usr/lib/firmware/brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.clm_blob
- /usr/lib/firmware/brcm/brcmfmac43430b0-sdio.raspberrypi,model-zero-2-w.clm_blob
- /usr/lib/firmware/brcm/brcmfmac43436-sdio.clm_blob
- /usr/lib/firmware/brcm/brcmfmac43436-sdio.raspberrypi,model-zero-2-w.clm_blob
- /usr/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob
- name: backup original driver
command: "mv /usr/lib/modules/{{ kernel.full }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz /usr/lib/modules/{{ kernel.full }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz.orig"
- name: copy modified driver
copy:
src: "/usr/local/src/nexmon/patches/driver/brcmfmac_{{ kernel.min }}.y-nexmon/brcmfmac.ko"
dest: "/usr/lib/modules/{{ kernel.full }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko"
- name : load brcmfmac drivers
command: "/sbin/depmod -a"
# To shrink the final image, remove the nexmon directory (takes 2.5G of space) post build and installation
- name: Delete nexmon content & directory
file:
state: absent
path: /usr/local/src/nexmon/
- name: Create custom plugin directory
file:
path: /usr/local/share/pwnagotchi/custom-plugins/
state: directory
- name: Create custom config directory
file:
path: /etc/pwnagotchi/conf.d/
state: directory
- name: clone pwnagotchi repository
git:
repo: https://github.com/jayofelony/pwnagotchi-bookworm.git
dest: /usr/local/src/pwnagotchi
- name: build pwnagotchi wheel
command: "pip3 install . --no-cache-dir --break-system-packages"
args:
chdir: /usr/local/src/pwnagotchi
- name: remove pwnagotchi folder
file:
state: absent
path: /usr/local/src/pwnagotchi
- name: create /usr/local/share/pwnagotchi/ folder
file:
path: /usr/local/share/pwnagotchi/
state: directory
- name: Install go-1.21
unarchive:
src: https://go.dev/dl/go1.21.5.linux-arm64.tar.gz
dest: /usr/local
remote_src: yes
register: golang
- name: Update .bashrc for go-1.21
blockinfile:
dest: /home/pi/.bashrc
state: present
block: |
export GOPATH=$HOME/go
export PATH=/usr/local/go/bin:$PATH:$GOPATH/bin
when: golang.changed
- name: download pwngrid
git:
repo: "{{ packages.pwngrid.source }}"
dest: /usr/local/src/pwngrid
- name: install pwngrid
shell: "export GOPATH=$HOME/go && export PATH=/usr/local/go/bin:$PATH:$GOPATH/bin && go mod tidy && make && make install"
args:
executable: /bin/bash
chdir: /usr/local/src/pwngrid
- name: remove pwngrid folder
file:
state: absent
path: /usr/local/src/pwngrid
- name: download bettercap
git:
repo: "{{ packages.bettercap.source }}"
dest: /usr/local/src/bettercap
- name: install bettercap 2.32.2
shell: "export GOPATH=$HOME/go && export PATH=/usr/local/go/bin:$PATH:$GOPATH/bin && go mod tidy && make && make install"
args:
executable: /bin/bash
chdir: /usr/local/src/bettercap
- name: remove bettercap folder
file:
state: absent
path: /usr/local/src/bettercap
#- name: download and install bettercap
# unarchive:
# src: "{{ packages.bettercap.url }}"
# dest: /usr/local/bin
# remote_src: yes
# exclude:
# - README.md
# - LICENSE.md
# mode: 0755
- name: clone bettercap caplets
git:
repo: "{{ packages.caplets.source }}"
dest: /tmp/caplets
register: capletsgit
- name: install bettercap caplets
make:
chdir: /tmp/caplets
target: install
when: capletsgit.changed
- name: download and install bettercap ui
unarchive:
src: "{{ packages.bettercap.ui }}"
dest: /usr/local/share/bettercap/
remote_src: yes
mode: 0755
# to always have the bettercap webui available (because why not?)
- name: copy pwnagotchi-manual over pwnagotchi-auto caplet
ansible.builtin.copy:
src: /usr/local/share/bettercap/caplets/pwnagotchi-manual.cap
dest: /usr/local/share/bettercap/caplets/pwnagotchi-auto.cap
force: true
ignore_errors: true
- name: create /etc/pwnagotchi folder
file:
path: /etc/pwnagotchi
state: directory
- name: create log folder
file:
path: /home/pi/logs
state: directory
- name: check if user configuration exists
stat:
path: /etc/pwnagotchi/config.toml
register: user_config
- name: create /etc/pwnagotchi/config.toml
copy:
dest: /etc/pwnagotchi/config.toml
content: |
# Add your configuration overrides on this file any configuration changes done to default.toml will be lost!
# Example:
# ui.display.enabled = true
# ui.display.type = "waveshare_2"
when: not user_config.stat.exists
- name: Delete motd
file:
state: absent
path: /etc/motd
- name: Delete motd 10-uname
file:
state: absent
path: /etc/update-motd.d/10-uname
- name: enable ssh on boot
file:
path: /boot/firmware/ssh
state: touch
- name: adjust /boot/config.txt
lineinfile:
dest: /boot/firmware/config.txt
insertafter: EOF
line: '{{ item }}'
with_items: "{{ system.boot_options }}"
- name: adjust /etc/modules
lineinfile:
dest: /etc/modules
insertafter: EOF
line: '{{ item }}'
with_items: "{{ system.modules }}"
- name: change root partition
replace:
dest: /boot/firmware/cmdline.txt
backup: no
regexp: "root=PARTUUID=[a-zA-Z0-9\\-]+"
replace: "root=/dev/mmcblk0p2"
- name: configure /boot/cmdline.txt
lineinfile:
path: /boot/cmdline.txt
backrefs: True
state: present
backup: no
regexp: '(.*)$'
line: '\1 modules-load=dwc2,g_ether'
- name: Add pwnlog alias
lineinfile:
dest: /home/pi/.bashrc
line: "\nalias pwnlog='tail -f -n300 /home/pi/logs/pwn*.log | sed --unbuffered \"s/,[[:digit:]]\\{3\\}\\]//g\" | cut -d \" \" -f 2-'"
insertafter: EOF
- name: Add pwnver alias
lineinfile:
dest: /home/pi/.bashrc
line: "\nalias pwnver='python3 -c \"import pwnagotchi as p; print(p.__version__)\"'"
insertafter: EOF
- name: Add pwnkill alias to restart pwnagotchi with a signal
lineinfile:
dest: /home/pi/.bashrc
line: "\nalias pwnkill='sudo killall -USR1 pwnagotchi'"
insertafter: EOF
- name: add firmware packages to hold
dpkg_selections:
name: "{{ item }}"
selection: hold
with_items: "{{ packages.apt.hold }}"
- name: disable unnecessary services
systemd:
name: "{{ item }}"
state: stopped
enabled: no
with_items: "{{ services.disable }}"
- name: enable services
systemd:
name: "{{ item }}"
enabled: true
state: stopped
with_items: "{{ services.enable }}"
register: enabled
- name: make /root readable, becauase that's where all the files are
file:
path: /root
mode: '755'
- name: fix permissions on /home/pi
file:
path: /home/pi
owner: pi
group: pi
recurse: true
- name: remove unnecessary apt packages
apt:
name: "{{ packages.apt.remove }}"
state: absent
purge: yes
register: removed
- name: clean apt cache
apt:
autoclean: true
when: removed.changed
- name: remove pre-collected packages zip
file:
path: /root/go_pkgs.tgz
state: absent
- name: remove /root/go folder
file:
state: absent
path: /root/go
- name: remove /usr/local/go folder
file:
state: absent
path: /usr/local/go
- name: remove pip cache
file:
state: absent
path: /root/.cache/pip
- name: remove dependencies that are no longer required
apt:
autoremove: yes
when: removed.changed
- name: remove ssh keys
file:
state: absent
path: "{{ item }}"
with_fileglob:
- "/etc/ssh/ssh_host*_key*"
- name: regenerate ssh keys
shell: "dpkg-reconfigure openssh-server"
args:
executable: /bin/bash
handlers:
- name: reload systemd services
systemd:
daemon_reload: yes
when: enabled.changed

View File

@ -9,7 +9,6 @@ _name = None
config = None
_cpu_stats = {}
def set_name(new_name):
if new_name is None:
return

View File

@ -1 +1 @@
__version__ = '2.7.0'
__version__ = '2.9.5.4'

View File

@ -4,7 +4,9 @@ import os
import re
import logging
import asyncio
import _thread
#import _thread
import threading
import subprocess
import pwnagotchi
import pwnagotchi.utils as utils
@ -14,24 +16,22 @@ from pwnagotchi.automata import Automata
from pwnagotchi.log import LastSession
from pwnagotchi.bettercap import Client
from pwnagotchi.mesh.utils import AsyncAdvertiser
from pwnagotchi.ai.train import AsyncTrainer
RECOVERY_DATA_FILE = '/root/.pwnagotchi-recovery'
class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
class Agent(Client, Automata, AsyncAdvertiser):
def __init__(self, view, config, keypair):
Client.__init__(self, config['bettercap']['hostname'],
config['bettercap']['scheme'],
config['bettercap']['port'],
config['bettercap']['username'],
config['bettercap']['password'])
Client.__init__(self,
"127.0.0.1" if "hostname" not in config['bettercap'] else config['bettercap']['hostname'],
"http" if "scheme" not in config['bettercap'] else config['bettercap']['scheme'],
8081 if "port" not in config['bettercap'] else config['bettercap']['port'],
"pwnagotchi" if "username" not in config['bettercap'] else config['bettercap']['username'],
"pwnagotchi" if "password" not in config['bettercap'] else config['bettercap']['password'])
Automata.__init__(self, config, view)
AsyncAdvertiser.__init__(self, config, view, keypair)
AsyncTrainer.__init__(self, config)
self._started_at = time.time()
self._filter = None if not config['main']['filter'] else re.compile(config['main']['filter'])
self._current_channel = 0
self._tot_aps = 0
self._aps_on_channel = 0
@ -129,7 +129,6 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
time.sleep(1)
def start(self):
self.start_ai()
self._wait_bettercap()
self.setup_events()
self.set_starting()
@ -164,11 +163,6 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
self.wait_for(recon_time, sleeping=False)
def _filter_included(self, ap):
return self._filter is None or \
self._filter.match(ap['hostname']) is not None or \
self._filter.match(ap['mac']) is not None
def set_access_points(self, aps):
self._access_points = aps
plugins.on('wifi_update', self, aps)
@ -184,13 +178,12 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
for ap in s['wifi']['aps']:
if ap['encryption'] == '' or ap['encryption'] == 'OPEN':
continue
elif ap['hostname'] not in whitelist \
and ap['mac'].lower() not in whitelist \
and ap['mac'][:8].lower() not in whitelist:
if self._filter_included(ap):
aps.append(ap)
elif ap['hostname'] in whitelist or ap['mac'][:13].lower() in whitelist or ap['mac'].lower() in whitelist:
continue
else:
aps.append(ap)
except Exception as e:
logging.exception("Error while getting acces points (%s)", e)
logging.exception("Error while getting access points (%s)", e)
aps.sort(key=lambda ap: ap['channel'])
return self.set_access_points(aps)
@ -260,7 +253,7 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
txt = '%d (%d)' % (len(self._handshakes), tot)
if self._last_pwnd is not None:
txt += ' [%s]' % self._last_pwnd[:11] # So it doesn't overlap with fix_brcmfmac_plugin
txt += ' [%s]' % self._last_pwnd
self._view.set('shakes', txt)
@ -275,6 +268,10 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
self._save_recovery_data()
pwnagotchi.reboot()
def _restart(self, mode='AUTO'):
self._save_recovery_data()
pwnagotchi.restart(mode)
def _save_recovery_data(self):
logging.warning("writing recovery data to %s ...", RECOVERY_DATA_FILE)
with open(RECOVERY_DATA_FILE, 'w') as fp:
@ -306,7 +303,8 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
raise
def start_session_fetcher(self):
_thread.start_new_thread(self._fetch_stats, ())
#_thread.start_new_thread(self._fetch_stats, ())
threading.Thread(target=self._fetch_stats, args=(), name="Session Fetcher", daemon=True).start()
def _fetch_stats(self):
while True:
@ -389,7 +387,8 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
def start_event_polling(self):
# start a thread and pass in the mainloop
_thread.start_new_thread(self._event_poller, (asyncio.get_event_loop(),))
#_thread.start_new_thread(self._event_poller, (asyncio.get_event_loop(),))
threading.Thread(target=self._event_poller, args=(asyncio.get_event_loop(),), name="Event Polling", daemon=True).start()
def is_module_running(self, module):
s = self.session()
@ -427,7 +426,6 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
if self.is_stale():
logging.debug("recon is stale, skipping assoc(%s)", ap['mac'])
return
if throttle == -1 and "throttle_a" in self._config['personality']:
throttle = self._config['personality']['throttle_a']

View File

@ -1,67 +0,0 @@
import os
import time
import logging
# https://stackoverflow.com/questions/40426502/is-there-a-way-to-suppress-the-messages-tensorflow-prints/40426709
# os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # or any {'0', '1', '2'}
def load(config, agent, epoch, from_disk=True):
config = config['ai']
if not config['enabled']:
logging.info("ai disabled")
return False
try:
begin = time.time()
logging.info("[AI] bootstrapping dependencies ...")
start = time.time()
SB_BACKEND = "stable_baselines3"
from stable_baselines3 import A2C
logging.debug("[AI] A2C imported in %.2fs" % (time.time() - start))
start = time.time()
from stable_baselines3.a2c import MlpPolicy
logging.debug("[AI] MlpPolicy imported in %.2fs" % (time.time() - start))
SB_A2C_POLICY = MlpPolicy
start = time.time()
from stable_baselines3.common.vec_env import DummyVecEnv
logging.debug("[AI] DummyVecEnv imported in %.2fs" % (time.time() - start))
start = time.time()
import pwnagotchi.ai.gym as wrappers
logging.debug("[AI] gym wrapper imported in %.2fs" % (time.time() - start))
env = wrappers.Environment(agent, epoch)
env = DummyVecEnv([lambda: env])
logging.info("[AI] creating model ...")
start = time.time()
a2c = A2C(SB_A2C_POLICY, env, **config['params'])
logging.debug("[AI] A2C created in %.2fs" % (time.time() - start))
if from_disk and os.path.exists(config['path']):
logging.info("[AI] loading %s ..." % config['path'])
start = time.time()
a2c.load(config['path'], env)
logging.debug("[AI] A2C loaded in %.2fs" % (time.time() - start))
else:
logging.info("[AI] model created:")
for key, value in config['params'].items():
logging.info(" %s: %s" % (key, value))
logging.debug("[AI] total loading time is %.2fs" % (time.time() - begin))
return a2c
except Exception as e:
logging.exception("[AI] error while starting AI (%s)", e)
logging.info("[AI] Deleting brain and restarting.")
os.system("rm /root/brain.nn && service pwnagotchi restart")
logging.warning("[AI] AI not loaded!")
return False

View File

@ -1,61 +0,0 @@
import numpy as np
import pwnagotchi.mesh.wifi as wifi
MAX_EPOCH_DURATION = 1024
histogram_size = wifi.NumChannels
shape = (1,
# aps per channel
histogram_size +
# clients per channel
histogram_size +
# peers per channel
histogram_size +
# duration
1 +
# inactive
1 +
# active
1 +
# missed
1 +
# hops
1 +
# deauths
1 +
# assocs
1 +
# handshakes
1)
def featurize(state, step):
tot_epochs = step + 1e-10
tot_interactions = (state['num_deauths'] + state['num_associations']) + 1e-10
return np.concatenate((
# aps per channel
state['aps_histogram'],
# clients per channel
state['sta_histogram'],
# peers per channel
state['peers_histogram'],
# duration
[np.clip(state['duration_secs'] / MAX_EPOCH_DURATION, 0.0, 1.0)],
# inactive
[state['inactive_for_epochs'] / tot_epochs],
# active
[state['active_for_epochs'] / tot_epochs],
# missed
[state['missed_interactions'] / tot_interactions],
# hops
[state['num_hops'] / wifi.NumChannels],
# deauths
[state['num_deauths'] / tot_interactions],
# assocs
[state['num_associations'] / tot_interactions],
# handshakes
[state['num_handshakes'] / tot_interactions],
))

View File

@ -1,148 +0,0 @@
import logging
import gym
from gym import spaces
import numpy as np
import pwnagotchi.ai.featurizer as featurizer
import pwnagotchi.ai.reward as reward
from pwnagotchi.ai.parameter import Parameter
class Environment(gym.Env):
render_mode = "human"
metadata = {'render_modes': ['human']}
params = [
Parameter('min_rssi', min_value=-200, max_value=-50),
Parameter('ap_ttl', min_value=30, max_value=600),
Parameter('sta_ttl', min_value=60, max_value=300),
Parameter('recon_time', min_value=5, max_value=60),
Parameter('max_inactive_scale', min_value=3, max_value=10),
Parameter('recon_inactive_multiplier', min_value=1, max_value=3),
Parameter('hop_recon_time', min_value=5, max_value=60),
Parameter('min_recon_time', min_value=1, max_value=30),
Parameter('max_interactions', min_value=1, max_value=25),
Parameter('max_misses_for_recon', min_value=3, max_value=10),
Parameter('excited_num_epochs', min_value=5, max_value=30),
Parameter('bored_num_epochs', min_value=5, max_value=30),
Parameter('sad_num_epochs', min_value=5, max_value=30),
]
def __init__(self, agent, epoch):
super(Environment, self).__init__()
self._agent = agent
self._epoch = epoch
self._epoch_num = 0
self._last_render = None
channels = agent.supported_channels()
Environment.params += [
Parameter('_channel_%d' % ch, min_value=0, max_value=1, meta=ch + 1) for ch in
range(featurizer.histogram_size) if ch + 1 in channels
]
self.last = {
'reward': 0.0,
'observation': None,
'policy': None,
'params': {},
'state': None,
'state_v': None
}
self.action_space = spaces.MultiDiscrete([p.space_size() for p in Environment.params if p.trainable])
self.observation_space = spaces.Box(low=0, high=1, shape=featurizer.shape, dtype=np.float32)
self.reward_range = reward.range
@staticmethod
def policy_size():
return len(list(p for p in Environment.params if p.trainable))
@staticmethod
def policy_to_params(policy):
num = len(policy)
params = {}
assert len(Environment.params) == num
channels = []
for i in range(num):
param = Environment.params[i]
if '_channel' not in param.name:
params[param.name] = param.to_param_value(policy[i])
else:
has_chan = param.to_param_value(policy[i])
# print("%s policy:%s bool:%s" % (param.name, policy[i], has_chan))
chan = param.meta
if has_chan:
channels.append(chan)
params['channels'] = channels
return params
def _next_epoch(self):
logging.debug("[ai] waiting for epoch to finish ...")
return self._epoch.wait_for_epoch_data()
def _apply_policy(self, policy):
new_params = Environment.policy_to_params(policy)
self.last['policy'] = policy
self.last['params'] = new_params
self._agent.on_ai_policy(new_params)
def step(self, policy):
# create the parameters from the policy and update
# them in the algorithm
self._apply_policy(policy)
self._epoch_num += 1
# wait for the algorithm to run with the new parameters
state = self._next_epoch()
self.last['reward'] = state['reward']
self.last['state'] = state
self.last['state_v'] = featurizer.featurize(state, self._epoch_num)
self._agent.on_ai_step()
return self.last['state_v'], self.last['reward'], not self._agent.is_training(), {}
def reset(self):
# logging.info("[ai] resetting environment ...")
self._epoch_num = 0
state = self._next_epoch()
self.last['state'] = state
self.last['state_v'] = featurizer.featurize(state, 1)
return self.last['state_v']
def _render_histogram(self, hist):
for ch in range(featurizer.histogram_size):
if hist[ch]:
logging.info(" CH %d: %s" % (ch + 1, hist[ch]))
def render(self, mode='human', close=False, force=False):
# when using a vectorialized environment, render gets called twice
# avoid rendering the same data
if self._last_render == self._epoch_num:
return
if not self._agent.is_training() and not force:
return
self._last_render = self._epoch_num
logging.info("[AI] --- training epoch %d/%d ---" % (self._epoch_num, self._agent.training_epochs()))
logging.info("[AI] REWARD: %f" % self.last['reward'])
logging.debug(
"[AI] policy: %s" % ', '.join("%s:%s" % (name, value) for name, value in self.last['params'].items()))
logging.info("[AI] observation:")
for name, value in self.last['state'].items():
if 'histogram' in name:
logging.info(" %s" % name.replace('_histogram', ''))
self._render_histogram(value)

View File

@ -1,30 +0,0 @@
from gym import spaces
class Parameter(object):
def __init__(self, name, value=0.0, min_value=0, max_value=2, meta=None, trainable=True):
self.name = name
self.trainable = trainable
self.meta = meta
self.value = value
self.min_value = min_value
self.max_value = max_value + 1
# gymnasium.space.Discrete is within [0, 1, 2, ..., n-1]
if self.min_value < 0:
self.scale_factor = abs(self.min_value)
elif self.min_value > 0:
self.scale_factor = -self.min_value
else:
self.scale_factor = 0
def space_size(self):
return self.max_value + self.scale_factor
def space(self):
return spaces.Discrete(self.max_value + self.scale_factor)
def to_param_value(self, policy_v):
self.value = policy_v - self.scale_factor
assert self.min_value <= self.value <= self.max_value
return int(self.value)

View File

@ -1,27 +1,28 @@
import pwnagotchi.mesh.wifi as wifi
range = (-.7, 1.02)
fuck_zero = 1e-20
range: tuple[float, float] = (-.7, 1.02)
fuck_zero: float = 1e-20
class RewardFunction(object):
def __call__(self, epoch_n, state):
tot_epochs = epoch_n + fuck_zero
tot_interactions = max(state['num_deauths'] + state['num_associations'], state['num_handshakes']) + fuck_zero
tot_channels = wifi.NumChannels
def __call__(self, epoch_n: float, state: dict[str, float]) -> float:
h = state['num_handshakes'] / tot_interactions
a = .2 * (state['active_for_epochs'] / tot_epochs)
c = .1 * (state['num_hops'] / tot_channels)
tot_epochs: float = epoch_n + fuck_zero
tot_interactions: float = max(state['num_deauths'] + state['num_associations'], state['num_handshakes']) + fuck_zero
tot_channels: int = wifi.NumChannels
b = -.3 * (state['blind_for_epochs'] / tot_epochs)
m = -.3 * (state['missed_interactions'] / tot_interactions)
i = -.2 * (state['inactive_for_epochs'] / tot_epochs)
h: float = state['num_handshakes'] / tot_interactions
a: float = .2 * (state['active_for_epochs'] / tot_epochs)
c: float = .1 * (state['num_hops'] / tot_channels)
b: float = -.3 * (state['blind_for_epochs'] / tot_epochs)
m: float = -.3 * (state['missed_interactions'] / tot_interactions)
i: float = -.2 * (state['inactive_for_epochs'] / tot_epochs)
# include emotions if state >= 5 epochs
_sad = state['sad_for_epochs'] if state['sad_for_epochs'] >= 5 else 0
_bored = state['bored_for_epochs'] if state['bored_for_epochs'] >= 5 else 0
s = -.2 * (_sad / tot_epochs)
l = -.1 * (_bored / tot_epochs)
_sad: float = state['sad_for_epochs'] if state['sad_for_epochs'] >= 5 else 0
_bored: float = state['bored_for_epochs'] if state['bored_for_epochs'] >= 5 else 0
s: float = -.2 * (_sad / tot_epochs)
l: float = -.1 * (_bored / tot_epochs)
return h + a + c + b + i + m + s + l

View File

@ -1,197 +0,0 @@
import _thread
import threading
import time
import random
import os
import json
import logging
import pwnagotchi.plugins as plugins
import pwnagotchi.ai as ai
class Stats(object):
def __init__(self, path, events_receiver):
self._lock = threading.Lock()
self._receiver = events_receiver
self.path = path
self.born_at = time.time()
# total epochs lived (trained + just eval)
self.epochs_lived = 0
# total training epochs
self.epochs_trained = 0
self.worst_reward = 0.0
self.best_reward = 0.0
self.load()
def on_epoch(self, data, training):
best_r = False
worst_r = False
with self._lock:
reward = data['reward']
if reward < self.worst_reward:
self.worst_reward = reward
worst_r = True
elif reward > self.best_reward:
best_r = True
self.best_reward = reward
self.epochs_lived += 1
if training:
self.epochs_trained += 1
self.save()
if best_r:
self._receiver.on_ai_best_reward(reward)
elif worst_r:
self._receiver.on_ai_worst_reward(reward)
def load(self):
with self._lock:
if os.path.exists(self.path) and os.path.getsize(self.path) > 0:
logging.info("[AI] loading %s" % self.path)
with open(self.path, 'rt') as fp:
obj = json.load(fp)
self.born_at = obj['born_at']
self.epochs_lived, self.epochs_trained = obj['epochs_lived'], obj['epochs_trained']
self.best_reward, self.worst_reward = obj['rewards']['best'], obj['rewards']['worst']
def save(self):
with self._lock:
logging.info("[AI] saving %s" % self.path)
data = json.dumps({
'born_at': self.born_at,
'epochs_lived': self.epochs_lived,
'epochs_trained': self.epochs_trained,
'rewards': {
'best': self.best_reward,
'worst': self.worst_reward
}
})
temp = "%s.tmp" % self.path
back = "%s.bak" % self.path
with open(temp, 'wt') as fp:
fp.write(data)
if os.path.isfile(self.path):
os.replace(self.path, back)
os.replace(temp, self.path)
class AsyncTrainer(object):
def __init__(self, config):
self._config = config
self._model = None
self._is_training = False
self._training_epochs = 0
self._nn_path = self._config['ai']['path']
self._stats = Stats("%s.json" % os.path.splitext(self._nn_path)[0], self)
def set_training(self, training, for_epochs=0):
self._is_training = training
self._training_epochs = for_epochs
if training:
plugins.on('ai_training_start', self, for_epochs)
else:
plugins.on('ai_training_end', self)
def is_training(self):
return self._is_training
def training_epochs(self):
return self._training_epochs
def start_ai(self):
_thread.start_new_thread(self._ai_worker, ())
def _save_ai(self):
logging.info("[AI] saving model to %s ..." % self._nn_path)
temp = "%s.tmp" % self._nn_path
self._model.save(temp)
os.replace(temp, self._nn_path)
def on_ai_step(self):
self._model.env.render()
if self._is_training:
self._save_ai()
self._stats.on_epoch(self._epoch.data(), self._is_training)
def on_ai_training_step(self, _locals, _globals):
self._model.env.render()
plugins.on('ai_training_step', self, _locals, _globals)
def on_ai_policy(self, new_params):
plugins.on('ai_policy', self, new_params)
logging.info("[AI] setting new policy:")
for name, value in new_params.items():
if name in self._config['personality']:
curr_value = self._config['personality'][name]
if curr_value != value:
logging.info("[AI] ! %s: %s -> %s" % (name, curr_value, value))
self._config['personality'][name] = value
else:
logging.error("[AI] param %s not in personality configuration!" % name)
self.run('set wifi.ap.ttl %d' % self._config['personality']['ap_ttl'])
self.run('set wifi.sta.ttl %d' % self._config['personality']['sta_ttl'])
self.run('set wifi.rssi.min %d' % self._config['personality']['min_rssi'])
def on_ai_ready(self):
self._view.on_ai_ready()
plugins.on('ai_ready', self)
def on_ai_best_reward(self, r):
logging.info("[AI] best reward so far: %s" % r)
self._view.on_motivated(r)
plugins.on('ai_best_reward', self, r)
def on_ai_worst_reward(self, r):
logging.info("[AI] worst reward so far: %s" % r)
self._view.on_demotivated(r)
plugins.on('ai_worst_reward', self, r)
def _ai_worker(self):
self._model = ai.load(self._config, self, self._epoch)
if self._model:
self.on_ai_ready()
epochs_per_episode = self._config['ai']['epochs_per_episode']
obs = None
while True:
self._model.env.render()
# enter in training mode?
if random.random() > self._config['ai']['laziness']:
logging.info("[AI] learning for %d epochs ..." % epochs_per_episode)
try:
self.set_training(True, epochs_per_episode)
# back up brain file before starting new training set
if os.path.isfile(self._nn_path):
back = "%s.bak" % self._nn_path
os.replace(self._nn_path, back)
self._view.set("mode", " AI")
self._model.learn(total_timesteps=epochs_per_episode, callback=self.on_ai_training_step)
except Exception as e:
logging.exception("[AI] error while training (%s)", e)
finally:
self.set_training(False)
obs = self._model.env.reset()
# init the first time
elif obs is None:
obs = self._model.env.reset()
# run the inference
action, _ = self._model.predict(obs)
obs, _, _, _ = self._model.env.step(action)

View File

@ -1,16 +0,0 @@
import numpy as np
def normalize(v, min_v, max_v):
return (v - min_v) / (max_v - min_v)
def as_batches(x, y, batch_size, shuffle=True):
x_size = len(x)
assert x_size == len(y)
indices = np.random.permutation(x_size) if shuffle else None
for offset in range(0, x_size - batch_size + 1, batch_size):
excerpt = indices[offset:offset + batch_size] if shuffle else slice(offset, offset + batch_size)
yield x[excerpt], y[excerpt]

View File

@ -2,6 +2,7 @@ import logging
import pwnagotchi.plugins as plugins
from pwnagotchi.ai.epoch import Epoch
import os
# basic mood system
@ -136,8 +137,7 @@ class Automata(object):
self.set_grateful()
plugins.on('epoch', self, self._epoch.epoch - 1, self._epoch.data())
if self._epoch.blind_for >= self._config['main']['mon_max_blind_epochs']:
logging.critical("%d epochs without visible access points -> rebooting ...", self._epoch.blind_for)
self._reboot()
logging.critical("%d epochs without visible access points -> restarting ...", self._epoch.blind_for)
self._restart()
self._epoch.blind_for = 0

View File

@ -100,7 +100,6 @@ class Client(object):
await asyncio.sleep(sleep_time)
continue
except OSError:
sleep_time = min_sleep + max_sleep * random.random()
logging.warning('connection to the bettercap endpoint failed...')
pwnagotchi.restart("AUTO")

348
pwnagotchi/cli.py Normal file
View File

@ -0,0 +1,348 @@
import logging
import argparse
import time
import signal
import sys
import tomlkit
import requests
import os
import re
import pwnagotchi
from pwnagotchi import utils
from pwnagotchi.google import cmd as google_cmd
from pwnagotchi.plugins import cmd as plugins_cmd
from pwnagotchi import log
from pwnagotchi import fs
from pwnagotchi.utils import parse_version as version_to_tuple
def pwnagotchi_cli():
def do_clear(display):
logging.info("clearing the display ...")
display.clear()
sys.exit(0)
def do_manual_mode(agent):
logging.info("entering manual mode ...")
agent.mode = 'manual'
agent.last_session.parse(agent.view(), args.skip_session)
if not args.skip_session:
logging.info(
"the last session lasted %s (%d completed epochs, trained for %d), average reward:%s (min:%s max:%s)" % (
agent.last_session.duration_human,
agent.last_session.epochs,
agent.last_session.train_epochs,
agent.last_session.avg_reward,
agent.last_session.min_reward,
agent.last_session.max_reward))
while True:
display.on_manual_mode(agent.last_session)
time.sleep(5)
if grid.is_connected():
plugins.on('internet_available', agent)
def do_auto_mode(agent):
logging.info("entering auto mode ...")
agent.mode = 'auto'
agent.last_session.parse(agent.view(), args.skip_session) # show stats in AUTO
agent.start()
while True:
try:
# recon on all channels
agent.recon()
# get nearby access points grouped by channel
channels = agent.get_access_points_by_channel()
# for each channel
for ch, aps in channels:
time.sleep(1)
agent.set_channel(ch)
if not agent.is_stale() and agent.any_activity():
logging.info("%d access points on channel %d" % (len(aps), ch))
# for each ap on this channel
for ap in aps:
# send an association frame in order to get for a PMKID
agent.associate(ap)
# deauth all client stations in order to get a full handshake
for sta in ap['clients']:
agent.deauth(ap, sta)
time.sleep(1) # delay to not trigger nexmon firmware bugs
# An interesting effect of this:
#
# From Pwnagotchi's perspective, the more new access points
# and / or client stations nearby, the longer one epoch of
# its relative time will take ... basically, in Pwnagotchi's universe,
# Wi-Fi electromagnetic fields affect time like gravitational fields
# affect ours ... neat ^_^
agent.next_epoch()
if grid.is_connected():
plugins.on('internet_available', agent)
except Exception as e:
if str(e).find("wifi.interface not set") > 0:
logging.exception("main loop exception due to unavailable wifi device, likely programmatically disabled (%s)", e)
logging.info("sleeping 60 seconds then advancing to next epoch to allow for cleanup code to trigger")
time.sleep(60)
agent.next_epoch()
else:
logging.exception("main loop exception (%s)", e)
def add_parsers(parser):
"""
Adds the plugins and google subcommands
"""
subparsers = parser.add_subparsers()
# Add parsers from plugins_cmd
plugins_cmd.add_parsers(subparsers)
# Add parsers from google_cmd
google_cmd.add_parsers(subparsers)
parser = argparse.ArgumentParser(prog="pwnagotchi")
# pwnagotchi --help
parser.add_argument('-C', '--config', action='store', dest='config', default='/etc/pwnagotchi/default.toml',
help='Main configuration file.')
parser.add_argument('-U', '--user-config', action='store', dest='user_config', default='/etc/pwnagotchi/config.toml',
help='If this file exists, configuration will be merged and this will override default values.')
parser.add_argument('--manual', dest="do_manual", action="store_true", default=False, help="Manual mode.")
parser.add_argument('--skip-session', dest="skip_session", action="store_true", default=False,
help="Skip last session parsing in manual mode.")
parser.add_argument('--clear', dest="do_clear", action="store_true", default=False,
help="Clear the ePaper display and exit.")
parser.add_argument('--debug', dest="debug", action="store_true", default=False,
help="Enable debug logs.")
parser.add_argument('--version', dest="version", action="store_true", default=False,
help="Print the version.")
parser.add_argument('--print-config', dest="print_config", action="store_true", default=False,
help="Print the configuration.")
# Jayofelony added these
parser.add_argument('--wizard', dest="wizard", action="store_true", default=False,
help="Interactive installation of your personal configuration.")
parser.add_argument('--check-update', dest="check_update", action="store_true", default=False,
help="Check for updates on Pwnagotchi. And tells current version.")
parser.add_argument('--donate', dest="donate", action="store_true", default=False,
help="How to donate to this project.")
# pwnagotchi plugins --help
add_parsers(parser)
args = parser.parse_args()
if plugins_cmd.used_plugin_cmd(args):
config = utils.load_config(args)
log.setup_logging(args, config)
rc = plugins_cmd.handle_cmd(args, config)
sys.exit(rc)
if google_cmd.used_google_cmd(args):
config = utils.load_config(args)
log.setup_logging(args, config)
rc = google_cmd.handle_cmd(args)
sys.exit(rc)
if args.version:
print(pwnagotchi.__version__)
sys.exit(0)
if args.wizard:
def is_valid_hostname(hostname):
if len(hostname) > 255:
return False
if hostname[-1] == ".":
hostname = hostname[:-1] # strip exactly one dot from the right, if present
allowed = re.compile("(?!-)[A-Z\d-]{1,63}(?<!-)$", re.IGNORECASE)
return all(allowed.match(x) for x in hostname.split("."))
pwn_restore = input("Do you want to restore the previous configuration?\n\n"
"[Y/N]: ")
if pwn_restore in ('y', 'yes'):
os.system("cp -f /etc/pwnagotchi/config.toml.bak /etc/pwnagotchi/config.toml")
print("Your previous configuration is restored, and I will restart in 5 seconds.")
time.sleep(5)
os.system("service pwnagotchi restart")
else:
pwn_check = input("This will create a new configuration file and overwrite your current backup, are you sure?\n\n"
"[Y/N]: ")
if pwn_check.lower() in ('y', 'yes'):
os.system("mv -f /etc/pwnagotchi/config.toml /etc/pwnagotchi/config.toml.bak")
with open("/etc/pwnagotchi/config.toml", "a+") as f:
f.write("# Do not edit this file if you do not know what you are doing!!!\n\n")
# Set pwnagotchi name
print("Welcome to the interactive installation of your personal Pwnagotchi configuration!\n"
"My name is Jayofelony, how may I call you?\n\n")
pwn_name = input("Pwnagotchi name (no spaces): ")
if pwn_name == "":
pwn_name = "Pwnagotchi"
print("I shall go by Pwnagotchi from now on!")
pwn_name = (f"[main]\n"
f"name = \"{pwn_name}\"\n")
f.write(pwn_name)
else:
if is_valid_hostname(pwn_name):
print(f"I shall go by {pwn_name} from now on!")
pwn_name = (f"[main]\n"
f"name = \"{pwn_name}\"\n")
f.write(pwn_name)
else:
print("You have chosen an invalid name. Please start over.")
exit()
pwn_whitelist = input("How many networks do you want to whitelist? "
"We will also ask a MAC for each network?\n"
"Each SSID and BSSID count as 1 network. \n\n"
"Be sure to use digits as your answer.\n\n"
"Amount of networks: ")
if int(pwn_whitelist) > 0:
f.write("whitelist = [\n")
for x in range(int(pwn_whitelist)):
ssid = input("SSID (Name): ")
bssid = input("BSSID (MAC): ")
f.write(f"\t\"{ssid}\",\n")
if bssid != "":
f.write(f"\t\"{bssid}\",\n")
f.write("]\n")
# set bluetooth tether
pwn_bluetooth = input("Do you want to enable BT-Tether?\n\n"
"[Y/N] ")
if pwn_bluetooth.lower() in ('y', 'yes'):
f.write("[main.plugins.bt-tether]\n"
"enabled = true\n\n")
pwn_bluetooth_phone_name = input("What name uses your phone, check settings?\n\n")
if pwn_bluetooth_phone_name != "":
f.write(f"phone-name = \"{pwn_bluetooth_phone_name}\"\n")
pwn_bluetooth_device = input("What device do you use? android or ios?\n\n"
"Device: ")
if pwn_bluetooth_device != "":
if pwn_bluetooth_device != "android" and pwn_bluetooth_device != "ios":
print("You have chosen an invalid device. Please start over.")
exit()
f.write(f"phone = \"{pwn_bluetooth_device.lower()}\"\n")
if pwn_bluetooth_device == "android":
f.write("ip = \"192.168.44.44\"\n")
elif pwn_bluetooth_device == "ios":
f.write("ip = \"172.20.10.6\"\n")
pwn_bluetooth_mac = input("What is the bluetooth MAC of your device?\n\n"
"MAC: ")
if pwn_bluetooth_mac != "":
f.write(f"mac = \"{pwn_bluetooth_mac}\"\n")
# set up display settings
pwn_display_enabled = input("Do you want to enable a display?\n\n"
"[Y/N]: ")
if pwn_display_enabled.lower() in ('y', 'yes'):
f.write("[ui.display]\n"
"enabled = true\n")
pwn_display_type = input("What display do you use?\n\n"
"Be sure to check for the correct display type @ \n"
"https://github.com/jayofelony/pwnagotchi/blob/master/pwnagotchi/utils.py#L240-L501\n\n"
"Display type: ")
if pwn_display_type != "":
f.write(f"type = \"{pwn_display_type}\"\n")
pwn_display_invert = input("Do you want to invert the display colors?\n"
"N = Black background\n"
"Y = White background\n\n"
"[Y/N]: ")
if pwn_display_invert.lower() in ('y', 'yes'):
f.write("[ui]\n"
"invert = true\n")
f.close()
if pwn_bluetooth.lower() in ('y', 'yes'):
if pwn_bluetooth_device.lower == "android":
print("To visit the webui when connected with your phone, visit: http://192.168.44.44:8080\n"
"Be sure to run `sudo bluetoothctl` to set-up the bluetooth connection for the first time. And read the wiki step 4.\n"
"Your configuration is done, and I will restart in 5 seconds.")
elif pwn_bluetooth_device.lower == "ios":
print("To visit the webui when connected with your phone, visit: http://172.20.10.6:8080\n"
"Your configuration is done, and I will restart in 5 seconds.")
else:
print("Your configuration is done, and I will restart in 5 seconds.")
time.sleep(5)
os.system("service pwnagotchi restart")
else:
print("Ok, doing nothing.")
sys.exit(0)
if args.donate:
print("Donations can be made @ \n "
"https://github.com/sponsors/jayofelony \n\n"
"But only if you really want to!")
sys.exit(0)
if args.check_update:
resp = requests.get("https://api.github.com/repos/jayofelony/pwnagotchi/releases/latest")
latest = resp.json()
latest_ver = latest['tag_name'].replace('v', '')
local = version_to_tuple(pwnagotchi.__version__)
remote = version_to_tuple(latest_ver)
if remote > local:
user_input = input("There is a new version available! Update from v%s to v%s?\n[Y/N] " % (pwnagotchi.__version__, latest_ver))
# input validation
if user_input.lower() in ('y', 'yes'):
if os.path.exists('/root/.auto-update'):
os.system("rm /root/.auto-update && systemctl restart pwnagotchi")
else:
logging.error("You should make sure auto-update is enabled!")
print("Okay, give me a couple minutes. Just watch pwnlog while you wait.")
elif user_input.lower() in ('n', 'no'): # using this elif for readability
print("Okay, guess not!")
else:
print("You are currently on the latest release, v%s." % pwnagotchi.__version__)
sys.exit(0)
config = utils.load_config(args)
if args.print_config:
print(tomlkit.dumps(config))
sys.exit(0)
from pwnagotchi.identity import KeyPair
from pwnagotchi.agent import Agent
from pwnagotchi.ui import fonts
from pwnagotchi.ui.display import Display
from pwnagotchi import grid
from pwnagotchi import plugins
pwnagotchi.config = config
fs.setup_mounts(config)
log.setup_logging(args, config)
fonts.init(config)
pwnagotchi.set_name(config['main']['name'])
plugins.load(config)
display = Display(config=config, state={'name': '%s>' % pwnagotchi.name()})
if args.do_clear:
do_clear(display)
sys.exit(0)
agent = Agent(view=display, config=config, keypair=KeyPair(view=display))
def usr1_handler(*unused):
logging.info('Received USR1 signal. Restart process ...')
agent._restart("MANU" if args.do_manual else "AUTO")
signal.signal(signal.SIGUSR1, usr1_handler)
if args.do_manual:
do_manual_mode(agent)
else:
do_auto_mode(agent)
if __name__ == '__main__':
pwnagotchi_cli()

View File

@ -1,220 +1,257 @@
main.name = "pwnagotchi"
main.lang = "en"
main.confd = "/etc/pwnagotchi/conf.d/"
main.custom_plugin_repos = [
"https://github.com/jayofelony/pwnagotchi-torch-plugins/archive/master.zip",
"https://github.com/tisboyo/pwnagotchi-pisugar2-plugin/archive/master.zip",
"https://github.com/nullm0ose/pwnagotchi-plugin-pisugar3/archive/master.zip",
"https://github.com/Sniffleupagus/pwnagotchi_plugins/archive/master.zip",
"https://github.com/NeonLightning/pwny/archive/master.zip",
"https://github.com/marbasec/UPSLite_Plugin_1_3/archive/master.zip"
]
main.custom_plugins = "/usr/local/share/pwnagotchi/custom-plugins/"
main.plugins.auto-update.enabled = true
main.plugins.auto-update.install = true
main.plugins.auto-update.interval = 1
main.plugins.bt-tether.enabled = false
main.plugins.bt-tether.devices.android-phone.enabled = false
main.plugins.bt-tether.devices.android-phone.search_order = 1
main.plugins.bt-tether.devices.android-phone.mac = ""
main.plugins.bt-tether.devices.android-phone.ip = "192.168.44.44"
main.plugins.bt-tether.devices.android-phone.netmask = 24
main.plugins.bt-tether.devices.android-phone.interval = 1
main.plugins.bt-tether.devices.android-phone.scantime = 10
main.plugins.bt-tether.devices.android-phone.max_tries = 10
main.plugins.bt-tether.devices.android-phone.share_internet = false
main.plugins.bt-tether.devices.android-phone.priority = 1
main.plugins.bt-tether.devices.ios-phone.enabled = false
main.plugins.bt-tether.devices.ios-phone.search_order = 2
main.plugins.bt-tether.devices.ios-phone.mac = ""
main.plugins.bt-tether.devices.ios-phone.ip = "172.20.10.6"
main.plugins.bt-tether.devices.ios-phone.netmask = 24
main.plugins.bt-tether.devices.ios-phone.interval = 5
main.plugins.bt-tether.devices.ios-phone.scantime = 20
main.plugins.bt-tether.devices.ios-phone.max_tries = 0
main.plugins.bt-tether.devices.ios-phone.share_internet = false
main.plugins.bt-tether.devices.ios-phone.priority = 999
main.plugins.fix_services.enabled = true
main.plugins.gdrivesync.enabled = false
main.plugins.gdrivesync.backupfiles = ['']
main.plugins.gdrivesync.backup_folder = "PwnagotchiBackups"
main.plugin.gdrivesync.interval = 1
main.plugins.gpio_buttons.enabled = false
main.plugins.gps.enabled = false
main.plugins.gps.speed = 19200
main.plugins.gps.device = "/dev/ttyUSB0" # for GPSD: "localhost:2947"
main.plugins.grid.enabled = true
main.plugins.grid.report = true
main.plugins.grid.exclude = [
"YourHomeNetworkHere"
]
main.plugins.logtail.enabled = false
main.plugins.logtail.max-lines = 10000
main.plugins.memtemp.enabled = false
main.plugins.memtemp.scale = "celsius"
main.plugins.memtemp.orientation = "horizontal"
main.plugins.net-pos.enabled = false
main.plugins.net-pos.api_key = "test"
main.plugins.onlinehashcrack.enabled = false
main.plugins.onlinehashcrack.email = ""
main.plugins.onlinehashcrack.dashboard = ""
main.plugins.onlinehashcrack.single_files = false
main.plugins.onlinehashcrack.whitelist = []
main.plugins.paw-gps.enabled = false
main.plugins.paw-gps.ip = "192.168.44.1:8080"
main.plugins.pisugar2.enabled = false
main.plugins.pisugar2.shutdown = 5
main.plugins.pisugar2.sync_rtc_on_boot = false
main.plugins.session-stats.enabled = true
main.plugins.session-stats.save_directory = "/var/tmp/pwnagotchi/sessions/"
main.plugins.ups_hat_c.enabled = false
main.plugins.ups_hat_c.label_on = true # show BAT label or just percentage
main.plugins.ups_hat_c.shutdown = 5 # battery percent at which the device will turn off
main.plugins.ups_hat_c.bat_x_coord = 140
main.plugins.ups_hat_c.bat_y_coord = 0
main.plugins.ups_lite.enabled = false
main.plugins.ups_lite.shutdown = 2
main.plugins.webcfg.enabled = true
main.plugins.webgpsmap.enabled = false
main.plugins.wigle.enabled = false
main.plugins.wigle.api_key = ""
main.plugins.wigle.whitelist = []
main.plugins.wigle.donate = true
main.plugins.wpa-sec.enabled = false
main.plugins.wpa-sec.api_key = ""
main.plugins.wpa-sec.api_url = "https://wpa-sec.stanev.org"
main.plugins.wpa-sec.download_results = false
main.plugins.wpa-sec.whitelist = []
main.iface = "wlan0mon"
main.mon_start_cmd = "/usr/bin/monstart"
main.mon_stop_cmd = "/usr/bin/monstop"
main.mon_max_blind_epochs = 50
main.no_restart = false
main.whitelist = [
[main]
name = "pwnagotchi"
lang = "en"
iface = "wlan0mon"
mon_start_cmd = "/usr/bin/monstart"
mon_stop_cmd = "/usr/bin/monstop"
mon_max_blind_epochs = 5
no_restart = false
whitelist = [
"EXAMPLE_NETWORK",
"ANOTHER_EXAMPLE_NETWORK",
"fo:od:ba:be:fo:od",
"fo:od:ba"
]
main.filter = ""
confd = "/etc/pwnagotchi/conf.d/"
custom_plugin_repos = [
"https://github.com/jayofelony/pwnagotchi-torch-plugins/archive/master.zip",
"https://github.com/Sniffleupagus/pwnagotchi_plugins/archive/master.zip",
"https://github.com/NeonLightning/pwny/archive/master.zip",
"https://github.com/marbasec/UPSLite_Plugin_1_3/archive/master.zip",
"https://github.com/wpa-2/Pwnagotchi-Plugins/archive/master.zip",
"https://github.com/cyberartemio/wardriver-pwnagotchi-plugin/archive/main.zip"
]
custom_plugins = "/usr/local/share/pwnagotchi/custom-plugins/"
main.log.path = "/home/pi/logs/pwnagotchi.log"
main.log.rotation.enabled = true
main.log.rotation.size = "10M"
[main.plugins.auto-tune]
enabled = true
ai.enabled = true
ai.path = "/root/brain.nn"
ai.laziness = 0.1
ai.epochs_per_episode = 50
[main.plugins.auto_backup]
enabled = false
interval = "daily" # or "hourly", or a number (minutes)
max_tries = 0
backup_location = "/home/pi/"
files = [
"/root/settings.yaml",
"/root/client_secrets.json",
"/root/.api-report.json",
"/root/.ssh",
"/root/.bashrc",
"/root/.profile",
"/home/pi/handshakes",
"/root/peers",
"/etc/pwnagotchi/",
"/usr/local/share/pwnagotchi/custom-plugins",
"/etc/ssh/",
"/home/pi/.bashrc",
"/home/pi/.profile",
"/home/pi/.wpa_sec_uploads"
]
exclude = [ "/etc/pwnagotchi/logs/*"]
commands = [ "tar cf {backup_file} {files}"]
ai.params.gamma = 0.99
ai.params.n_steps = 1
ai.params.vf_coef = 0.25
ai.params.ent_coef = 0.01
ai.params.max_grad_norm = 0.5
ai.params.learning_rate = 0.001
ai.params.verbose = 1
[main.plugins.auto-update]
enabled = true
install = true
interval = 1
token = "" # Create a personal access token (classic) with scope set to public_repo to use the GitHub API
personality.advertise = true
personality.deauth = true
personality.associate = true
personality.channels = []
personality.min_rssi = -200
personality.ap_ttl = 120
personality.sta_ttl = 300
personality.recon_time = 30
personality.max_inactive_scale = 2
personality.recon_inactive_multiplier = 2
personality.hop_recon_time = 10
personality.min_recon_time = 5
personality.max_interactions = 3
personality.max_misses_for_recon = 5
personality.excited_num_epochs = 10
personality.bored_num_epochs = 15
personality.sad_num_epochs = 25
personality.bond_encounters_factor = 20000
personality.throttle_a = 0.4
personality.throttle_d = 0.9
[main.plugins.bt-tether]
enabled = false
phone-name = "" # name as shown on the phone i.e. "Pwnagotchi's Phone"
mac = ""
phone = "" # android or ios
ip = "" # optional, default : 192.168.44.2 if android or 172.20.10.2 if ios
dns = "8.8.8.8 1.1.1.1" # optional, default (google): "8.8.8.8 1.1.1.1". Consider using anonymous DNS like OpenNic :-)
ui.fps = 0.0
ui.font.name = "DejaVuSansMono" # for japanese: fonts-japanese-gothic
ui.font.size_offset = 0 # will be added to the font size
[main.plugins.fix_services]
enabled = true
ui.faces.look_r = "( ⚆_⚆)"
ui.faces.look_l = "(☉_☉ )"
ui.faces.look_r_happy = "( ◕‿◕)"
ui.faces.look_l_happy = "(◕‿◕ )"
ui.faces.sleep = "(⇀‿‿↼)"
ui.faces.sleep2 = "(≖‿‿≖)"
ui.faces.awake = "(◕‿‿◕)"
ui.faces.bored = "(-__-)"
ui.faces.intense = "(°▃▃°)"
ui.faces.cool = "(⌐■_■)"
ui.faces.happy = "(•‿‿•)"
ui.faces.excited = "(ᵔ◡◡ᵔ)"
ui.faces.grateful = "(^‿‿^)"
ui.faces.motivated = "(☼‿‿☼)"
ui.faces.demotivated = "(≖__≖)"
ui.faces.smart = "(✜‿‿✜)"
ui.faces.lonely = "(ب__ب)"
ui.faces.sad = "(╥☁╥ )"
ui.faces.angry = "(-_-')"
ui.faces.friend = "(♥‿‿♥)"
ui.faces.broken = "(☓‿‿☓)"
ui.faces.debug = "(#__#)"
ui.faces.upload = "(1__0)"
ui.faces.upload1 = "(1__1)"
ui.faces.upload2 = "(0__1)"
[main.plugins.cache]
enabled = true
ui.web.enabled = true
ui.web.address = "::" # listening on both ipv4 and ipv6 - switch to 0.0.0.0 to listen on just ipv4
ui.web.username = "changeme"
ui.web.password = "changeme"
ui.web.origin = ""
ui.web.port = 8080
ui.web.on_frame = ""
[main.plugins.gdrivesync]
enabled = false
backupfiles = [""]
backup_folder = "PwnagotchiBackups"
interval = 1
ui.display.enabled = false
ui.display.rotation = 180
ui.display.type = "waveshare_4"
[main.plugins.gpio_buttons]
enabled = false
bettercap.scheme = "http"
bettercap.hostname = "localhost"
bettercap.port = 8081
bettercap.username = "pwnagotchi"
bettercap.password = "pwnagotchi"
bettercap.handshakes = "/root/handshakes"
bettercap.silence = [
[main.plugins.gps]
enabled = false
speed = 19200
device = "/dev/ttyUSB0" # for GPSD: "localhost:2947"
[main.plugins.gps_listener]
enabled = false
[main.plugins.grid]
enabled = true
report = true
[main.plugins.logtail]
enabled = false
max-lines = 10000
[main.plugins.memtemp]
enabled = false
scale = "celsius"
orientation = "horizontal"
[main.plugins.ohcapi]
enabled = false
api_key = "sk_your_api_key_here"
receive_email = "yes"
[main.plugins.pwndroid]
enabled = false
display = false # show coords on display
display_altitude = false # show altitude on display
[main.plugins.pisugarx]
enabled = false
rotation = false
default_display = "percentage"
lowpower_shutdown = true
lowpower_shutdown_level = 10 # battery percent at which the device will turn off
max_charge_voltage_protection = false #It will limit the battery voltage to about 80% to extend battery life
[main.plugins.pwncrack]
enabled = false
key = ""
[main.plugins.session-stats]
enabled = false
save_directory = "/var/tmp/pwnagotchi/sessions/"
[main.plugins.ups_hat_c]
enabled = false
label_on = true # show BAT label or just percentage
shutdown = 5 # battery percent at which the device will turn off
bat_x_coord = 140
bat_y_coord = 0
[main.plugins.ups_lite]
enabled = false
shutdown = 2
[main.plugins.webcfg]
enabled = true
[main.plugins.webgpsmap]
enabled = false
[main.plugins.wigle]
enabled = false
api_key = "" # mandatory
cvs_dir = "/tmp" # optionnal, is set, the CVS is written to this directory
donate = false # default: off
timeout = 30 # default: 30
position = [7, 85] # optionnal
[main.plugins.wpa-sec]
enabled = false
api_key = ""
api_url = "https://wpa-sec.stanev.org"
download_results = false
show_pwd = false
[main.log]
path = "/etc/pwnagotchi/log/pwnagotchi.log"
path-debug = "/etc/pwnagotchi/log/pwnagotchi-debug.log"
[main.log.rotation]
enabled = true
size = "10M"
[personality]
advertise = true
deauth = true
associate = true
channels = []
min_rssi = -200
ap_ttl = 120
sta_ttl = 300
recon_time = 30
max_inactive_scale = 2
recon_inactive_multiplier = 2
hop_recon_time = 10
min_recon_time = 5
max_interactions = 3
max_misses_for_recon = 5
excited_num_epochs = 10
bored_num_epochs = 15
sad_num_epochs = 25
bond_encounters_factor = 20000
throttle_a = 0.4
throttle_d = 0.9
[ui]
invert = false # false = black background, true = white background
cursor = true
fps = 0.0
[ui.font]
name = "DejaVuSansMono" # for japanese: fonts-japanese-gothic
size_offset = 0 # will be added to the font size
[ui.faces]
look_r = "( ⚆_⚆)"
look_l = "(☉_☉ )"
look_r_happy = "( ◕‿◕)"
look_l_happy = "(◕‿◕ )"
sleep = "(⇀‿‿↼)"
sleep2 = "(≖‿‿≖)"
awake = "(◕‿‿◕)"
bored = "(-__-)"
intense = "(°▃▃°)"
cool = "(⌐■_■)"
happy = "(•‿‿•)"
excited = "(ᵔ◡◡ᵔ)"
grateful = "(^‿‿^)"
motivated = "(☼‿‿☼)"
demotivated = "(≖__≖)"
smart = "(✜‿‿✜)"
lonely = "(ب__ب)"
sad = "(╥☁╥ )"
angry = "(-_-')"
friend = "(♥‿‿♥)"
broken = "(☓‿‿☓)"
debug = "(#__#)"
upload = "(1__0)"
upload1 = "(1__1)"
upload2 = "(0__1)"
png = false
position_x = 0
position_y = 34
[ui.web]
enabled = true
address = "::" # listening on both ipv4 and ipv6 - switch to 0.0.0.0 to listen on just ipv4
auth = false
username = "changeme" # if auth is true
password = "changeme" # if auth is true
origin = ""
port = 8080
on_frame = ""
[ui.display]
enabled = false
rotation = 180
type = "waveshare_4"
[bettercap]
handshakes = "/home/pi/handshakes"
silence = [
"ble.device.new",
"ble.device.lost",
"ble.device.disconnected",
"ble.device.connected",
"ble.device.service.discovered",
"ble.device.characteristic.discovered",
"ble.device.disconnected",
"ble.device.connected",
"ble.connection.timeout",
"wifi.client.new",
"wifi.client.lost",
"wifi.client.probe",
@ -223,17 +260,21 @@ bettercap.silence = [
"mod.started"
]
fs.memory.enabled = true
fs.memory.mounts.log.enabled = true
fs.memory.mounts.log.mount = "/home/pi/logs"
fs.memory.mounts.log.size = "50M"
fs.memory.mounts.log.sync = 60
fs.memory.mounts.log.zram = true
fs.memory.mounts.log.rsync = true
[fs.memory]
enabled = true
fs.memory.mounts.data.enabled = true
fs.memory.mounts.data.mount = "/var/tmp/pwnagotchi"
fs.memory.mounts.data.size = "10M"
fs.memory.mounts.data.sync = 3600
fs.memory.mounts.data.zram = true
fs.memory.mounts.data.rsync = true
[fs.memory.mounts.log]
enabled = true
mount = "/etc/pwnagotchi/log/"
size = "50M"
sync = 60
zram = true
rsync = true
[fs.memory.mounts.data]
enabled = true
mount = "/var/tmp/pwnagotchi"
size = "10M"
sync = 3600
zram = true
rsync = true

View File

@ -3,7 +3,8 @@ import re
import tempfile
import contextlib
import shutil
import _thread
#import _thread
import threading
import logging
from time import sleep
@ -85,7 +86,8 @@ def setup_mounts(config):
if interval:
logging.debug("[FS] Starting thread to sync %s (interval: %d)",
options['mount'], interval)
_thread.start_new_thread(m.daemonize, (interval,))
threading.Thread(target=m.daemonize, args=(interval,),name="File Sys", daemon=True).start()
#_thread.start_new_thread(m.daemonize, (interval,))
else:
logging.debug("[FS] Not syncing %s, because interval is 0",
options['mount'])

View File

@ -13,7 +13,8 @@ def is_connected():
try:
# check DNS
host = 'https://api.opwngrid.xyz/api/v1/uptime'
r = requests.get(host, headers=None, timeout=(30.0, 60.0))
headers = {'user-agent': f'pwnagotchi/{pwnagotchi.__version__}'}
r = requests.get(host, headers=headers, timeout=(30.0, 60.0))
if r.json().get('isUp'):
return True
except:
@ -70,10 +71,9 @@ def update_data(last_session):
enabled = [name for name, options in pwnagotchi.config['main']['plugins'].items() if
'enabled' in options and options['enabled']]
language = pwnagotchi.config['main']['lang']
ai = pwnagotchi.config['ai']['enabled']
data = {
'ai': ai,
'ai': "No AI!",
'session': {
'duration': last_session.duration,
'epochs': last_session.epochs,
@ -87,12 +87,11 @@ def update_data(last_session):
'peers': last_session.peers,
},
'uname': subprocess.getoutput("uname -a"),
'brain': brain,
'version': pwnagotchi.__version__,
'build': "Pwnagotchi-Torch by Jayofelony",
'build': "Pwnagotchi by Jayofelony",
'plugins': enabled,
'language': language,
'bettercap': subprocess.getoutput("bettercap -version").split(".\n\n")[1],
'bettercap': subprocess.getoutput("bettercap -version"),
'opwngrid': subprocess.getoutput("pwngrid -version")
}

View File

@ -50,10 +50,6 @@ class KeyPair(object):
with open(self.fingerprint_path, 'w+t') as fp:
fp.write(self.fingerprint)
# no exception, keys loaded correctly.
self._view.on_starting()
return
except Exception as e:
# if we're here, loading the keys broke something ...
logging.exception("error loading keys, maybe corrupted, deleting and regenerating ...")
@ -63,6 +59,9 @@ class KeyPair(object):
except:
pass
# no exception, keys loaded correctly.
self._view.on_starting()
return
def sign(self, message):
hasher = SHA256.new(message.encode("ascii"))
signer = PKCS1_PSS.new(self.priv_key, saltLen=16)

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.5.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:51+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: MatthewNunu https://github.com/MatthewNunu\n"
"Language-Team: \n"
@ -28,11 +28,11 @@ msgstr "Nuwe dag, nuwe jag, nuwe pwns!"
msgid "Hack the Planet!"
msgstr "Hack die wêreld!"
msgid "AI ready."
msgstr "AI gereed."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgstr "Die neurale netwerk is gereed."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."
msgstr "Genereer wagwoord, moenie afskakel nie ..."
@ -257,3 +257,9 @@ msgstr "minuut"
msgid "second"
msgstr "tweede"
#~ msgid "AI ready."
#~ msgstr "AI gereed."
#~ msgid "The neural network is ready."
#~ msgstr "Die neurale netwerk is gereed."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Pwnagotchi Belarusian translation v 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:51+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: <https://github.com/andreifinski>\n"
"Language-Team: \n"
@ -33,11 +33,11 @@ msgstr "Новы дзень, новае паляванне, новыя ўзло
msgid "Hack the Planet!"
msgstr "Узламай гэту Планету!"
msgid "AI ready."
msgstr "A.I. гатовы."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgstr "Нейронная сетка гатова."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."
msgstr "Генерацыя ключоў, не выключайце..."
@ -263,6 +263,12 @@ msgstr "хвіліну"
msgid "second"
msgstr ""
#~ msgid "AI ready."
#~ msgstr "A.I. гатовы."
#~ msgid "The neural network is ready."
#~ msgstr "Нейронная сетка гатова."
#, python-brace-format
#~ msgid "Unit {name} is nearby! {name}"
#~ msgstr "Мэта {name} побач!"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:51+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: 2019-10-23 20:56+0200\n"
"Last-Translator: Georgi Koemdzhiev <https://github.com/georgikoemdzhiev>\n"
"Language-Team: \n"
@ -28,11 +28,11 @@ msgstr "Нов ден, нов лов, нови pwns!"
msgid "Hack the Planet!"
msgstr "Хакни планетата!"
msgid "AI ready."
msgstr "AI готов."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgstr "Невронната мрежа е готова."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."
msgstr "Генериране на ключове, не изключвай ..."
@ -258,3 +258,9 @@ msgstr "минута"
msgid "second"
msgstr "секунда"
#~ msgid "AI ready."
#~ msgstr "AI готов."
#~ msgid "The neural network is ready."
#~ msgstr "Невронната мрежа е готова."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:51+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:51+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Czechball <czechball@users.noreply.github.com>\n"
"Language-Team: pwnagotchi <33197631+dadav@users.noreply.github.com>\n"
@ -28,11 +28,11 @@ msgstr "Nový den, nový lov, nové úlovky!"
msgid "Hack the Planet!"
msgstr "Hackni celou planetu!"
msgid "AI ready."
msgstr "AI připraveno."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgstr "Neuronová síť je připravena."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."
msgstr "Generování klíčů, nevypínej mě..."
@ -257,3 +257,9 @@ msgstr "minuta"
msgid "second"
msgstr "sekunda"
#~ msgid "AI ready."
#~ msgstr "AI připraveno."
#~ msgid "The neural network is ready."
#~ msgstr "Neuronová síť je připravena."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:51+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: 2020-01-18 21:56+ZONE\n"
"Last-Translator: Dennis Kjær Jensen <signout@signout.dk>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -28,11 +28,11 @@ msgstr "Ny dag, ny jagt, nye pwns!"
msgid "Hack the Planet!"
msgstr "Hack planeten!"
msgid "AI ready."
msgstr "AI klar."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgstr "Det neurale netværk er klart."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."
msgstr "Genererer nøgler, sluk ikke ..."
@ -257,3 +257,9 @@ msgstr "minut"
msgid "second"
msgstr "sekund"
#~ msgid "AI ready."
#~ msgstr "AI klar."
#~ msgid "The neural network is ready."
#~ msgstr "Det neurale netværk er klart."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:51+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: 2019-09-29 14:00+0200\n"
"Last-Translator: dadav <33197631+dadav@users.noreply.github.com>\n"
"Language-Team: DE <33197631+dadav@users.noreply.github.com>\n"
@ -28,11 +28,11 @@ msgstr "Neuer Tag, neue Jagd, neue Pwns!"
msgid "Hack the Planet!"
msgstr "Hack den Planeten!"
msgid "AI ready."
msgstr "KI bereit."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgstr "Das neurale Netz ist bereit."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."
msgstr "Generiere Schlüssel, nicht ausschalten..."
@ -257,3 +257,9 @@ msgstr "Minute"
msgid "second"
msgstr "Sekunde"
#~ msgid "AI ready."
#~ msgstr "KI bereit."
#~ msgid "The neural network is ready."
#~ msgstr "Das neurale Netz ist bereit."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:10+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,10 +28,10 @@ msgstr ""
msgid "Hack the Planet!"
msgstr ""
msgid "AI ready."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-16 21:51+0100\n"
"POT-Creation-Date: 2024-12-16 20:46+0100\n"
"PO-Revision-Date: 2019-10-03 08:00+0000\n"
"Last-Translator: Periklis Fregkos <fregkos@gmail.com>\n"
"Language-Team: pwnagotchi <33197631+dadav@users.noreply.github.com>\n"
@ -29,11 +29,11 @@ msgstr "Νέα μέρα, νέο κυνήγι, νέα pwns!"
msgid "Hack the Planet!"
msgstr "Hackαρε τον πλανήτη!"
msgid "AI ready."
msgstr "ΤΝ έτοιμη."
msgid "No more mister Wi-Fi!!"
msgstr ""
msgid "The neural network is ready."
msgstr "Το νευρωνικό δίκτυο είναι έτοιμο."
msgid "Pretty fly 4 a Wi-Fi!"
msgstr ""
msgid "Generating keys, do not turn off ..."
msgstr ""
@ -258,3 +258,9 @@ msgstr ""
msgid "second"
msgstr ""
#~ msgid "AI ready."
#~ msgstr "ΤΝ έτοιμη."
#~ msgid "The neural network is ready."
#~ msgstr "Το νευρωνικό δίκτυο είναι έτοιμο."

Some files were not shown because too many files have changed in this diff Show More