Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
9053d20
Keep webhook tokens out of failures and report storage errors honestly
1window2 Nov 6, 2026
2485738
Compare the typed Platoon name in its typeable form before deleting
1window2 Nov 6, 2026
3a875b5
Close TCP and ICMP flows whose socket cannot be opened
1window2 Nov 6, 2026
1c3f8bf
Purge datagram and web flows before inspected TCP at the socket cap
1window2 Nov 6, 2026
2ea08ff
Read the DNS QR bit in host byte order
1window2 Nov 6, 2026
c30544d
Forward the client FIN only after the bytes before it
1window2 Nov 6, 2026
cdf5446
Add host regression tests for the zdtun forwarding fixes
1window2 Nov 6, 2026
2346e32
Keep reset and capture regions honest across clears, restores and mig…
1window2 Nov 6, 2026
2b1a083
Leave minimum and unknown values empty in the weekly cell editor
1window2 Nov 6, 2026
c0e3723
Show and speak every weekly cutline warning and keep large-font value…
1window2 Nov 6, 2026
264d12d
Report a weekly note deletion that fails
1window2 Nov 6, 2026
720fd92
Save member order only on real changes and keep it consistent with st…
1window2 Nov 6, 2026
75e90f8
Fit long cells in the weekly PNG and keep its summary on one line
1window2 Nov 6, 2026
66b65ef
Make state changes, tooltips and large text accessible
1window2 Nov 6, 2026
fc1b034
Keep a near-reset Standard day exact only when one split remains
1window2 Nov 6, 2026
826145d
Label game-zone times when the phone clock reads differently
1window2 Nov 6, 2026
9c94cb1
Stop treating a near-reset Gunsmoke capture as a closed opening anchor
1window2 Nov 6, 2026
6271275
Deliver every flow close and date held payloads by their arrival
1window2 Nov 6, 2026
28ba1be
Refuse to capture while a CSV import recovery is incomplete
1window2 Nov 6, 2026
a72126d
Word English capture counts so they read correctly for one
1window2 Nov 6, 2026
e75a224
Keep capture stop reasons and alerts visible and announced
1window2 Nov 6, 2026
b304bb1
Open the app and offer Stop from the capture notification
1window2 Nov 6, 2026
8184af9
Never leave a failed export behind, and report outcomes after recreation
1window2 Nov 6, 2026
7538456
Bound the decoded elements of every captured payload
1window2 Nov 6, 2026
7a22a37
Truncate Platoon text on a code point boundary
1window2 Nov 6, 2026
7017e95
Validate manual weekly edits against the day's range and evidence
1window2 Nov 6, 2026
80e582f
Stop formatting a history entry once it exceeds the size limit
1window2 Nov 6, 2026
10d0021
Sync history and roster files before renaming them into place
1window2 Nov 6, 2026
12ef099
Rotate recent history by a persisted recording sequence
1window2 Nov 6, 2026
ce5d89d
Keep quoted CSV text exact and render every accepted roster
1window2 Nov 6, 2026
31a9d7b
Report roster comparison deltas with honest certainty
1window2 Nov 6, 2026
a15e619
Make the roster export importable without changing names
1window2 Nov 6, 2026
2a742fe
Never store a roster member with UID 0
1window2 Nov 6, 2026
265e337
Keep open drafts when the Platoon changes or a screen is recreated
1window2 Nov 6, 2026
7c3dcbe
Document draft, export and announcement contracts in the UI design sy…
1window2 Nov 6, 2026
d3073b8
Fall back to the live weekly table when the active revision cannot be…
1window2 Nov 6, 2026
6e67b2b
Write the one-time capture region migration asynchronously
1window2 Nov 6, 2026
14378b6
Guard CSV import undo with a digest of primary evidence only
1window2 Nov 6, 2026
2d19ab0
Keep scheduled recording matched to the saved Platoons
1window2 Nov 6, 2026
3eded7b
Stop standby taps at any notice that follows a login
1window2 Nov 6, 2026
64a0a29
Recheck that capture is stopped where Platoon maintenance runs
1window2 Nov 6, 2026
d5ebd73
Warn that standby keeps a phone with a screen lock unlocked
1window2 Nov 6, 2026
6ba6a41
Mark standby results seen only when the user closes them
1window2 Nov 6, 2026
cbc30e1
Describe exactly when standby taps and locks the phone
1window2 Nov 6, 2026
b8c2395
Update SECURITY.md for 2.7 and the standby surface
1window2 Nov 6, 2026
9d4ae05
Keep custom_name NULL when it equals the game name
1window2 Nov 6, 2026
8bd1daf
Store activity-dated boundaries as ACTIVITY and let Updates replace them
1window2 Nov 6, 2026
8341837
Rebuild restored weekly history recorded under another reset zone
1window2 Nov 6, 2026
342974b
Reject future manual membership dates and out-of-range UIDs
1window2 Nov 6, 2026
707caa2
Repair stale membership state and keep exact patrol facts
1window2 Nov 6, 2026
84d4a7c
Document membership evidence rules and Daily Patrol sources
1window2 Nov 6, 2026
651292a
Merge fix/2.7.2-native
1window2 Nov 6, 2026
4f3775c
Merge fix/2.7.2-protocol
1window2 Nov 6, 2026
fd6bfeb
Merge fix/2.7.2-capture
1window2 Nov 6, 2026
121a6f2
Merge fix/2.7.2-membership
1window2 Nov 6, 2026
f1291ac
Merge fix/2.7.2-engine
1window2 Nov 6, 2026
370d488
Merge fix/2.7.2-weeklyui
1window2 Nov 6, 2026
09eeff9
Merge fix/2.7.2-uiinfra
1window2 Nov 6, 2026
fc03c31
Merge fix/2.7.2-standby
1window2 Nov 6, 2026
0319b73
Harden Platoon storage against crafted restores, corruption and races
1window2 Nov 6, 2026
c2d8ab9
Export Home's roster CSV from the latest stored roster
1window2 Nov 6, 2026
6bab226
Recognize re-imported rosters and keep CSV imports isolated
1window2 Nov 6, 2026
87cee07
Describe what deleting a member and restoring a backup guarantee
1window2 Nov 6, 2026
9c1da8b
Merge fix/2.7.2-storage
1window2 Nov 6, 2026
ff24366
Pin supported client signers on first use and refuse other signers
1window2 Nov 6, 2026
5303dc9
Report a damaged database and a running CSV import in capture notices
1window2 Nov 6, 2026
49dc73a
Block Platoon screens on a damaged database and wait out a running im…
1window2 Nov 6, 2026
af18a74
Set aside rosters captured with the phone clock set ahead
1window2 Nov 6, 2026
b59d203
Remove stored members without a real UID on upgrade and restore
1window2 Nov 6, 2026
8cad6a2
Merge followup/2.7.2-integrity
1window2 Nov 6, 2026
be529e9
Merge followup/2.7.2-uiwire
1window2 Nov 6, 2026
17b1779
Merge followup/2.7.2-signer
1window2 Nov 6, 2026
7e377f1
Restore the archive's maintenance state when rebuilding a restored da…
1window2 Nov 6, 2026
af56551
Compare restored weekly history limits as integers
1window2 Nov 6, 2026
799388e
Cast the Updates instant before the same-roster-gap MIN and MAX
1window2 Nov 6, 2026
8dcc950
Keep a database found corrupt while opening from being recreated empty
1window2 Nov 6, 2026
2e082aa
Give the cutline warning test a member who logged in on three days
1window2 Nov 6, 2026
4e134c9
Reveal the correlated join inside the correlation window in its test
1window2 Nov 6, 2026
a3bcf64
Build the derived weekly revision in the Platoon's zone in the undo test
1window2 Nov 6, 2026
2a12f1f
Compare Updates correlation distances and instants as integers
1window2 Nov 6, 2026
3842a37
Bound manual membership dates by the roster clock skew
1window2 Nov 6, 2026
173869d
Read the current roster through one repository call
1window2 Nov 6, 2026
5866919
Check member UIDs and Platoon IDs against one game ID range
1window2 Nov 6, 2026
b48992b
Quote SQLite identifiers and list app tables through one helper each
1window2 Nov 6, 2026
67cc93a
Let backup export report corruption through the shared failure classi…
1window2 Nov 6, 2026
b877223
Map export failures for Platoon data through one helper
1window2 Nov 6, 2026
cf2ba6b
Name roster CSV files from one capture-time format
1window2 Nov 6, 2026
67673e5
Name the active-state rule among the digest's bookkeeping keys
1window2 Nov 6, 2026
157fa58
Keep the cause-chain check private to the CSV import flow
1window2 Nov 6, 2026
63a0e16
Check for a screen lock in one place across standby and scheduled rec…
1window2 Nov 6, 2026
aab181f
Commit the legacy Platoon's member order and cutlines like a scoped P…
1window2 Nov 6, 2026
fbf1366
Describe client signer trust in the Korean README
1window2 Nov 6, 2026
3992a2b
Mention signer trust on Home's client rows in the design notes
1window2 Nov 6, 2026
9eb536e
Name no missing button in the VPN refusal notice
1window2 Nov 6, 2026
1edb2fe
Let Home's capture notice wrap in full at large font sizes
1window2 Nov 6, 2026
ad56559
Keep the picked export document when opening it is refused
1window2 Nov 6, 2026
d9d927e
Report a damaged backup export after its Settings screen is gone
1window2 Nov 6, 2026
64b3ee9
Roll back an interrupted import from an older-schema checkpoint
1window2 Nov 6, 2026
d224340
Quarantine a live database the evidence digest finds corrupt
1window2 Nov 6, 2026
ae50320
Ignore stored weekly overrides outside one day's domain
1window2 Nov 6, 2026
379fe4e
Skip a weekly revision that names a member deleted since it was built
1window2 Nov 6, 2026
6d8e555
Pin first-seen clients on Home only once someone is there after stand…
1window2 Nov 6, 2026
6043d2c
Refuse restored rows the app could never read back
1window2 Nov 6, 2026
86a2975
Keep a departed member inactive when v14 relabels a superseded activi…
1window2 Nov 6, 2026
ab96e7a
Fold the shadow period a pre-v14 Updates withdrawal created into its …
1window2 Nov 6, 2026
525c885
Rebuild a live database that still carries DDL from a pre-2.7.2 restore
1window2 Nov 6, 2026
6041d70
Keep a draft bound to its Platoon when a scoped screen is recreated
1window2 Nov 6, 2026
2b82bb1
Reopen the weekly cell editor with its typed values after recreation
1window2 Nov 6, 2026
65400bb
Describe when a failed export keeps the picked document
1window2 Nov 6, 2026
940a4df
Release 2.7.2
1window2 Nov 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,94 @@

All notable changes to mobileGF2logger are documented here.

## 2.7.2 - 2026-11-07

### Security

- Pin each supported game client's signing certificate the first time it is
seen and refuse to route or record traffic from a client whose signer
changed. Home's client rows show the trust state, and Settings lists the
pinned signers. After upgrading, a scheduled or standby run records "client
not trusted" until Home has been opened once.
- Bound every decoded payload to 32,768 elements, and every held pre-identity
payload and admission to 65,536 elements in total, so a small packet can no
longer expand into an outsized decode.
- Rebuild every restored `.gf2backup` into the app's own table definitions
instead of installing the archive's DDL. Refuse rows the app could never read
back (out-of-range counters and IDs, unknown enum values, oversized text,
BLOBs), and drop maintenance keys the app never writes. A live database that
still carries DDL from a restore made before 2.7.2 is rebuilt on its first
access.
- Keep Discord webhook tokens out of failure messages and logcat.
- Native forwarding: forward a client FIN only after the bytes before it, close
TCP and ICMP flows whose socket cannot be opened, purge datagram and web
flows before inspected TCP at the socket cap, and read the DNS QR bit in host
byte order. Host regression tests cover each fix.
- Never delete a picked export document on a provider the app refuses, or when
opening it fails.

### Fixed

- Quarantine a Platoon database found corrupt, whether while opening or while
hashing for a CSV undo, instead of letting it be recreated empty. Platoon
screens and capture notices report a damaged database and offer a rebuild,
including after the Settings screen that ran the backup is gone.
- Wait out a running CSV import on Platoon screens and in capture, and refuse
capture while an import recovery is incomplete.
- Roll back an interrupted import from a checkpoint written by the older schema.
- Re-check that capture is stopped wherever Platoon maintenance runs.
- Membership: store activity-dated joins and withdrawals as their own evidence
source and let Updates replace them. On upgrade, repair stale active flags,
duplicate open periods and the shadow periods older versions created, keeping
departed members inactive. Remove stored members without a real UID, and
never store a roster member with UID 0.
- Set aside rosters captured with the phone clock set ahead, rather than letting
them become the latest roster.
- Rebuild restored weekly history recorded under another reset zone, ignore
stored weekly overrides outside one day's domain, skip a weekly revision that
names a member deleted since it was built, and fall back to the live weekly
table when the active revision cannot be read.
- Gunsmoke Frontline: stop treating a near-reset capture as a closed opening
anchor, keep a near-reset Standard day exact only when one split remains, and
compare Updates correlation instants as integers. The 48-hour correlation
window now applies as intended, which can change a correlated join that older
versions placed outside it.
- Deliver every flow close, date held payloads by their arrival, rotate recent
history by a persisted recording sequence, and fsync history and roster files
before renaming them into place.
- CSV: keep quoted text exact, make the roster export importable without
changing names (a reversible prefix protects formula-like names in
spreadsheets), recognize re-imported rosters, and export Home's roster CSV
from the latest stored roster.
- Input: reject future manual membership dates and out-of-range UIDs and
Platoon IDs, validate manual weekly edits against the day's range and
evidence, compare a typed Platoon name in its typeable form before deleting,
and truncate Platoon text on a code point boundary.
- Standby: stop taps at any notice that follows a login, keep scheduled
recording matched to the saved Platoons, warn that a phone with a screen lock
stays unlocked, and mark results seen only when the user closes them.
- Keep open drafts, including the weekly cell editor's typed values, when the
Platoon changes or a screen is recreated, with each draft bound to its own
Platoon.
- Accessibility: announce state changes and capture stop reasons, add
tooltips, keep large-font values and every weekly cutline warning visible, and
let Home's capture notice wrap in full.
- Open the app and offer Stop from the capture notification, word English
capture counts correctly for one, and fit long cells in the weekly PNG.
- Commit the legacy Platoon's member order and cutlines like a scoped
Platoon's, and save member order only on real changes.

### Changed

- Platoon database schema 14 adds a set-aside flag for clock-suspect rosters.
- The CSV undo check is now a digest of primary evidence only, so a checkpoint
sealed by 2.7.1 is refused once.
- Report roster comparison deltas with honest certainty, and label game-zone
times when the phone clock reads differently.
- Consolidate the game ID range, SQLite identifier quoting, roster file naming,
export failure messages, screen-lock checks and the latest-roster read into
one place each.

## 2.7.1 - 2026-10-25

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ Home, Platoon, and Weekly share a 64dp bottom bar. Each destination has a 24dp i

### Capture Status Panel

Capture state, its localized latest notice, the one-time capture checklist, the two supported clients with their package IDs and install state, and the capture actions form one operational group. While stopped the panel offers One-time capture (primary) and Continuous capture; while preparing or capturing those are replaced by a single Stop action.
Capture state, its localized latest notice, the one-time capture checklist, the two supported clients with their package IDs and install or signer-trust state, and the capture actions form one operational group. While stopped the panel offers One-time capture (primary) and Continuous capture; while preparing or capturing those are replaced by a single Stop action.

### Weekly Table

Expand Down
22 changes: 15 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,18 @@ never stored.
- Provides profile management for correcting server metadata without moving data and for deleting one isolated Platoon behind two confirmations and an exact-name check.
- Guides first-time users through Main, Settings, Platoon management, weekly controls, and parsed-packet pages, with a persistent English/Korean selector and Skip action; the guide can be replayed from Settings.
- Offers an overnight standby mode from Home's moon button: an all-black,
minimum-brightness screen that keeps the phone awake. With the optional
GF2logger accessibility service turned on, standby records members by itself
five minutes before each chosen server's daily reset: it starts capture, opens
the game, taps Start on the title screen, waits for the roster, closes the game
from Recents, and locks the phone after the last server. The service only taps
while the game is in front and reads nothing on screen except the foreground
app and the app names on Recents cards.
minimum-brightness screen that keeps the phone awake and unlocked until
standby ends; on a phone with a PIN, pattern, or password it says so and asks
once before the first use. With the optional GF2logger accessibility service
turned on, standby records members by itself five minutes before each chosen
server's daily reset: it starts capture, opens the game, taps where Start sits
on the title screen (every few seconds, until the game reports a login, and
for two minutes at most), waits for the roster, closes the game from Recents,
and locks the phone after the last server. Android 8 offers no lock action, so
there the phone is left to its own screen timeout. Tapping the standby screen
or switching to another app leaves standby without locking the phone. The
service only taps while the game is in front and reads nothing on screen
except the foreground app and the app names on Recents cards.
- On a phone without a PIN, pattern, or password, can instead record every day
on a schedule from Settings: an alarm wakes the phone before each chosen
server's reset, records members the same way, and turns the screen off again.
Expand All @@ -56,6 +61,9 @@ never stored.
Selecting a detected Platoon automatically follows that profile's saved region.
- Registers the HaoPlay (`com.haoplay.game.and.exilium`) and Darkwinter
(`com.Sunborn.SnqxExilium.Glo`) Android clients as separate VPN targets.
The signing certificate first seen for each client is trusted; a client
reinstalled under another signer is neither captured nor opened until you
trust it again in Settings.
- Creates UTF-8 Platoon-member CSV files with this column order:

```text
Expand Down
4 changes: 2 additions & 2 deletions README_KR.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ mobileGF2logger는 서클장을 위한 가벼운 비루팅 앱입니다. Android
- 새 서클은 확인된 클라이언트에 맞는 서버를 사용자가 선택할 때까지 패킷을 제한된 메모리에만 보관하며, 강제 종료 또는 프로세스 종료 시 확인되지 않은 데이터를 버립니다.
- 서버 정보는 데이터를 이동하지 않고 수정할 수 있으며, 서클 삭제는 두 번의 확인과 정확한 서클 이름 입력을 거쳐 해당 격리 데이터만 제거합니다.
- 첫 사용 시 메인, 설정, 서클 관리, 주간 기능, 파싱 패킷 화면을 안내하며, 한국어/English 전환과 건너뛰기를 지원합니다. 안내는 설정에서 다시 볼 수 있습니다.
- 홈의 달 버튼으로 밤샘 대기 모드를 켤 수 있습니다. 화면을 완전히 검게, 밝기를 최소로 두고 휴대전화를 깨어 있게 유지합니다. 선택 사항인 GF2logger 접근성 서비스를 켜면, 선택한 서버마다 일일 초기화 5분 전에 캡처를 시작하고 게임을 열어 타이틀 화면의 시작을 누른 뒤 멤버 명단을 기다렸다가, 최근 앱 화면에서 게임을 닫고 마지막 서버가 끝나면 휴대전화를 잠급니다. 이 서비스는 게임이 앞에 있을 때만 누르며, 앞에 있는 앱과 최근 앱 카드의 앱 이름 외에는 화면 내용을 읽지 않습니다.
- 홈의 달 버튼으로 밤샘 대기 모드를 켤 수 있습니다. 화면을 완전히 검게, 밝기를 최소로 두고 대기 모드가 끝날 때까지 휴대전화를 잠그지 않은 채 깨어 있게 유지합니다. PIN·패턴·비밀번호가 있는 휴대전화에서는 처음 사용할 때 이 점을 알리고 한 번 확인받습니다. 선택 사항인 GF2logger 접근성 서비스를 켜면, 선택한 서버마다 일일 초기화 5분 전에 캡처를 시작하고 게임을 열어 타이틀 화면의 시작 위치를 누른 뒤(게임이 로그인을 알릴 때까지 몇 초마다, 최대 2분) 멤버 명단을 기다렸다가, 최근 앱 화면에서 게임을 닫고 마지막 서버가 끝나면 휴대전화를 잠급니다. Android 8에는 잠금 동작이 없어 화면 자동 꺼짐에 맡깁니다. 대기 화면을 누르거나 다른 앱으로 전환하면 휴대전화를 잠그지 않은 채 대기 모드가 끝납니다. 이 서비스는 게임이 앞에 있을 때만 누르며, 앞에 있는 앱과 최근 앱 카드의 앱 이름 외에는 화면 내용을 읽지 않습니다.
- PIN·패턴·비밀번호가 없는 휴대전화에서는 설정의 예약 자동 기록으로 매일 기록할 수도 있습니다. 선택한 서버마다 초기화 전에 알람이 휴대전화를 깨워 같은 방식으로 멤버를 기록하고 화면을 다시 끕니다.
- 화면을 가장자리까지 그리며, 회전·테마·언어 변경이나 프로세스 재생성 후에도 작성 중인 내용과 선택, 대기 중인 내보내기를 유지합니다.
- 영어와 한국어, 시스템/라이트/다크 테마를 지원합니다. 알려진 Darkwinter/HaoPlay 6개 서버 지역의 초기화 시각을 기기 시간대로 환산하며, 감지된 서클을 선택하면 해당 프로필에 저장된 지역을 자동으로 따릅니다.
- HaoPlay(`com.haoplay.game.and.exilium`)와 Darkwinter(`com.Sunborn.SnqxExilium.Glo`) Android 클라이언트를 별도의 VPN 대상으로 등록합니다.
- HaoPlay(`com.haoplay.game.and.exilium`)와 Darkwinter(`com.Sunborn.SnqxExilium.Glo`) Android 클라이언트를 별도의 VPN 대상으로 등록합니다. 클라이언트마다 처음 확인한 서명 인증서를 신뢰하며, 다른 서명으로 다시 설치된 클라이언트는 설정에서 다시 신뢰하기 전까지 캡처하거나 실행하지 않습니다.
- 다음 열 순서의 UTF-8 서클 멤버 CSV 파일을 만듭니다.

```text
Expand Down
Loading
Loading