‏הצגת רשומות עם תוויות PWS. הצג את כל הרשומות
‏הצגת רשומות עם תוויות PWS. הצג את כל הרשומות

יום ראשון, אוגוסט 04, 2024

כל הכבוד לפיקוד העורף לקח להם כמעט חמש שנים לחזור למערכות הבטוחות , שדואגות לפרטיות , שלא דורשות חומרה יקרה

לפני כמעט חמש שנים פיקוד העורף הפסיק את השימוש ב CellBroadcasting ,בזמנו הופתעתי לרעה מזה, כי כמעט כל מי שעבד אי פעם בתשתיות או תקשרות יודע , שאין מה לסמוך על דברים חדשים וצריך תמיד להשתמש בדברים הפשוטים ביותר שנבדקו בשביל לבנות מערכות לאורך זמן. CB נתמך בנוקיות שלי משנות ה2000 המוקדמות ועד המכשרים החדשים ביותר שקיימים היום, זה לא דורש שום תוכנה נוספת , אז גם טלפון שלא שודרג מזה מספר שנים יקבל את ההתרעות. אבל נניח ויש לכם טלפון למשל אנדרוייד ישן, אז הוא לא יוכל להפעיל חלק מהאפליקציות החדשות (כי אפילו אין CAים מספיק חדשים).

אז בשעה טובה ומוצלחת לאחר עבודה מאומצת הם סוף סוף החליטו להחזיר את המערכת לעבודה ולשימוש.

מי שרוצה להכיר את נושא ההתראות יכול לקרוא את הTSים , ואפילו כתבתי פוסט קצר על הנושא הזה כמעט לפני עשור.
לפי מה שהצלחתי להבין אנחנו די רחוקים ממערכות ה EU-ALERT שעובדת הייטב.

אם אתם יודעים מה טוב בשבילכם , וכבר עברתם למכשיר כמו ה L5 או נגזרות האורן , בעצם גם אופן מוקו יהיה פתרון טוב האמת, החיים שלכם די פשוטים בשביל לעבוד עם CB. 

מי שלא בטוח אם זה מאושר או לא, מספיק לשלוח :

AT+CSCB=0,"0-6000","0-15"
למודם שלנו בשביל לבצע הרשמה לשירותים הללו, וככה בכל מקרה של התראה אתם תקבלו את המידע, במידה וקיבלתם סימני שאלה במקום המלל הנדרש יהיה נחמד אם תשלחו מידע לאנשים הטובים ב #mobian , אני מצפה שיהיו בעיות בקידוד המלל, כי מה לעשות אנשים תמיד עושים באגים בקידודים.
 
באופן טכני ניתן אפילו להשתמש ב usbip בשביל להעביר את המודם של האורן שלכם למחשב הנייד שלכם, ובצורה כזאת תקבלו את ההתראות ממש על המסך של המחשב הנייד. למה זה טוב ? כי זה מגניב ! זה למה.
 
מדוע צריכים לבצע הרשמה לכל האפשרויות ? בפועל ב PWSים יש מספר רמות של התראות כאלה שנלחים לא משנה מה (רעידת אדמה) , וכאלה שצריך להרשם אליהם (למשל אירועי חטיפה) ממה שהצלחתי ללדלות מהתקשורת אין שום מידע לאילו ערוצים הם ישלחו את הנושא, בעבר היו אלא ערוצי ה900. 

יש לי חשד שגם הפעם לא חיברו את מערכת ה PWS עם המערכות שמספקות לנו התראות רעידת אדמה (כמו אלא המורכבים בבתי הספר או מערכת תרועה), אני זוכר כאשר היו דעידות אדמה מערכת ה PWS הארצית לא שלחה התראה ב http כלל וכלל.
 
אני מקווה שאצלנו בדומה לדרא"פ יממשו מערכת יצרת קשר מהשתמש ב USSD , מדוע USSD ? כי הדירשות שלו מינמיליות ביותר , וזה יכול לעבוד בכל מכשיר סלולארי בשונה מאפליקציות שעובדות *רק* על מכשירים יקרים ועדקניים.

מהניסיון שלי בעבר , היו בעיות CB בחלק מהרשתות הרחבות על רשתות אחרות, למשל אדם הנמצע במצפה רמון מדווח כאלו נמצא ברעננה, אני מאמין שעם השנים זה כבר תוקן וכבר לא יהיו בעיות כאלה. נקווה לטוב.

יום חמישי, ספטמבר 12, 2019

משלוח התראות של פיקוד העורף ב KDE ו Gnome

לפני תקופה כתבתי תסריט שמשך את התראות פיקוד העורף ושלח התראות בממשק KDE, עבדתי קצת על הקוד ועכשיו אני די מרוצה מאיך שהקוד נראה. העירו  לי על זה שלא פרסמתי את הקוד המעודכן.

צריך להוריד את סמליל פיקוד העורף ולשים אותו ב
/usr/share/oref/240px-Pakar.svg.png

כשיש התראה קופץ חלון התראה גרפי:

בשביל חיבור ממשק טקסט (משל ssh) יש גם התראת טקסט :
Broadcast message from user@pi (pts/4):         
                                                                               
Oref : [{ 
"title" : "התרעות פיקוד העורף ",
"data" : ["מבקיעים"]
}]


הקוד עצמו  :
#!/bin/bash
#License : MIT
#Copyright (c) 2019 Boris Shtrasman

#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:

#The above copyright notice and this permission notice shall be included in all
#copies or substantial portions of the Software.

#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
#SOFTWARE.

if [ $# -ne 1 ]; then
echo "$0 expect alert url"
echo "example:"
echo "$0 http://www.oref.org.il/WarningMessages/Alert/alerts.json";
exit 1
fi
#send a notification for each user that has X session, and accept notif
function notify_user()
{
     users=($(who | sed -nr "s/([a-z]*)[ \t]*.*\((:[^)]+)\).*/\1,\2/p" | sort|uniq))
     summary=$1
     text=$2
     for i in "${users[@]}"
     do
        user=$(echo $i | cut -d',' -f1)
        screen=$(echo $i|cut -d',' -f2)
        id=$(id -u $user)
        DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus
        #get dbus for plasma
        [[ ! -z "ps aux | grep plasma_session|grep -vvv grep" ]] && eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u user plasma_session)/environ )
        #get dbys for gnome sessions
        [[ ! -z "ps aux | grep gnome_session|grep -vvv grep" ]] && eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u user gnome_session)/environ )

        #I use screen to avoid blocking the process for other connected users, I'm obligated to use sudo as notify-send need to be run under the same user which own the session.
        #This unfurtunatly will take over fullscreen Firefox or flash video
        screen -Dm sudo -u $user /bin/bash -c "DISPLAY=$screen DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS  /usr/bin/notify-send -t 15000 -i /usr/share/oref/240px-Pakar.svg.png -u critical \"$summary\" \"$text\""

      done
} 

result=$( wget --header="Referer: https://www.oref.org.il/" \
--header="X-Requested-With: XMLHttpRequest" --header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" --header="Accept: application/json, text/javascript, */*; q=0.01"  -qO-  $1)

if [ -e "$result" ]; then
        echo "empty"
        exit 0
fi

if [ ${#result} -lt 1 ]; then
       exit 0
fi

#Send alert over all shells on the system.
wall "Oref : [$result]"
#Send alert for each UI session that support notify-send
title=$(echo $result|jq -s -r '.[].title')
amount_of_alerts=$(echo $result |jq -s '.[].data | length')
#if there had been no data members we can not iterate over it
if [ ! -z "$amount_of_alerts" ]; then
  for (( alert_index = 0 ; alert_index < $amount_of_alerts; alert_index++))
  do
     area=$(echo $result|jq -r -s ".[].data| .[$alert_index]")
     notify_user  "Oref $title $date" "$area"
  done
fi

exit 0


בדיוק כמו בפעם הקודמת צריך להשתמש בשעון עצר של systemd (פורסם בלינק הקודם).

עריכה :


הקוד הזה דורש ש notify-send , jq ו wget יהיו מותקנים במערכת.

הקוד הזה מיועד ל X , אין לי wayland מותקן,  ואין לי דרך לדעת איך wayland עובד עם notify-send או אם notify_user()  תעבוד שם.

יש להפעיל את התסריט הזה מטיימר  או שורת cron, בשביל למשוך התראות חדשות 

הטסריט הזה לא מושך התראות פנים ישוביות - ישנן התראות שמופעלות רק ביישובים עצמם , וההתראות האלה אינן מפורסמות ע"י אתר פיקוד העורף.

יום שני, ינואר 14, 2019

משלוח התרעות

השבוע שמחתי לשמוע שהארגון שמכריז על התראות החליטו לחסום גישה לכל מה שהוא לא הגישה הרשמית (אתר או האפליקציה שלפחות בעבר נכתבה ע"י חברה זרה).

האפליקציה מהווה חסם לפחות עבורי בעקבות זאת שהיא אפליקציה קניינית, שהקוד שלה סגור,  שדורשת העברת פרטים לחברה אחרת.  יש מספיק אנשים שיכולים לפענח את החבילה ולהבין ולספר מה הולך בפנים בצורה טובה יותר ממני. אני אתן לאחרים שייפענחו ויספרו על החולשות הפוטנציאליות ואלו שהן בפועל בקוד.

ביצעתי סקירה קצרה למערכת שהיא הפתרון הרשמי היחיד שניתן למי שלא מסכים להתקין וזאת בעקבות הניתוק של מערכת ההתרעות ב CB.

מערכות ה CB הן הגישה המועדפת בתקשורת סלולארית. וככל ניתן לראות איך בונים מערכות התרעה כאן וכאן , כאן כאן כמובן שיש כבר דוגמאות להתרעה בגישה דומה למה שניסו לבנות פה. סקרתי לפני מספר שנים את הגישות הפופלאריות למערכות התרעה ציבוריות וניתן לקרוא על זה כאן.

בעבר כבר סקרתי מספר פעמים את הנושא של CB ועל הכשלון בזמן תרגיל לאתר התרעות על פריחת כלניות (ואשרי המאמין שערוץ ה data שלו יעבוד טוב מספיק בזמן חירום).


כנראה היתה איזה בעייה קוסמית מדהימה, פריצה של האקר או באג שכנראה יתוקן בשעות הקרובות וזה בכלל אתר פיתוח ולא אתר רשמי מה שאני ראיתי.

הבעיות בהן אני נתקלתי הן - כמובן שיכול להיות אדם אחר שבשבילו אלו לא יהיו בעיות :

אפליקצית קניינית,בקוד סגור, שמקבלת גישה להרשאות GPS (לפי חלק מהדווחים) שלפחות בעבר הכילה סממנים של ייצור חיצוני.

שירותים של חברות זרות מותמעים בתוך האתר, וחושפים כל מי שמתחבר לאתר לבילוש ע"י חברות חיצוניות והתקפה כמי שמשתמש בשירות.

באתר מוטמעים משאבים ורכיבים שנמשכים משרתים של חברות זרות הכוללות את פייסבוק , גוגל, אינסטאגרם, user1st ועוד הרבה אחרים (גישה לאתר תספק לכם את כל הרשימה של השירותים הנדרשים). אם אתם רוצים מרצה שיסביר לכם איך מתחילים לחשוב על פרטיות ומניעת התקפות אני ממליץ בחום רב על drm.org.il או אפילו לחפש בעמותת המקור או לשלוח שאלה לlinux-il (אין לי קשר לאף אחד מהם אבל אני מאמין שהם מספיק טובים) אני לא הולך להסביר לכם איך בונים  מערכות שבנויות מראש מוגנות או למה זה רעיון גרוע להשתמש בשירותי מעקב באתר שמספק דבר כה בסיסי.
לפחות במקרה אחד שירותי ההתרעה הגיעו כביכול מכתובת שהיתה בשליטת חברה זרה בעבר. שירותי ההתרעה לא הוגשו ממערכות הענן הציבורי של המדינה או ממערכות שהוכרזו בצורה רשמית כי הן בשליטת המדינה.

המערכת (אתר) בנוייה בצורה שאיננה מסוגלת לעבוד כאשר אין JS מופעל, מערכות התרעה ציבוריות מפותחות בצורה שהם צריכות לעבוד במספר רב של מישורים.

המערכת לא ביצעה ניתוק לפי GeoIP, או מנעה גישה למי שאינו ניגש עם כתובת שמופרסמת בתוך המדינה (בדקתי בעבר כי ניתן לקבל גישה להתרעות בזמן התרעה ממדינה שאינה ידידיתית במיוחד). 

לא הוצגה אפשרות לבצע אימות צד לקוח ע"י חותמות לקוח (אם היו רוצים להגביל רק לאכלוסיה של אפליקציות מסויימות).
לא הוצג תיעוד ודרך לבצע pooling של הבקשות משרת התרעות מאבוטח לדוגמה ע"י XEP-0127.
לא הוצג תיעוד של ה API שאנשים צריכים להשתמש בו, כאשר הם מפתחים מערכת שצריכה להתממשק מול מערכת ההתרעות. כל אדם שיש לו אתר אמור להציג את ההתרעות האלה אצלו.

המערכת של המרכז לא העבירה התרעות מארגונים אחרים (לדוגמה מ ims.gov.il)
קיימת חוסר התאמה בין חותמת המשמות את TLS לבין השרתים שמספקים את השירות בפועל הרי הם יודעים למה כל כך חשוב שתהיה התאמה (ואנחנו יודעים איך מגדירים CDN משרתים מקומיים וחס שלום לא ממשהוא שיושב בחברה צד שלישית).

כי אם לא תקבלו את השגיאה הזאת ותחשבו שהאתר נפרץ (ולגמרי בצדק!)

wget https://www.oref.org.il/WarningMessages/Alert/alerts.json

--2019-01-14 18:20:03--  https://www.oref.org.il/WarningMessages/Alert/alerts.json
Resolving www.oref.org.il... 109.226.50.136, 109.226.50.139
Connecting to www.oref.org.il|109.226.50.136|:443... connected.
ERROR: cannot verify www.oref.org.il's certificate, issued by `/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA':
  Self-signed certificate encountered.
ERROR: certificate common name `a248.e.akamai.net' doesn't match requested host name `www.oref.org.il'.
To connect to www.oref.org.il insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

את ההודעה תקבלו ב wget 1.11.4 של gnuwin אבל לא בגרסאות אחרות שהן פחות מחמירות.
את אותה הבדיקה אפשר לבצע ע"י ביצוע dig -x לכתובת אותה תקבלו מה CDN ולבצע השוואה,

ואם יש לכם מנהל רשת חשדן הוא בצדק צריך לנתק את האתר הזה (כי יש פה תקלה חמורה או התקפה חייה).

השירות מסופק מדומיין משני ציבורי (שפתוח לכל עמותה וארגון) ולא תחת הדומיין המשני שהיה אמור להיות (gov לדוגמה). יש משמעות לכל second-level domain.

היו כבר פריחת כלניות ללא הודעה מוסדרת, והיו פריחות שווא  -  זו כמובן היתה תקלה בערב שלא היתה הודעה על פריחה (למרות שהייתה התרעה קולית) או שהפריחה היתה מחוץ לטווח.

ולאחר שסיימתי את זה.

אני איש שורת הפקודה , והמערכות שאני בונה בדר"כ הם עד כמה שיותר פשוטות.
הנה דוגמה לגישה להתרעות ע"י wget :

wget --header="Referer: https://www.oref.org.il/" \
 --header="X-Requested-With: XMLHttpRequest" \
 --header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"\
 --header="Accept: application/json, text/javascript, */*; q=0.01" \
 -qO- https://www.oref.org.il/WarningMessages/Alert/alerts.json?v=1


ב HTTP אנחנו משתמשים במה שמכונה כותרות (headers) אני פשוט הוספתי את הכותרות הבאות :
referer , X-Requsted-With, U-A, Accept.

אם רוצים לעבוד ממש לפי הספר צריך לבצע שתי בקשות , אחת בשביל לקבל את עוגיה בשם TS013a1194 והשנייה לשלוח את מה שהתקבל.
ובתוצאה נקבל :

BOM במקרה שיש דף ריק, אלוהים יודע למה אבל זה לא נורא.
בזמן התרעה נקבל מבנה json שבעבר נראה בערך כך :

{ 
"id" : "1542042267248",
"title" : "התרעות פיקוד העורף ",
"data" : [
    "מרכז הנגב 254",
    "עוטף עזה 225",
    "מרכז הנגב 255"
]
}
ה id הוא פשוט חותמת זמן מתי נשלחה (ניתן לחלק באלף ואז להשוות מול time_t רגיל).

לקח לי יותר זמן לכתוב את הפוסט הזה מאשר לזהות את התיקון הנדרש, אני בערך מנחש מדוע רצו לא לספר כמה התרעות יש בזמן אמת (לא ליצור פניקה לדוגמה).

טוב גיק או לא,אני לא יכול בלי לתת תשובה שעובדת ב systemd נכון ?כמובן שברגע ששוב יעשו תרגיל בלי לרשום זאת בצורה ברורה אנשים יקבלו התרעה על פריחה באזור או אם שוב ישנו את המבנה אז יהיה צריך לתקן את התסריט.

את התסריט אפשר להתקין על כל מערכת שמכילה bash , jq notify-send ו dbus. אפשר במקום להשתמש ב dbus להשתמש ב wall אבל אני לא אוהב את העיבוד ברירת המחדל ל wall.


קודם כל תסריט ביצוע , הטסריט מצפה שהתוכנות הבאות יהיו מותקנות : bash, jq, notify-send,dbus /usr/local/bin/windflower.sh 

#!/bin/bash
 #Copyright (c) 2019 Boris Shtrasman
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:

#The above copyright notice and this permission notice shall be included in all
#copies or substantial portions of the Software.

#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
#SOFTWARE.

if [ $# -ne 1 ]; then
echo "$0 expect alert url"
echo "example:"
echo "$0 http://www.oref.org.il/WarningMessages/Alert/alerts.json";
exit 1
fi

# notify all connected users on each connected screen (full screen flash video have issues with OSD)
function notify_user()
{
     users=($(who | sed -r "s/([a-z]*)[ \t]*.*\(([^)]+)\).*/\1,\2/p" | sort|uniq))
     for i in "${users[@]}"
     do
        user=$(echo $i | cut -d',' -f1)
        screen=$(echo $i|cut -d',' -f2)
        id=$(id -u $user)
        echo $user-$screen-$id
        DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus
        #get dbus for plasma
        [[ ! -z "ps aux | grep plasma_session|grep -vvv grep" ]] && eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u user plasma_session)/environ )
        #get dbys for gnome sessions
        [[ ! -z "ps aux | grep gnome_session|grep -vvv grep" ]] && eval $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u user gnome_session)/environ )
     
        sudo -u $user DISPLAY=$screen DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS  \
                /usr/bin/notify-send  "$@"
      done
} 
#Get a broken json file from our windflower blossom provider
result=$( wget --header="Referer: https://www.oref.org.il/" \
               --header="X-Requested-With: XMLHttpRequest"  \
               --header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"\
               --header="Accept: application/json, text/javascript, */*; q=0.01" \
               -qO- https://www.oref.org.il/WarningMessages/Alert/alerts.json?v=1 $1)

if [ -e "$result" ]; then
        echo "empty"
        exit 0
fi

if [ ${#result} -lt 5 ]; then
        exit 0
fi

title=($echo $result|jq -s '.[].title')
area=$(echo $result|jq -s '.[].data')

if [ -n "$area" ]; then   
   notify_user -t 15000  "Windflower $title $date" "$area" 
fi

exit 0
נמשיך ל קובץ ה service:
cat /etc/systemd/system/windflower.service 
[Unit]
Description=Windflower bloosom

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/windflower.sh http://www.oref.org.il/WarningMessages/Alert/alerts.json

והטיימר אני הולך על חמש שניות אבל אפשר לבצע טיימר דינאמי יפה יותר מאשר זה.

בגדול נכון יהיה להשתמש ב Cache-Control שחוזר לנו מהשרת, אבל אני בחרתי ערך יפה יותר :

HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Content-Type: application/json
  Accept-Ranges: bytes
  ETag: W/"3ae4461aeacd41:0"
  Content-Length: 3
  Cache-Control: max-age=3
  Connection: keep-alive

הטיימר שלי נראה כך :
cat /etc/systemd/system/windflower.timer 
[Unit]
Description=Windflower bloosom
[Timer]
OnUnitActiveSec=5s
OnBootSec=100s
OnCalendar=*:*:0/5

[Install]
WantedBy=timers.target
ועכשיו נשאר רק לצפות בפריחה המדהימה.

יום שלישי, מרץ 21, 2017

כל הכבוד לספק הטלפוניה שלי

כתבתי בעבר הסתייגות לגבי השימוש בערוץ הנתונים בשעת חירום, אבל זכרתי שהודעות בערוץ ה CB אמורות עדיין לעבוד גם אם יש שימוש בערוץ הנתונים.

שנים האמנתי שלא שניתן לשבור Cell Broadcast וגם ערוץ נתונים בזמן חירום, אבל אני חייב להגיד לספק הטלפוניה תודה שלימדתם אותי שזה אפשרי - מתברר שיש אנשים שיכולים להרוס Public Warning System שעובדת שנים.

זה התחיל מזה שבזמן שבדקו את מערכבת ה PWS לא היתה הודעת CB, גם אפליקציות התראות מצב חירום שתקו. מזל שזה היה בדיקה ולא מצב חירום אמיתי.

בהתחלה האשמתי את systemd שהוא לא הפעיל נכון, או לא הפעיל כלל את ה timer והservice.

לכן בדקתי שהקבצים במקומות הנכונים ושהכל תקין מבחינתו:

find /etc/systemd/system/  -name *pws* -print
/etc/systemd/system/pws.timer
/etc/systemd/system/timers.target.wants/pws.timer
/etc/systemd/system/pws.service

$cat /etc/systemd/system/pws.timer 
[Unit]
Description=Public Warning System Timer

[Timer]
OnUnitActiveSec=5s
OnBootSec=100s

[Install]
WantedBy=timers.target

$cat /etc/systemd/system/pws.service
[Unit]
Description=Public Warning System Alert

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/parse_alerts.sh http://pws/WarningMessages/Alert/alerts.json

$systenctl status pws.timer
● pws.timer - Timed alert check
   Loaded: loaded (/etc/systemd/system/pws.timer; enabled; vendor preset: enabled)
   Active: active (waiting) since Tue 2017-03-21 11:06:50 IST; 1s ago

Mar 21 11:06:01 pc systemd[1]: Started Public Warning System Timer


אילו היה דבר קורה במכשיר סלולאר אחד הייתי מאמין שהדבר במכשיר אחד, אבל בגלל שלא היו התראות בשני קווים שונים התחלתי לחשוד.


הקו שאני מדבר עליו מתחבר ב UMTS תחת דור ה "3.5G".
התחברות מבוצעת ע"י wvdial.

ביצעתי מספר בדיקות להבין מהיכן מגיעה הבעיה בערוץ הנתונים :

ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.255.238 icmp_seq=17 Packet filtered
^C
--- 8.8.8.8 ping statistics ---
157 packets transmitted, 0 received, +1 errors, 100% packet loss, time 159696ms

חשוב לזכור שהכתובות אצל ספק הטלפוניה שלי הן תחת 10.144.0.0/16 המשכתי לראות מאיפה זה מגיעה וקיבלתי :
mtr --report-wide --show-ips 8.8.8.8
Start: Tue Mar 21 11:46:45 2017
HOST: pc        Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- ???            100.0    10    0.0   0.0   0.0   0.0   0.0
  2.|-- 10.192.192.149  0.0%    10   49.7  59.7  46.8  92.0  16.7
  3.|-- 10.192.192.150  0.0%    10   48.5  64.9  47.0  92.7  18.7
  4.|-- ???            100.0    10    0.0   0.0   0.0   0.0   0.0


ping 192.168.255.238
PING 192.168.255.238 (192.168.255.238) 56(84) bytes of data.
64 bytes from 192.168.255.238: icmp_seq=1 ttl=253 time=285 ms
64 bytes from 192.168.255.238: icmp_seq=2 ttl=253 time=303 ms
64 bytes from 192.168.255.238: icmp_seq=3 ttl=253 time=272 ms

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.6.6.6        0.0.0.0         UG    0      0        0 ppp0
10.6.6.6        0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

mtr --report-wide --show-ips 192.168.255.238
Start: Tue Mar 21 11:40:55 2017
HOST: pc         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- ???             100.0    10    0.0   0.0   0.0   0.0   0.0
  2.|-- 10.192.192.149   0.0%    10   51.1  52.2  48.7  55.9   2.4
  3.|-- 192.168.255.238  0.0%    10   57.2  63.5  50.1  93.7  16.0

sudo nmap -sV 192.168.255.238 

Starting Nmap 7.40 ( https://nmap.org ) at 2017-03-21 11:37 IST
Nmap scan report for 192.168.255.238
Host is up (0.064s latency).
Not shown: 999 closed ports
PORT     STATE    SERVICE     VERSION
5222/tcp filtered xmpp-client

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 294.32 seconds


חמוש במידע הזה שהבעיה היא על קו אחד לפחות , לקחתי קו של חברה מתחרה ובדקתי אם אני יכול להרים חיבור ppp או לא, לא הייתה שום בעייה.

לאחר חצי יום שלא הייתה גלישה פניתי לשירות לקוחות במייל ובטלפון.

בטלפון הגעתי לנציג שירות שהפליא אותי בנפלאות הידע המזהיר כאשר נאמר לי שה IP הוא קשור ל wi-fi (לא משנה שזה RAN שונה לחלוטין ואין פה שום wi-fi מעורב) , ולאחר מכן שאין בכלל IP בגלישה סלולארית ושזה בכלל בלתי אפשרי.

לא משנה ששלחתי קובץ pcap  ויש לי כתובת IP (שמגיבה כמו גדולה בתוך הרשת שלהם)

צילום מסך :




לאחר שלא הסתדרתי עם ספק הטלפוניה התחלתי לגגל לגבי CB.

 ומתברר שתאוריתית ניתן לקבל את זה דרך gammu (לא פלא , gammu יודע לעשות המון דברים גם ככה) :
פה יש תסריט דרך gist : 

את התסריט אפשר לעטוף בדיוק כמו שעשיתי לפרסר ההודעות.כמובן שהתסריט יכול לעבוד רק עם ספק הטלפוניה לא עובד בצורה עקומה.

יום שבת, אוגוסט 06, 2016

פוסט ביקורת עמיתים - הכנת תשתית הקוד לביצוע מחקר

פוסט זה נועד לאפשר חזרה על הפעולות שביצעתי במהלך ביצוע המחקר בנושא חבילת תוכנה מסויימת.

ע"י מעבר על השלבים שמפורסמים פה ובפוסטים נוספים אני מקווה כי ניתן יהיה לשחזר ולבצע ביקורת עמיתים פשוטה.

כלים דרושים:

מערכת דביאן סיד , הפעולות בוצעו ע"י משתמש בשם user הקבצים הורדו לתיקיות pikud ו tmp.


apktool
unzip
grep
גישה לאינטרנט.

קבלת התוכנה עצמה:
הפעולה הראשונה היא הורדת ה APK עצמו ללא שימוש בחנות האפליקציות, במאמר עצמו אני מתייחס לנקודה הזאת שחוסמים את האפשרות של אנשים להם אין אפשרות להוריד מחנות האפליקציות (מכשיר ללא גישה לחנות האפליקציות, אין להם באמת מכשיר המקושר לחשבון).

ניתן להשתמש ב apkpure.com או apk-dl כל מערכת אחרת שמאפשרת הורדת אפצליקציות שלא מהסטור עצמו. ראויי לציין כי מכיוון שאנו מורידים מצד שלישי קוד המקור יכול להיות שעבר שינוי.
מסיבה זו אני מפרסם את ההאשים שקיבלתי (דרך שתי האתרים האלה הם היו זהים).


ההאשים של הAPK שלי הם :

user@laptop:~/pikud$ sha512sum Home%20Front%20Command_1.2_apk-dl.com.apk
28da60bf0e2941d632a65fe\
76960f45a715835d0567f0a\
3840eded45de7c63cef41d45\
817b5853d496b005d81b5e70\
713559957cf842daaaa0656ceb9ab6d075  Home%20Front%20Command_1.2_apk-dl.com.apk 
 
 
user@laptop:~/pikud$ md5sum Home%20Front%20Command_1.2_apk-dl.com.apk
81282187c7395e0cf1c72cabeeaa8b87  Home%20Front%20Command_1.2_apk-dl.com.apk

פריסת נתונים:

ביצוע פריסת הקבצים ופיענוח התוכן בוצעה ע"י apktool

Apktool v2.1.1-dirty - a tool for reengineering Android apk files
with smali v2.1.3-dev and baksmali v2.1.3-dev
Copyright 2014 Ryszard Wiśniewski 
Updated by Connor Tumbleson 
הותקן ע"י חבילה סטנדרטית :
apt-cache policy apktool 
apktool:
  Installed: 2.1.1+dfsg-3
  Candidate: 2.1.1+dfsg-3
  Version table:  

ביצוע הפריסה התבצע ע"י

user@laptop:~/pikud/$apktool d Home%20Front%20Command_1.2_apk-dl.com.apk 
I: Using Apktool 2.1.1-dirty on Home%20Front%20Command_1.2_apk-dl.com.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /home/user/.local/share/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

לאחר הפעולה תתקבל תיקייה Home%20Front%20Command_1.2_apk-dl.com מציאת הכתובת בוצעה ע"י :
user@laptop:~/pikud$ grep mailto -rn *
js/appObjs/globalMethods.js:60: 
 window.location = "mailto:itayg@elad.co.il?subject=Ioref%20Bug%20Report&body="+mailBoady;
js/controllers/contactUsController.js:51:                                                                       window.plugins.inAppBrowswer.open('mailto:info-oref@idf.gov.il?subject=Something to share with you...','_system');
grep .co.il -rn *

AndroidManifest.xml:20:        <meta-data android:name="server_url" 
android:value="https://ioref.co.il">
AndroidManifest.xml:21:        <meta-data android:name="dr_server_url" 
android:value="https://dr.ioref.co.il">

assets/www/js/appObjs/globalMethods.js:60: 
 window.location = "mailto:itayg@elad.co.il?subject=Ioref%20Bug%20Report&body="+mailBoady;

grep .org.il -rn *
assets/www/js/controllers/contactUsController.js:41:                                                                    window.plugins.inAppBrowswer.open('http://www.oref.org.il','_system');
assets/www/js/controllers/contactUsController.js:45:                                                                    window.location = "http://www.oref.org.il";


לאחר ביצוע הפיענוח הראשוני מתקבלים קבצי .smali שהם המקבילה (?) של קבצי אסמבלי לbytecode בעולם האנדרויד.

אימות הממצאים בוצע ע"י בידקה מתוצרי ה jadx.

פריסה ופיענוח באמצעות jadx

  • שימוש שימוש באתרים שמבצעים jadx , לשם שימוש מעלים את קובץ הapk שהורד קודם לאתר והוא מבצע המרת החבילה לקוד java שהוא קריא טיפה יותר מקבצי smali.

  • ביצוע פריסת jadx עצמאית
ככל קבצי הapk הם לא הרבה יותר מאשר ארכיב מסוג zip שמכיל מבנה קבצים מיוחד.
נשמור את הקובץ בתת תיקיה (בשביל להקל בדיקות לאחר מכן).

 הפיכת קובץ ה APK ל zip וביצוע פריסה שלו:
user@laptop:~/pikud/zip$ mv Home\ Front\ Command_v1.2.apk Home\ Front\ Command_v1.2.apk.zip

ביצוע פריסה שלו (השתמשתי בתוכנת ה unzip שמגיעה מחבילת unzip בדביאן):

user@laptop:~/pikud/zip$ unzip -x Home\ Front\ Command_v1.2.apk.zip 
Archive:  Home Front Command_v1.2.apk.zip
 extracting: assets/www/css/images/ajax-loader.gif  
  inflating: assets/www/css/idangerous.swiper.css  
  inflating: assets/www/css/index.css  
  inflating: assets/www/css/jquery.mobile-1.4.2.min.css  
  inflating: assets/www/css/toggle-switch.css  
 extracting: assets/www/img/A_minus.png  
 extracting: assets/www/img/A_plus.png  
 extracting: assets/www/img/AntennaRed.png  
 extracting: assets/www/img/Locate.png  
 extracting: assets/www/img/antenna.png  
 extracting: assets/www/img/arrow1.png  
 extracting: assets/www/img/arrow1Right.png  
 extracting: assets/www/img/arrowDown.png  
 extracting: assets/www/img/arrowLeft.png  
 extracting: assets/www/img/arrowRight.png  
 extracting: assets/www/img/back.png  
 extracting: assets/www/img/background.png  
 extracting: assets/www/img/call.png  
 extracting: assets/www/img/call2.png  
 extracting: assets/www/img/cellBlue.png  
 extracting: assets/www/img/cellOrange.png  
 extracting: assets/www/img/cellRed.png  
 extracting: assets/www/img/cellyellow.png  
 extracting: assets/www/img/checkBox1Off.png  
 extracting: assets/www/img/checkBox1On.png  
 extracting: assets/www/img/choosingShelter.jpg  
 extracting: assets/www/img/close.png  
 extracting: assets/www/img/earthquake.jpg  
 extracting: assets/www/img/emergencyBag.jpg  
 extracting: assets/www/img/facebook.png  
 extracting: assets/www/img/familyReadiness.jpg  
 extracting: assets/www/img/filterBar.png  
 extracting: assets/www/img/forbiddenMaterials.jpg  
 extracting: assets/www/img/home.png  
 extracting: assets/www/img/info.png  
 extracting: assets/www/img/key1.png  
 extracting: assets/www/img/location2.png  
 extracting: assets/www/img/locationIcon.png  
 extracting: assets/www/img/logo.png  
 extracting: assets/www/img/mail.png  
 extracting: assets/www/img/menu.png  
 extracting: assets/www/img/navBar.png  
 extracting: assets/www/img/news_icon_Yellow.png  
 extracting: assets/www/img/onAlarm.jpg  
 extracting: assets/www/img/progressBig0.png  
 extracting: assets/www/img/progressBig100.png  
 extracting: assets/www/img/progressBig20.png  
 extracting: assets/www/img/progressBig40.png  
 extracting: assets/www/img/progressBig60.png  
 extracting: assets/www/img/progressBig80.png  
 extracting: assets/www/img/progressSmall0.png  
 extracting: assets/www/img/progressSmall100.png  
 extracting: assets/www/img/progressSmall20.png  
 extracting: assets/www/img/progressSmall40.png  
 extracting: assets/www/img/progressSmall60.png  
 extracting: assets/www/img/progressSmall80.png  
 extracting: assets/www/img/protectiveZonesMap.jpg  
 extracting: assets/www/img/radio.png  
 extracting: assets/www/img/radio2.png  
 extracting: assets/www/img/ready.png  
 extracting: assets/www/img/settings.png  
 extracting: assets/www/img/situation.png  
 extracting: assets/www/img/textBox2.png  
 extracting: assets/www/img/textBox3.png  
 extracting: assets/www/img/time2.png  
 extracting: assets/www/img/timeIcon.png  
 extracting: assets/www/img/twitter.png  
 extracting: assets/www/img/update.png  
 extracting: assets/www/img/web.png  
 extracting: assets/www/img/youtube.png  
  inflating: assets/www/js/appObjs/appMenu.js  
 extracting: assets/www/js/appObjs/appMessages.js  
  inflating: assets/www/js/appObjs/contentLoader.js  
  inflating: assets/www/js/appObjs/errorsManager.js  
  inflating: assets/www/js/appObjs/globalMethods.js  
  inflating: assets/www/js/appObjs/globalVariables.js  
  inflating: assets/www/js/appObjs/languageManager.js  
  inflating: assets/www/js/appObjs/locationManager.js  
  inflating: assets/www/js/appObjs/navigationManager.js  
  inflating: assets/www/js/appObjs/requireConfig.js  
  inflating: assets/www/js/controllers/appLobbyController.js  
  inflating: assets/www/js/controllers/contactUsController.js  
  inflating: assets/www/js/controllers/messageDetailsController.js  
  inflating: assets/www/js/controllers/readinessController.js  
  inflating: assets/www/js/controllers/readinessDetailsController.js  
  inflating: assets/www/js/controllers/settingsController.js  
  inflating: assets/www/js/controllers/situationRoomController.js  
  inflating: assets/www/js/controllers/wizard_chooseLocationController.js  
  inflating: assets/www/js/controllers/wizard_choosingShelterController.js  
  inflating: assets/www/js/controllers/wizard_earthquakeReadinessController.js  
  inflating: assets/www/js/controllers/wizard_emergencyBagController.js  
  inflating: assets/www/js/controllers/wizard_progressStateController.js  
  inflating: assets/www/js/lib/idangerous.swiper.js  
  inflating: assets/www/js/lib/idangerous.swiper.min.js  
  inflating: assets/www/js/lib/jquery-1.7.1.min.js  
  inflating: assets/www/js/lib/jquery.blockUI.js  
  inflating: assets/www/js/lib/jquery.js  
  inflating: assets/www/js/lib/jquery.mobile-1.4.2.js  
  inflating: assets/www/js/lib/jquery.mobile-1.4.2.min.js  
  inflating: assets/www/js/lib/jquery.scrollTo.js  
  inflating: assets/www/js/lib/jquery.touchSwipe.min.js  
  inflating: assets/www/js/lib/require.js  
  inflating: assets/www/js/lib/rtl.jquery.mobile-1.2.0.min.js  
  inflating: assets/www/js/lib/rtl.jquery.mobile-1.4.0.js  
  inflating: assets/www/js/lib/text.js  
  inflating: assets/www/js/lib/underscore.js  
  inflating: assets/www/js/localization/ar/offlineContent/appTerms.html  
  inflating: assets/www/js/localization/ar/offlineContent/offlineContent_about.html  
  inflating: assets/www/js/localization/ar/offlineContent/offlineContent_choosingShelter.html  
  inflating: assets/www/js/localization/ar/offlineContent/offlineContent_earthquakeReadiness.html  
  inflating: assets/www/js/localization/ar/offlineContent/offlineContent_emergencyBag.html  
  inflating: assets/www/js/localization/ar/offlineContent/offlineContent_familyReadiness.html  
  inflating: assets/www/js/localization/ar/offlineContent/offlineContent_forbiddenMaterials.html  
  inflating: assets/www/js/localization/ar/offlineContent/offlineContent_onAlarmBehavior.html  
  inflating: assets/www/js/localization/ar/offlineContent/offlineContent_protectiveZonesMap.html  
  inflating: assets/www/js/localization/ar/arabic.js  
  inflating: assets/www/js/localization/ar/cities_ar_EG  
  inflating: assets/www/js/localization/ar/situationRoomMessagesAR.js  
  inflating: assets/www/js/localization/en/offlineContent/appTerms.html  
  inflating: assets/www/js/localization/en/offlineContent/offlineContent_about.html  
  inflating: assets/www/js/localization/en/offlineContent/offlineContent_choosingShelter.html  
  inflating: assets/www/js/localization/en/offlineContent/offlineContent_earthquakeReadiness.html  
  inflating: assets/www/js/localization/en/offlineContent/offlineContent_emergencyBag.html  
  inflating: assets/www/js/localization/en/offlineContent/offlineContent_familyReadiness.html  
  inflating: assets/www/js/localization/en/offlineContent/offlineContent_forbiddenMaterials.html  
  inflating: assets/www/js/localization/en/offlineContent/offlineContent_onAlarmBehavior.html  
  inflating: assets/www/js/localization/en/offlineContent/offlineContent_protectiveZonesMap.html  
  inflating: assets/www/js/localization/en/cities_en_US  
  inflating: assets/www/js/localization/en/english.js  
  inflating: assets/www/js/localization/en/situationRoomMessagesEN.js  
  inflating: assets/www/js/localization/he/offlineContent/appTerms.html  
  inflating: assets/www/js/localization/he/offlineContent/offlineContent_about.html  
  inflating: assets/www/js/localization/he/offlineContent/offlineContent_choosingShelter.html  
  inflating: assets/www/js/localization/he/offlineContent/offlineContent_earthquakeReadiness.html  
  inflating: assets/www/js/localization/he/offlineContent/offlineContent_emergencyBag.html  
  inflating: assets/www/js/localization/he/offlineContent/offlineContent_familyReadiness.html  
  inflating: assets/www/js/localization/he/offlineContent/offlineContent_forbiddenMaterials.html  
  inflating: assets/www/js/localization/he/offlineContent/offlineContent_onAlarmBehavior.html  
  inflating: assets/www/js/localization/he/offlineContent/offlineContent_protectiveZonesMap.html  
  inflating: assets/www/js/localization/he/cities_iw_IL  
  inflating: assets/www/js/localization/he/hebrew.js  
  inflating: assets/www/js/localization/he/situationRoomMessagesHE.js  
  inflating: assets/www/js/localization/ru/offlineContent/appTerms.html  
  inflating: assets/www/js/localization/ru/offlineContent/offlineContent_about.html  
  inflating: assets/www/js/localization/ru/offlineContent/offlineContent_choosingShelter.html  
  inflating: assets/www/js/localization/ru/offlineContent/offlineContent_earthquakeReadiness.html  
  inflating: assets/www/js/localization/ru/offlineContent/offlineContent_emergencyBag.html  
  inflating: assets/www/js/localization/ru/offlineContent/offlineContent_familyReadiness.html  
  inflating: assets/www/js/localization/ru/offlineContent/offlineContent_forbiddenMaterials.html  
  inflating: assets/www/js/localization/ru/offlineContent/offlineContent_onAlarmBehavior.html  
  inflating: assets/www/js/localization/ru/offlineContent/offlineContent_protectiveZonesMap.html  
  inflating: assets/www/js/localization/ru/cities_ru_RU  
  inflating: assets/www/js/localization/ru/russian.js  
  inflating: assets/www/js/localization/ru/situationRoomMessagesRU.js  
  inflating: assets/www/js/models/getCityName.js  
  inflating: assets/www/js/app.js    
  inflating: assets/www/plugins/org.apache.cordova.dialogs/www/android/notification.js  
  inflating: assets/www/plugins/org.apache.cordova.dialogs/www/notification.js  
  inflating: assets/www/plugins/appSettings.js  
  inflating: assets/www/plugins/appStorage.js  
  inflating: assets/www/plugins/debuggerPlugin.js  
  inflating: assets/www/plugins/errorsManagerPlugin.js  
  inflating: assets/www/plugins/geoLocation.js  
  inflating: assets/www/plugins/getAboutInfo.js  
  inflating: assets/www/plugins/getMessages.js  
  inflating: assets/www/plugins/getSegments.js  
  inflating: assets/www/plugins/getShelterEstimateTime.js  
  inflating: assets/www/plugins/inappbrowser.js  
  inflating: assets/www/plugins/login.js  
  inflating: assets/www/plugins/softKeyBoard.js  
  inflating: assets/www/plugins/updateServer.js  
  inflating: assets/www/plugins/updateStatistics.js  
  inflating: assets/www/plugins/video.js  
  inflating: assets/www/templates/pages/appLobbyTemplate.html  
  inflating: assets/www/templates/pages/chooseLocationTemplate.html  
  inflating: assets/www/templates/pages/choosingShelterTemplate.html  
  inflating: assets/www/templates/pages/contactUsTemplate.html  
  inflating: assets/www/templates/pages/earthquakeReadinessTemplate.html  
  inflating: assets/www/templates/pages/emergencyBagTemplate.html  
  inflating: assets/www/templates/pages/messageDetailsTemplate.html  
  inflating: assets/www/templates/pages/progressStateTemplate.html  
  inflating: assets/www/templates/pages/readinessDetailsTemplate.html  
  inflating: assets/www/templates/pages/readinessTemplate.html  
  inflating: assets/www/templates/pages/settingsTemplate.html  
  inflating: assets/www/templates/pages/situationRoomTemplate.html  
  inflating: assets/www/templates/emergencyBagItem.html  
  inflating: assets/www/templates/menuTemplate.html  
  inflating: assets/www/templates/readinessItem.html  
  inflating: assets/www/templates/situationRoomMessage.html  
 extracting: assets/www/config.xml   
  inflating: assets/www/cordova.js   
  inflating: assets/www/cordova_plugins.js  
  inflating: assets/www/index.html   
 extracting: assets/alert.mp3        
 extracting: assets/info.mp3         
  inflating: res/color/common_signin_btn_text_dark.xml  
  inflating: res/color/common_signin_btn_text_light.xml  
 extracting: res/drawable/alert_icon.png  
  inflating: res/drawable/button_border.xml  
  inflating: res/drawable/common_signin_btn_icon_dark.xml  
  inflating: res/drawable/common_signin_btn_icon_light.xml  
  inflating: res/drawable/common_signin_btn_text_dark.xml  
  inflating: res/drawable/common_signin_btn_text_light.xml  
  inflating: res/drawable/dialog_border.xml  
  inflating: res/drawable/dialog_header_border.xml  
 extracting: res/drawable/ic_notification.png  
 extracting: res/drawable/icon.png   
 extracting: res/drawable/info_circle.png  
 extracting: res/drawable/ioref_logo.png  
 extracting: res/drawable/splash.png  
  inflating: res/drawable/toast_border.xml  
  inflating: res/layout/dialog_push_message.xml  
  inflating: res/layout/splash.xml   
  inflating: res/layout/toast.xml    
  inflating: res/raw/smart_trust_store.bks  
  inflating: res/xml/config.xml      
  inflating: AndroidManifest.xml     
 extracting: resources.arsc          
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_disabled_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_disabled_focus_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_disabled_focus_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_disabled_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_focus_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_focus_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_normal_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_normal_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_pressed_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_icon_pressed_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_disabled_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_disabled_focus_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_disabled_focus_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_disabled_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_focus_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_focus_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_normal_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_normal_light.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_pressed_dark.9.png  
 extracting: res/drawable-hdpi-v4/common_signin_btn_text_pressed_light.9.png  
 extracting: res/drawable-hdpi-v4/ic_plusone_medium_off_client.png  
 extracting: res/drawable-hdpi-v4/ic_plusone_small_off_client.png  
 extracting: res/drawable-hdpi-v4/ic_plusone_standard_off_client.png  
 extracting: res/drawable-hdpi-v4/ic_plusone_tall_off_client.png  
 extracting: res/drawable-hdpi-v4/icon.png  
 extracting: res/drawable-hdpi-v4/splash.png  
 extracting: res/drawable-ldpi-v4/icon.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_disabled_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_disabled_focus_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_disabled_focus_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_disabled_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_focus_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_focus_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_normal_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_normal_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_pressed_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_icon_pressed_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_disabled_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_disabled_focus_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_disabled_focus_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_disabled_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_focus_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_focus_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_normal_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_normal_light.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_pressed_dark.9.png  
 extracting: res/drawable-mdpi-v4/common_signin_btn_text_pressed_light.9.png  
 extracting: res/drawable-mdpi-v4/ic_plusone_medium_off_client.png  
 extracting: res/drawable-mdpi-v4/ic_plusone_small_off_client.png  
 extracting: res/drawable-mdpi-v4/ic_plusone_standard_off_client.png  
 extracting: res/drawable-mdpi-v4/ic_plusone_tall_off_client.png  
 extracting: res/drawable-mdpi-v4/icon.png  
 extracting: res/drawable-mdpi-v4/splash.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_disabled_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_disabled_focus_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_disabled_focus_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_disabled_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_focus_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_focus_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_normal_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_normal_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_pressed_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_icon_pressed_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_disabled_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_disabled_focus_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_disabled_focus_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_disabled_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_focus_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_focus_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_normal_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_normal_light.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_pressed_dark.9.png  
 extracting: res/drawable-xhdpi-v4/common_signin_btn_text_pressed_light.9.png  
 extracting: res/drawable-xhdpi-v4/ic_plusone_medium_off_client.png  
 extracting: res/drawable-xhdpi-v4/ic_plusone_small_off_client.png  
 extracting: res/drawable-xhdpi-v4/ic_plusone_standard_off_client.png  
 extracting: res/drawable-xhdpi-v4/ic_plusone_tall_off_client.png  
 extracting: res/drawable-xhdpi-v4/icon.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_disabled_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_disabled_focus_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_disabled_focus_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_disabled_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_focus_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_focus_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_normal_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_normal_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_pressed_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_icon_pressed_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_disabled_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_disabled_focus_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_disabled_focus_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_disabled_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_focus_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_focus_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_normal_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_normal_light.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_pressed_dark.9.png  
 extracting: res/drawable-xxhdpi-v4/common_signin_btn_text_pressed_light.9.png  
 extracting: res/drawable-xxhdpi-v4/ic_plusone_medium_off_client.png  
 extracting: res/drawable-xxhdpi-v4/ic_plusone_small_off_client.png  
 extracting: res/drawable-xxhdpi-v4/ic_plusone_standard_off_client.png  
 extracting: res/drawable-xxhdpi-v4/ic_plusone_tall_off_client.png  
  inflating: classes.dex             
  inflating: org/apache/http/entity/mime/version.properties  
  inflating: META-INF/MANIFEST.MF    
  inflating: META-INF/CERT.SF     

בשונה מקבצי smali את קבצי ה dex נאלץ להמיר לקוד קריא יותר כך :
jadx -d out classes.dex

יום חמישי, אפריל 28, 2016

מערכת התרעה בחירום

מה שרשום בפוסט זה הוא דעתי האישית והלא מלומדת, טעויות קורות ויש לצפות כי יהיו טעויות ודברים שאינם נכונים בפוסט זה. אם קיימת טעות אשמח לתיקון.

לפני זמן מה דיברתי על חיווי בחירום בפוסט בנושא הודעות חירום.

לשם הבדיקה רציתי לבדוק מה המצב כיום בארץ והחלטתי לעשות מעבר מהיר על מערכת ההתרעה  באזורינו. המערכת אמורה להתריע בזמן רעידת אדמה או אסון לאומי אחר בזמן אמת ולתת מספיק זמן בשביל להנצל.

מדובר על מערכת שנועדה לתת חיווי ולהזהיר במקרה חירום,  מפיצי המערכת בחרו לאסור את השימוש בה לאכלוסיה מסויימת (יש חיוב להשתמש בחנויות של אנדרוייד ו apple אבל f-droid אינה אופציה). במקרה שלנו מדובר על תוכנה בקוד סגור שחסומה לשימוש ע"י מי שלא מסכים לתנאי שימוש של חברה זרה. מקורות המידע לא מפורסמים.

משום מה לא מדובר על אפליקצייה שמדווחת שפותחה ע"י איזה שהוא גוף חירום אלא היא מגיעה תחת השם eviglo.com (דומיין לא קיים) - גם אם התוכנה פותחה עבור גוף חירום כל שהוא.

השם של האפליקציה (Android ApplicationId) , המפתח הפנימי של האפליקציה וכתובות המייל בתוך האפקליציה אינן בדומיינים הרגילים של גופי חירום.  כמובן שיכול להיות שהתוכנה העוברה או פותחה עבורם רק שבפועל אין אינדקציה ברורה לבעלות של גוף חירום על התוכן.

מצופה היה כי כל הדומיינים יהיו שייכים לגוף החירום, המפתחות בתוך האפליקציה יהיו של גוף החירום, כל השמות בתוך האפליקצייה צריכים להיות של גוף החירום.  ואסור שיהיה איזה שהיא התנייה שאפילו רומזת שהאפליקציה לא בבעלות גוף החירום. ולמרות שאני לא יודע אם קיימת חובה להשתמש בשמות מתחם בבעלות מפעיל האפליקציה נהוג שלא להתחזות לשמות אחרים כאשר מפתחים תוכנה.

לידיידי הלא טכניים ניתן להתייחס לזה בדוגמא הבאה:

במקרה של אזעקה או מצב חירום רק בעלי רדיו של חברת אפל או של חברת גוגל יוכלו לקבל התראה כל מי שיש לו רדיו אחר לא יוכל לקבל את ההודעה (וזאת למרות שאת השידור ישדרו בתדר שאפשר לקלוט בכל רדיו אחר). הפעולה תתבצע ע"י מתן רישיון שימוש רק לחברות האלה ואי פרסום התדר בו נשמעת האזעקה.

מה שעשיתי היה להוריד את ה apk באמצעות כלי שלישי (כי אין לי חשבון שם), ביצוע decompile ע"י jadx (אפשר כאן ).

הנחתי בגלל שהושקעו כספים כה רבים במה שמכונה הענן הציבורי יתבצע שימוש במערכת, הנחתי גם שכל המערכות איתם התוכנה תעבוד יהיו בידי לכל הפחות תהיל"ה ואולי אף בידי כוחות הביטחון.

הדבר ראשון היה עם אילו כתובת פומביות המערכת עובדת ? בשביל הדוגמה שלנו נרצה לדעת איך משדרים את האזעקה.

בשביל ההתחלה רציתי לדעת מה הקשר של התוכנה לפיקוד העורף (וכך לאתר את הכתובת) :

hd Home%20Front%20Command_1.2_apk-dl.com.apk | grep oref
0031c110  62 6c 65 2f 69 6f 72 65  66 5f 6c 6f 67 6f 2e 70  |ble/ioref_logo.p|
0033d6a0  6f 72 65 66 5f 6c 6f 67  6f 2e 70 6e 67 00 17 17  |oref_logo.png...|
00436740  6f 72 65 66 5f 6c 6f 67  6f 2e 70 6e 67 50 4b 01  |oref_logo.pngPK.|

במילים אחרות מדובר רק על שמות קבצים בפנים (אבל זה כבר טוב), אם בודקים את הקובץ המפוענח אנו מקבלים מספר דברים נוספים :
grep -i "oref.org.il" -rn *
assets/www/js/controllers/contactUsController.js:41:                                                                    window.plugins.inAppBrowswer.open('http://www.oref.org.il','_system');
assets/www/js/controllers/contactUsController.js:45:                                                                    window.location = "http://www.oref.org.il";
אבל מעניין מה זה השרת הבא לא ?
 
grep -i "oref.co.il" -rn * 
AndroidManifest.xml:21:        <meta-data android:name="server_url" android:value="https://ioref.co.il">
AndroidManifest.xml:22:             <meta-data android:name="dr_server_url" > android:value="https://dr.ioref.co.il">Binary file res/raw/smart_trust_store.bks matches</meta-data>

אז מי זה ה ioref.co.il שהם מדברים עליהם ?
...
query:        ioref.co.il

reg-name:     ioref
domain:       ioref.co.il

descr:        Taldor Communication LTD
descr:        26 Harokmim st. P.O.B 1888
descr:        Holon
descr:        5811801
descr:        Israel
phone:        +972 52 2896789
fax-no:       +972 52 2896789
e-mail:       maorsh AT glasshouse.co.il
admin-c:      GI-MS33291-IL
tech-c:       GI-MS33291-IL
zone-c:       GI-MS33291-IL
nserver:      ns1.box.co.il 
nserver:      ns2.box.co.il 
validity:     21-05-2016
status:       Transfer Locked
changed:      domain-registrar AT isoc.org.il 20140521 (Assigned)
changed:      domain-registrar AT isoc.org.il 20150105 (Changed)

person:       Maor Shirazi
address:      26 Harokmim st. P.O.B 1888
address:      Holon
address:      5811801
address:      Israel
phone:        +972 52 2896789
e-mail:       ioref AT taldor.co.il
nic-hdl:      GI-MS33291-IL
changed:      domain-registrar AT isoc.org.il 20140521
changed:      Managing Registrar 20141214
changed:      Managing Registrar 20150105

registrar name: Gorni Interactive Ltd
registrar info: http://www.box.co.il/

% Rights to the data above are restricted by copyright.
...


הלכתי לחפש אי אלו פרטים על המפתח של האפליקציה, בשביל לגלות מידע יותר טוב אז הסתקלתי על הפרטים שיש בתוך האפליקציה על המפתח הציבורי המצורף (מחקתי את שמו של המפתח בשביל לשמור על פרטיו) ושוב אין שום ציון של פיקוד העורף:

original/META-INF$ openssl x509  -in cert.pem  -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1323855412 (0x4ee86e34)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C = IL, ST = HaSharon, L = Netanya, O = eVigilo, OU = R&D, CN = REDACTED BY USER
            Not Before: Dec 14 09:36:52 2011 GMT
            Not After : Nov 20 09:36:52 2110 GMT
        Subject: C = IL, ST = HaSharon, L = Netanya, O = eVigilo, OU = R&D, CN = REDACTED BY USER
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (1024 bit)
                Modulus:
                    00:96:27:a8:0b:53:4a:ad:8a:17:c4:31:7e:61:04:
                    41:60:93:9a:21:d7:5a:ee:bb:6b:13:1c:3c:f5:4c:
                    e0:9a:4c:bd:0e:6a:55:5c:40:cc:12:64:63:6a:05:
                    64:26:0e:9b:3e:1f:54:fb:9f:7f:59:fc:14:51:42:
                    dd:33:cc:16:38:84:a1:5c:db:a5:6f:67:c2:c4:b0:
                    3a:3f:73:23:6f:70:d7:f6:1c:13:23:cd:04:a9:64:
                    0b:e5:ad:8b:cb:14:09:ee:7b:7a:2a:80:8e:e2:f7:
                    4a:a5:e1:e7:9c:4e:2a:a3:41:22:e2:24:93:75:be:
                    ef:db:dc:fc:e8:c0:c1:86:91
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha1WithRSAEncryption
         8a:8f:76:71:00:8e:cf:d5:7a:e3:dd:a9:50:cc:0a:8c:94:74:
         4c:96:d8:8e:7a:b4:e2:df:7b:0e:2b:d9:13:c0:2b:3e:ff:41:
         7b:99:b9:b3:f8:45:3d:0e:44:c6:99:a4:31:ec:97:81:63:5c:
         fc:39:5a:31:e5:4e:23:62:11:dd:52:10:a7:fe:93:8c:77:c3:
         02:e8:55:4f:4b:5c:3a:aa:39:a7:ec:59:ca:15:db:5b:fd:8a:
         c9:2f:04:32:d6:a4:87:db:2b:73:9a:da:6f:dc:94:f4:26:5d:
         4f:f3:ff:e1:ff:e5:04:11:a3:10:24:b3:fd:c9:71:a6:27:8d:
         43:bd
-----BEGIN CERTIFICATE-----
MIICSzCCAbSgAwIBAgIETuhuNDANBgkqhkiG9w0BAQUFADBpMQswCQYDVQQGEwJJ
TDERMA8GA1UECBMISGFTaGFyb24xEDAOBgNVBAcTB05ldGFueWExEDAOBgNVBAoT
B2VWaWdpbG8xDDAKBgNVBAsMA1ImRDEVMBMGA1UEAxMMT3BoaXIgUm9tYW5vMCAX
DTExMTIxNDA5MzY1MloYDzIxMTAxMTIwMDkzNjUyWjBpMQswCQYDVQQGEwJJTDER
MA8GA1UECBMISGFTaGFyb24xEDAOBgNVBAcTB05ldGFueWExEDAOBgNVBAoTB2VW
aWdpbG8xDDAKBgNVBAsMA1ImRDEVMBMGA1UEAxMMT3BoaXIgUm9tYW5vMIGfMA0G
CSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWJ6gLU0qtihfEMX5hBEFgk5oh11ruu2sT
HDz1TOCaTL0OalVcQMwSZGNqBWQmDps+H1T7n39Z/BRRQt0zzBY4hKFc26VvZ8LE
sDo/cyNvcNf2HBMjzQSpZAvlrYvLFAnue3oqgI7i90ql4eecTiqjQSLiJJN1vu/b
3PzowMGGkQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAIqPdnEAjs/VeuPdqVDMCoyU
dEyW2I56tOLfew4r2RPAKz7/QXuZubP4RT0ORMaZpDHsl4FjXPw5WjHlTiNiEd1S
EKf+k4x3wwLoVU9LXDqqOafsWcoV21v9iskvBDLWpIfbK3Oa2m/clPQmXU/z/+H/
5QQRoxAks/3JcaYnjUO9
-----END CERTIFICATE-----


 טוב כנראה המצב יהיה קשה, אזאי ממשיך לחטט בקובץ :

ההנחה הראשונית שלי (שיהיה איזה כתובת ממנה אשלוף התבדתה) לכן הנחתי שיהיה אולי שימוש ב topic עליו נרשם ? חיפשתי משהוא שיזכיר GoogleCloudMessaging (בשביל להרשם לtopics) -
מדוע הלכתי על חיפוש GCM ?

בגלל שהרשאת com.google.android.c2dm.permission.SEND הופעלה בקובץ AndroidManifest.xml.

וכן אם בגלל שאנחנו רואים שיש שם דרישה ל com.google.android.c2dm.intent.REGISTRATION זה אומר שחלק מההרשמות ייכשלו אבל מצפים לתמיכה באנדרויד 4.4. 

טוב ממשיכים, אם הם לא עובדים עם Topics אולי הם עובדים עם push notifications ? מחפשים GCMPushReceiver והוף יש משהוא -

AndroidManifest.xml:38:        
smali/com/evigilo/smart/mobile/android/gcm/a.smali:9:.field final synthetic a:Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;
smali/com/evigilo/smart/mobile/android/gcm/a.smali:13:.method public constructor (Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;)V
smali/com/evigilo/smart/mobile/android/gcm/a.smali:16:    iput-object p1, p0, Lcom/evigilo/smart/mobile/android/gcm/a;->a:Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;
smali/com/evigilo/smart/mobile/android/gcm/a.smali:40:    sget v1, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->a:I
smali/com/evigilo/smart/mobile/android/gcm/a.smali:48:    sget v2, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->a:I
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:1:.class public Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:23:    sput v0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->a:I
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:78:    iget-object v0, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:88:    iput-object v0, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->d:Landroid/app/NotificationManager;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:92:    iget-object v1, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:106:    iget-object v1, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:116:    iget-object v2, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:124:    iget-object v2, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:154:    iget-object v0, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->d:Landroid/app/NotificationManager;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:164:    iget-object v0, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:216:    const-string v2, "GCMPushReceiver"
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:256:    iget-object v1, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:293:    const-string v1, "GCMPushReceiver"
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:315:    iget-object v1, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:345:    iput-object p1, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->b:Landroid/content/Context;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:436:    invoke-direct {p0, p1, v0}, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->a(Landroid/content/Context;Ljava/lang/String;)V
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:461:    const-string v0, "GCMPushReceiver"
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:631:    iput-object v0, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->c:Landroid/media/AudioManager;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:633:    iget-object v0, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->c:Landroid/media/AudioManager;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:641:    sput v0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->a:I
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:643:    iget-object v0, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->c:Landroid/media/AudioManager;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:647:    iget-object v8, p0, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->c:Landroid/media/AudioManager;
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:678:    invoke-direct {v2, p0}, Lcom/evigilo/smart/mobile/android/gcm/a;->(Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;)V
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:761:    invoke-direct/range {v2 .. v8}, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;)V
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:765:    invoke-virtual {p0, v0}, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->setResultCode(I)V
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:920:    const-string v2, "GCMPushReceiver"
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:956:    invoke-virtual {p0, v0}, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->setResultCode(I)V
smali/com/evigilo/smart/mobile/android/gcm/GCMPushReceiver.smali:963:    invoke-virtual {p0, v0}, Lcom/evigilo/smart/mobile/android/gcm/GCMPushReceiver;->setResultCode(I)V



אם ממשיכים לחטט (למשל לגבי יצירת קשר) נשים לב ל :

grep -i "mailto" -rn *
assets/www/js/appObjs/globalMethods.js:60: 
window.location = "mailto:itayg@elad.co.il?subject=Ioref%20Bug%20Report&body="+mailBoady;
assets/www/js/controllers/contactUsController.js:51:                                                                    window.plugins.inAppBrowswer.open('mailto:info-oref@idf.gov.il?subject=Something to share with you...','_system');
assets/www/js/lib/jquery.mobile-1.4.2.js:2563:                  //could be mailto, etc
assets/www/js/lib/rtl.jquery.mobile-1.4.0.js:2565:                      //could be mailto, etc
com/evigilo/smart/mobile/plugins/inAppBrowser/C0188k.java:58:            } else if (str.startsWith("geo:") || str.startsWith("mailto:") || str.startsWith("market:")) {

שמתם לב שדיווח הבאגים עובר לחברה שלישית ולא פיקוד העורף ? ניחא חברת גוגל שמקבלת מידע רב אבל למה לכל השדים והרוחות זה עובר לחברה נוספת ? למה המיילים הולכים ל
itayg@elad.co.il מי אלו elad.co.il ו eviglo.com לכל השדים ולמה לא מדובר על דומיין gov או idf ?

ניסיתי לבדוק אם יש שימוש במערכות שיכלו להבטיח שהודעה תגיע מהר (לדוגמה שימוש ב CB או לפחות ב USSD).

יכול להיות שאני טועה, אבל לא הצלחתי לאתר שום קוד שמטפל ב CB , ב SMS או USSD.
מה שאומר שאם תהיה תקלת מתג, פגיעה בצוואר בקבוק של רשת תקשורת ה GSM (אם חשבתם ש IIX עקום אז תשתית התקשורת במצב עוד יותר גרוע). כדאי לכם להיות רחוק מאזור אסון אם יש לכם בעיות גלישה או קליטה באזור.

מה שכן הצלחתי למצוא היא שהמערכת משתמשתש בשירותים הבאים :

GCM , שימוש ב Geofence ושימוש בפלטפורמת Cordova אז לפחות יש קצת נחמה שיש שימוש בקוד פתוח.

אז מי שייספר לכם על אפליקציה "רשמית" חשוב שיזכיר שלא מדובר על אפליקציה שרשומה ככזאת שפותחה בתוך האירגון או שכל המשאבים בשימוש היא של האירגון עצמו. אני אישית לא רואה איך אני מקבל את המידע.

יום חמישי, פברואר 18, 2016

סקירת הודעות חרום

בעולם תקשורת האלחוט (נניח UMTS GSM ו LTE) ישנן מספר דרכים להודעות בחרום בזמן כמעט קבוע (ללא תלות בעומס הרשת) על בסיס SMS-CB ו USSD וSMS-MT.

נושא ה  CB (כולל SMS-CB) מוכרים ומתוקננים דרך  :

TS 23.041
TS 44.012
TS 25.419


כאשר משתמשים ב-USSD בדרך כלל להודעות חירום מצד המשתמש (דרא"פ) אבל גם מצד ספק הטלפוניה, בעוד  בעוד משתמשים ב CB בהודעות רשת כלפי המשתמשים.

השימוש בשתי הטכנולוגיות מתאפשר בגלל שכמעט כל מכשיר סלולר בשוק (מכשיר שיוצר לאחר שנת 1998) מכיר את היכולות זה עובד וזה לא נפגע אם יש עומס.

הבעיות שניצבים מולם כאשר עובדים עם הודעות CB הם ספק תקשורת לא יוצלח (שלא מצליח להרים מערכת כמו שצריך) ו ספקי מכשירים שלא יודעים לעבוד עם הפרוטוקול הנבחר.

מקרה כזה היה ה iphone שלא תמך עד גירסה 5, אבל מצד שני אם יש לך iphone אז מגיע לך שלא תקבל אזהרה תשיג  openmoko או אנדרויד נורמלי (סורי maemo לא תומך :) ) .

מדינות מתוקונות (כמו למשל יפן וסין) דרשו מספקי טלפוניה לדאוג כי כל מכשיר שנמכר במדינה יתמוך בפרוטוקול הנבחר (יפן 2007).

ETSI (גוף התקינה האירפואי לתקשורת אלחוט) הוציא מסמך הסוקר את הטכנולוגיות והדרכים בשנת 2006, וב 2013 GSMA הוציא מסמך סקר נוסף שדיווח כי נכון לשנה זו 97% מהאכולסיה קיבלה את הודעות ה CB במקרי אסון תוך שלוש דקות. וע"פ מחקר נוסף שבוצע בהולנד 95% מהאכלוסיה חונכו להשתמש במערכת בתוך שנתיים.


נכון להיום אני מכיר מספר מערכות להודעות חירום ETWS ביפן, ו EMTEL בקנדה, ו EU-ALERT בהולנד, DEWN בסרי לנקה (כולן עובדות על בסיס CB לגירסה הסרילנקית יש גם הודעות SMS).

מכשיר שייוצר בצפון אמריקה יתמוך ב CMAS כברירת מחדל ומכשיר שיוצר ביפן ומכיל את הלוגו של השפמנון הצהוב יתמוך ב ETWS.

הנקודה למה מדינות מתוקנות בוחרות בשימוש ב CB היא כי זה יעבוד גם ב 2G גם ב 3G וגם ב LTE , הדרישה של המדינות לספקי החומרה לתמוך בפתרון גם דואגת שמרבית המכשירים יתמכו בטכנולגיה.



כאשר מדובר על הרצון הטוב של הייצרנים (במקרה של EU-ALERT) היצרנים לפעמים לא מייצרים את התמיכה הנדרשת (באופן לא ממש מפתיע שוב פעם אפל היו המובילים באי התמיכה ) אבל זה נפתר ע"י תקנון נכון.

ב DEWN הגדילו והוסיפו שלא רק CB ישלח אלא גם הודעות SMS-MT (הודעת SMS ) , ככל ממה שאני מכיר לא נהוג לשלוח הודעות SMS בגלל הקלות שבה אנשים מזייפים מידע ובגלל שזה גורם לפאניקה מיותרת (מול קל לזייף פרטי שולח) .

לאחרונה שמתי לב שיש כאלה שחושבים שזה ראוי לעבור לשימוש בממשק ה data להודעות חירום (לסמוך על זה שתהיה קליטה טובה , ושתקבל את ההודעה בזמן "קצר") - הבעיה בגישה זו היא שאם קיים עומס ברשת (הרבה אנשים מתקשרים , יש הודעות bulk שיוצאות) או שאם ספק התקשורת מפעיל הורדת מהירות או פשוט מספק ציר שיש בו TTL של שנייה או שניים לא ניתן ממש לסמוך על ההודעות מסוג זה.

הסבר - ישנם מערכות התראה של שניות ספורות (10 ו 15 שניות ) מדובר על קיצור זמן ההתראה ב20%  ו 13% בהתאמה.

אני מבין את הרצון הטוב של מעבר לשימוש ב DATA אבל גם אז יש צורך שספקי ההולכה יתמכו וזה לא פתרון קסם , הפטרון גם גרוע בגלל העובדה שהוא דורש הפעלת אפליקצית צד שלישי, החלק היותר מעצבן הוא חוסר היכולת לקבל את האפליקציות אם אתם לא מסכימים לתנאי השימוש של גוגל .

האפליקציות המדובורת אינן ניתנות להורדה מספק התוכנה (מי שכתב אותה) וגם לא קיימות במארקטים החופשיים דוגמת f-droid לכן נשארת האופציה או לסמוך על צד שלישי שיתן לנו APK שהוא לא שינה או לא לקבל את ההודעות.

לקריאה נוספת :

 GSM 03.38
TS 29.168
J-STD-100
J-STD-101
J-STD-102

יום ראשון, יולי 20, 2014

תסריט הודעות מערכת X11

עידכון: התסריט לא נתן מידע מהימן בזמן אמת. 

שימרו את הקובץ נגיד תחת alarm.sh

#!/bin/bash

if [ $# -ne 1 ]; then
   echo "$0 expect alert url"
   echo "example:"
   echo "$0 http://www.oref.org.il/WarningMessages/alerts.json";

   exit 1
fi
prevMd5Sum=""
curMd5Sum=""

while true; 

do

content=$(wget -qO- $1 | iconv -f UTF16 -t utf-8)
curMd5Sum=$(echo $content |md5sum)
area=$(echo "$content" | tail -n +5 | sed -r -e 's/\]//g'  -e 's/\}//g'| tr -d "\r\n")

date=$(date)

if [ -n "$area" ]; then
    if [ "$curMd5Sum" != "$prevMd5Sum" ]; then
        prevMd5Sum=$curMd5Sum;
        echo "ALARM [$content] $date ($area)"
        notify-send  "צבע אדום" "$area\n$date"  
    fi
fi
sleep 0.5;

done

 
יש לתקן את השורה area=`..` כך שזה יוצג בשורה אחת (הוחלף ל $() שיהיה קל יותר להעתיק)

הפעילו באמצעות :

 user@pc: ~/screen ./alaram.sh http://www.oref.org.il/WarningMessages/alerts.json 

התסריט לא נתן מידע מהימן בזמן אמת. 
  עריכה : ככל הנראה יש פרוקסי בדרך או שהספק שלי ממש בעייתי - זמן שינוי עדכון משאב  (last_modified) לא מעודכן בחלק מה resolv שעשיתי היה משאב לא מעודכן למספר שעות.

לפעמים עובד ולפעמים לא , אין צורך ב U-A .