Định dạng nhật ký của Android là gì?


8

Tôi đang cố gắng thu thập dữ liệu về điện thoại của mình bằng cách phân tích các tệp nhật ký /dev/log. Tôi đặc biệt nhìn vào /dev/log/main. Tôi luôn nghĩ rằng bất kỳ định dạng nhật ký lành mạnh nào cũng sẽ là văn bản thuần túy, tuy nhiên các tệp này dường như là nhị phân hoặc trong một số ký tự mà cả tôi và các trình soạn thảo văn bản Linux của tôi đều không thể xác định được.

Định dạng là gì?

Dưới đây là một vài ảnh chụp màn hình:

  • Đầu tiên, đây là một đoạn của nhật ký như được giải thích bởi vim( ^@đề cập đến byte null; Tôi không chắc chắn về các chuỗi điều khiển màu khác): vim

  • Tiếp theo, đây là bản ghi của trình soạn thảo hex: biên tập hex

Tôi đang sử dụng Galaxy Nexus chạy Jelly Bean. Các nhật ký được thu thập bằng root và trình giả lập thiết bị đầu cuối, vì aLogcat dường như không sử dụng root và do đó không thể truy cập tất cả thông tin đăng nhập.

Câu trả lời:


6

Nếu bạn muốn thông tin lành mạnh, tôi khuyên bạn nên sử dụng các lệnh lành mạnh :) (không có ý xúc phạm, chỉ đùa thôi). Vì vậy, câu hỏi nên đọc:

Làm cách nào để có được thông tin nhật ký từ thiết bị Android?

Và bây giờ chúng tôi ở phía tốt hơn. Có nhiều cách tiếp cận có thể được sử dụng:

  • sử dụng các ứng dụng để hiển thị thông tin nhật ký (mã màu)
  • sử dụng ADB (một phần của SDK Android) để trích xuất từ ​​xa cùng một thông tin
  • sử dụng ssh từ xa (hoặc ứng dụng đầu cuối cục bộ) để lấy thông tin trực tiếp từ thiết bị

Để xử lý hoàn toàn chủ đề này phải mất nhiều hơn câu trả lời đơn giản này (nếu quan tâm, bạn có thể ví dụ như tìm kiếm thông tin chi tiết hơn về nhiều trang web, hoặc trong cuốn sách của Andrew Hoog của Android Forensics: Điều tra, phân tích và An ninh di động cho Google Android , mà tôi đã có vinh dự được dịch sang tiếng Đức. Có lẽ có nhiều nguồn khác nữa.

Vì vậy, tôi sẽ chỉ đưa ra một vài ví dụ ở đây để giúp bạn bắt đầu:

Sử dụng ứng dụng

Ứng dụng được biết đến nhiều nhất trong bối cảnh này là aLogcat , có sẵn miễn phí trong cửa hàng play (và nhà phát triển sẽ vui vẻ chấp nhận đóng góp của bạn cho biến thể khác của cùng một ứng dụng). Bạn sẽ tìm thấy một ảnh chụp màn hình dưới 1 . Ứng dụng cho phép bạn lọc nhật ký, bắt đầu / dừng ghi thông điệp nhật ký và thậm chí lưu các đoạn đã ghi vào Thẻ SD của bạn - tất nhiên là bằng văn bản thuần túy, như bạn yêu cầu.

Một ứng dụng khác trong phần này là Log Collector , đơn giản là cố gắng lấy toàn bộ nhật ký có sẵn và gửi nó qua menu chia sẻ 2 .

aLogCat Trình thu thập nhật ký

Cầu gỡ lỗi Android (ADB)

Bộ công cụ phát triển phần mềm Android (SDK) bao gồm adblệnh cho các tác vụ khác nhau. Trong số nhiều người khác, nó cung cấp các adb shelllệnh để thực thi trên thiết bị. Sử dụng điều này, bạn cũng có thể thu thập thông tin nhật ký mong muốn của mình: Chỉ cần tiền tố bên dưới các lệnh với adb shell.

Dấu nhắc lệnh trên thiết bị

Sử dụng ứng dụng đầu cuối (ví dụ: Trình mô phỏng đầu cuối Android hoặc IDE IDE ), bạn có thể truy cập nhật ký trực tiếp tại dấu nhắc lệnh, cục bộ trên thiết bị của mình. Thoải mái hơn một chút, điều này có thể được thực hiện khi chạy máy chủ ssh (ví dụ: DroidSSHd hoặc DropBear SSH Server ) trên thiết bị của bạn và truy cập nó từ máy tính của bạn. Bằng cách này bạn có thể làm việc trên một màn hình lớn, trong khi điều tra nhật ký của bạn.

Các lệnh để truy cập thông tin nhật ký của bạn

Có rất nhiều lệnh mạnh mẽ mà bạn có thể sử dụng để truy cập thông tin nhật ký của mình từ dòng lệnh và tôi sẽ chỉ đưa ra một vài ví dụ ở đây.

dmesg

Các dmesglệnh trích xuất các bản ghi kernel:

$ dmesg
<6>[82839.126586] PM: Syncing filesystems ... done.
<7>[82839.189056] PM: Preparing system for mem sleep
<4>[82839.189361] Freezing user space processes ... (elapsed 0.05 seconds) done.
<4>[82839.240661] Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
<7>[82839.242279] PM: Entering mem sleep
<4>[82839.242889] Suspending console(s) (use no_console_suspend to debug)
<7>[82839.252410] vfp_pm_save_context: saving vfp state
<6>[82839.252716] PM: Resume timer in 26 secs (864747 ticks at 32768 ticks/sec.)
<6>[82842.091369] Successfully put all powerdomains to target state
<6>[82842.092468] wakeup wake lock: wifi_wake

logcat

Với logcat, bạn có thể truy cập nhiều thông tin đăng nhập - nhưng hầu hết các lần, điều này sẽ yêu cầu root. Nó có một số tham số để lọc thông tin, ví dụ bằng cách chọn bộ đệm nhật ký để đọc -b. Vui lòng đọc thông tin được cung cấp trên trang nhà phát triển trên logcat để biết chi tiết. Để cung cấp cho bạn hai ví dụ: logcat -b eventssẽ liệt kê các sự kiện hoặc logcat -b radiothông tin về chế độ radio của thiết bị.

bãi rác và bãi rác

Hai lệnh dumpsysdumpstatecung cấp cho bạn thông tin hệ thống chi tiết:

$ dumpsys
Currently running services:
    LocationProxyService
    SurfaceFlinger
    accessibility
    account
    activity
<snip>
DUMP OF SERVICE account:
Accounts: 1
    Account {name=xxxxxxx@googlemail.com, type=com.google}
<snip>
DUMP OF SERVICE alarm:

$ dumpstate
========================================================
== dumpstate: 2012-08-18 23:39:53
========================================================
Build: Gingerbread GWK74 - CyanogenMilestone2
Bootloader: 0x0000
Radio: unknown
<snip>
------ MEMORY INFO (/proc/meminfo) ------
MemTotal: 487344 kB
MemFree:   10436 kB
Buffers:   14136 kB
Cached:    145460 kB
<snip>

báo cáo lỗi

Và nếu bạn quá lười để nhớ tất cả, chỉ cần sử dụng bugreportlệnh - lệnh gọi tất cả ở trên và gói nó để báo cáo lỗi, humm, tốt cho nhà phát triển ...

Tất nhiên, bạn có thể chuyển hướng đầu ra từ tất cả các lệnh đó sang một tệp để sao chép vào máy tính của mình và trong hầu hết các trường hợp bạn nên làm như vậy - vì bộ đệm màn hình của bạn sẽ quá nhỏ để xử lý tất cả: bugreport > /mnt/sdcard/bugreport.txtsẽ là một ví dụ cho phần đó.


$ dmesghay dmsg? Phải có một lỗi đánh máy trong một trong số này :)
jadkik94

@ jadkik94 đó là phần yêu thích của tôi để kiểm tra xem có ai thông báo không ... Không, hãy quên phần thứ hai - và cảm ơn vì đã chú ý :) Đã sửa.
Izzy

Tôi luôn quên cái nào là chính xác :) và luôn quá lười biếng để tìm kiếm nó ...: P
jadkik94

3
Tất cả đều được gửi đến bash-auto-hoàn thiện :) Hơn nữa: Tôi đã sao chép các ví dụ từ cuốn sách của mình, nơi tôi đã sao chép nó vào một ví dụ thực tế, vì vậy tôi biết cái nào phải là phiên bản chính xác. ..
Izzy

2
Việc thay đổi phải được thực hiện với sự cho phép mới để đọc nhật ký từ các ứng dụng khác . Hiện tại aLogcat chỉ có thể đọc nhật ký của chính nó. Để có được nó để đọc nhật ký từ các ứng dụng khác, bạn cần cung cấp cho nó quyền này một cách thủ công như sau:adb shell pm grant com.nolanlawson.logcat android.permission.READ_LOGS
Chahk

4

Đối với các nhà phát triển (hoặc các bên quan tâm khác), những người cần phân tích tệp thô này, đây là một số tài nguyên:

Định dạng thực của định dạng nhật ký được tách ra tại:

Một bản sao của các phần có liên quan, được chú thích một chút và sắp xếp lại để thuận tiện cho bạn:

#define LOGGER_ENTRY_MAX_LEN (5*1024)

struct log_msg {
    union {
        /* Maximum size of entry: 5121 bytes */
        unsigned char buf[LOGGER_ENTRY_MAX_LEN + 1];

        struct logger_entry_v3 entry;
        struct logger_entry_v3 entry_v3;
        struct logger_entry_v2 entry_v2;
        struct logger_entry entry_v1;
    } __attribute__((aligned(4)));
}
/*
 * The userspace structure for version 1 of the logger_entry ABI.
 * This structure is returned to userspace by the kernel logger
 * driver unless an upgrade to a newer ABI version is requested.
 */
struct logger_entry {
    uint16_t    len;    /* length of the payload */
    uint16_t    __pad;  /* no matter what, we get 2 bytes of padding */
    int32_t     pid;    /* generating process's pid */
    int32_t     tid;    /* generating process's tid */
    int32_t     sec;    /* seconds since Epoch */
    int32_t     nsec;   /* nanoseconds */
    char        msg[0]; /* the entry's payload */
} __attribute__((__packed__));

/*
 * The userspace structure for version 2 of the logger_entry ABI.
 * This structure is returned to userspace if ioctl(LOGGER_SET_VERSION)
 * is called with version==2; or used with the user space log daemon.
 */
struct logger_entry_v2 {
    uint16_t    len;    /* length of the payload */
    uint16_t    hdr_size; /* sizeof(struct logger_entry_v2) */
    int32_t     pid;    /* generating process's pid */
    int32_t     tid;    /* generating process's tid */
    int32_t     sec;    /* seconds since Epoch */
    int32_t     nsec;   /* nanoseconds */
    uint32_t    euid;   /* effective UID of logger */
    char        msg[0]; /* the entry's payload */
} __attribute__((__packed__));

struct logger_entry_v3 {
    uint16_t    len;    /* length of the payload */
    uint16_t    hdr_size; /* sizeof(struct logger_entry_v3) */
    int32_t     pid;    /* generating process's pid */
    int32_t     tid;    /* generating process's tid */
    int32_t     sec;    /* seconds since Epoch */
    int32_t     nsec;   /* nanoseconds */
    uint32_t    lid;    /* log id of the payload */
    char        msg[0]; /* the entry's payload */
} __attribute__((__packed__));

Bạn có thể phân biệt các phiên bản khác nhau bằng cách nhìn vào byte thứ ba và bốn byte. Định dạng rõ ràng cũng phụ thuộc vào độ bền của nền tảng của bạn. Đối với tin nhắn v1, __padbằng 0. tin nhắn v2 (và v3) sử dụng 24 ( 0x18).

Đối với main, radiosystemcác bản ghi msglĩnh vực được hiểu như sau ( nguồn ):

  • mức độ ưu tiên: 1 byte
  • thẻ: 0 hoặc nhiều byte
  • nghĩa đen \0là dấu phân cách
  • tin nhắn: 0 hoặc nhiều byte
  • nghĩa đen \0là kẻ hủy diệt

Nếu thông báo này bị cắt ngắn, dấu vết \0có thể bị thiếu.

eventsTuy nhiên, đối với nhật ký, msgtrường chứa dữ liệu nhị phân sau:

  • Thẻ: Khóa số nguyên 4 byte từ tệp "/ system / etc / event-log-tags".
  • Thông báo: cây nối tiếp bắt đầu từ nút gốc. Mỗi nút cây bắt đầu bằng giá trị 1 byte từ bảng liệt kê AndroidEventLogType:
    • EVENT_TYPE_INT - giá trị nút là số nguyên 4 byte
    • EVENT_TYPE_LONG - giá trị nút là số nguyên 8 byte
    • EVENT_TYPE_STRING - giá trị nút là số nguyên 4 byte length, theo sau là các lengthbyte chứa chuỗi được mã hóa UTF8
    • EVENT_TYPE_LIST - giá trị nút là một byte đơn length, theo sau là các lengthnút cây riêng của từng nút AndroidEventLogType.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.