- แอปสตรีมมิงผิดกฎหมายบน iOS บางตัวถูกออกแบบให้ผ่านการตรวจสอบในฐานะแอปปกติ ก่อนจะเปิดฟังก์ชันที่ซ่อนอยู่ภายหลัง โดยจากการวิเคราะห์โค้ดพบทั้งการ บล็อกตามตำแหน่งที่ตั้ง และการอัปเดตระยะไกล
- แอปที่เผยแพร่ผ่านบัญชีนักพัฒนาคนละบัญชีกันกลับใช้ โค้ดเบสเดียวกัน และสามารถเปลี่ยนบางส่วนของแอปได้โดยไม่ต้องส่งให้ App Store ตรวจสอบใหม่ ผ่าน React Native และ Microsoft CodePush SDK
- แอปบางตัวใช้ทั้งที่เก็บบน GitHub และ API ตำแหน่งตาม IP เพื่อตรวจสอบข้อมูลประเทศ ภูมิภาค เมือง และค่าลองจิจูด-ละติจูดโดยประมาณ และจะไม่แสดงอินเทอร์เฟซที่ซ่อนอยู่เมื่ออยู่ในสภาพแวดล้อมการตรวจสอบของ Apple
- แอปจะรอไม่กี่วินาทีหลังเปิดใช้งานครั้งแรกก่อนเรียก API ตำแหน่ง เพื่อหลีกเลี่ยง กระบวนการตรวจสอบอัตโนมัติ และแม้ตั้งพร็อกซีให้เป็น San Jose, California หน้าจอที่ซ่อนอยู่ก็ยังไม่ปรากฏ
- Apple อาจเพิ่มการทดสอบพฤติกรรมตามตำแหน่งและเข้มงวดกับการลบแอปหลอกลวงมากขึ้น แต่ขณะนี้เปิดเผยเพียงว่าได้ลบแอปดังกล่าวแล้ว และยังไม่ได้ระบุมาตรการเฉพาะเพื่อป้องกันไม่ให้แอปลักษณะคล้ายกันผ่านการอนุมัติ
โครงสร้างที่เปลี่ยนพฤติกรรมให้เป็นคนละแอปหลังผ่านการตรวจสอบ
- 9to5Mac รายงานกรณีที่แอปสตรีมมิงผิดกฎหมายบน iOS หลายตัวหลอกการตรวจสอบของ App Store จนได้รับอนุมัติ และต่อมาได้ยืนยันรายละเอียดการหลบเลี่ยงจากการวิเคราะห์โค้ด
- “Collect Cards” เคยขึ้นไปอยู่ในอันดับต้น ๆ ของชาร์ตดาวน์โหลดแอปฟรีบน App Store ในบางประเทศ ก่อนที่ Apple จะลบออกหลังถูกเปิดเผย
- หลังจากนั้น แอปเวอร์ชันอื่นของตัวเดียวกันก็กลับขึ้นมาบน App Store อีก ทำให้วิธีการหลอกทีมรีวิวกลายเป็นเป้าหมายของการวิเคราะห์
โค้ดเบสร่วมและการอัปเดตระยะไกล
- แอปที่ถูกวิเคราะห์ถูกเผยแพร่ผ่านบัญชีนักพัฒนาต่างกัน แต่ใช้ โค้ดเบสเดียวกัน
- แอปเหล่านี้สร้างด้วย React Native ซึ่งเป็นเฟรมเวิร์กข้ามแพลตฟอร์มที่ใช้ JavaScript
- การใช้ CodePush SDK ของ Microsoft ช่วยให้อัปเดตบางส่วนของแอปได้โดยไม่ต้องส่งบิลด์ใหม่เข้า App Store
- การใช้ React Native และ CodePush เองไม่ได้ขัดกฎของ App Store และแอปยอดนิยมจำนวนมากก็ใช้แนวทางนี้
- นักพัฒนาที่ไม่หวังดีนำเทคโนโลยีอัปเดตที่ถูกต้องตามปกตินี้มาใช้เพื่อหลบเลี่ยงการตรวจสอบของ App Store
ใช้ตำแหน่งที่ตั้งเพื่อตรวจจับสภาพแวดล้อมการรีวิวของ Apple
- หนึ่งในแอปที่ถูกวิเคราะห์ชี้ไปยัง GitHub repository ที่ดูเหมือนให้ไฟล์สำหรับแอปสตรีมมิงผิดกฎหมายหลายตัว
- แอปดังกล่าวใช้ API เฉพาะ เพื่อตรวจสอบตำแหน่งของอุปกรณ์จากที่อยู่ IP
- API จะส่งคืนข้อมูลอย่างประเทศ ภูมิภาค เมือง และค่าลองจิจูดกับละติจูดโดยประมาณ
- เมื่อเปิดแอปครั้งแรก แอปจะรอไม่กี่วินาทีก่อนเรียก API ตำแหน่ง
- ด้วยความหน่วงนี้ ใน กระบวนการตรวจสอบอัตโนมัติ ของ App Store จึงไม่เห็นพฤติกรรมผิดปกติจากโค้ดของแอป
- 9to5Mac ใช้พร็อกซีปลอมตำแหน่งเป็น San Jose, California เพื่อตรวจสอบพฤติกรรมของแอป
- ในตำแหน่งนี้ แอปจะไม่แสดงอินเทอร์เฟซที่ซ่อนอยู่อย่างเด็ดขาด
แสดงอินเทอร์เฟซจริงหลังได้รับอนุมัติ
- หลังจาก Apple อนุมัติแอปที่แสดงเพียงฟังก์ชันพื้นฐาน นักพัฒนาจะอัปเดตแอปด้วยสิ่งที่ต้องการผ่าน CodePush
- แอปจะแสดงอินเทอร์เฟซจริงเฉพาะในตำแหน่งที่ถือว่า “ปลอดภัย”
- โครงสร้างแบบนี้ทำให้พฤติกรรมของแอปในสภาพแวดล้อมของ Apple ระหว่างการรีวิว กับในสภาพแวดล้อมของผู้ใช้ทั่วไปแตกต่างกันได้
โจทย์รับมือที่ Apple ยังต้องแก้
- Apple อาจปรับปรุงกระบวนการตรวจสอบได้ด้วย การทดสอบเพิ่มเติม เพื่อยืนยันว่าแอปทำงานอย่างไรในแต่ละตำแหน่ง
- ยังจำเป็นต้องมีการรับมือเชิงรุกมากขึ้นในการค้นหาและลบแอปหลอกลวงออกจาก App Store
- ในปี 2017 Uber เคยถูกกล่าวหาว่าใช้ “geofence” กับสำนักงานใหญ่ของ Apple ใน Cupertino
- กล่าวคือเมื่อแอปทำงานในตำแหน่งดังกล่าว โค้ดที่ใช้เก็บลายนิ้วมือผู้ใช้และติดตามข้ามเว็บจะถูกปิดใช้งานโดยอัตโนมัติ
- ตามเอกสารในปี 2021 ทีม App Store Review มีผู้เชี่ยวชาญที่เป็นมนุษย์มากกว่า 500 คน ซึ่งตรวจสอบแอปมากกว่า 100,000 รายการต่อสัปดาห์
- ถึงอย่างนั้น แอปส่วนใหญ่ก็ยังต้องผ่าน กระบวนการตรวจสอบอัตโนมัติ เพื่อตรวจหาการละเมิดแนวทางของ App Store ก่อนการตรวจแบบแมนนวล
- โฆษกของ Apple ระบุหลังมีการเปิดเผยเรื่องนี้ว่า แอปดังกล่าวถูกนำออกจาก App Store แล้ว แต่ไม่ได้ให้รายละเอียดเกี่ยวกับมาตรการของบริษัทเพื่อป้องกันไม่ให้แอปคล้ายกันได้รับอนุมัติ
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ต่อให้ Apple ป้องกันการ เลี่ยงข้อจำกัดตามภูมิภาค การซ่อนพฤติกรรมก็ยังทำได้ง่ายมาก
ไม่ต้องใช้โค้ดแบบไดนามิกหรือโค้ดที่รันผ่านอินเทอร์พรีเตอร์เลย และรูปแบบดัดแปลงแบบนี้มีมากพอจนสุดท้ายดูเหมือนจะลดรูปเป็น ปัญหาการหยุดทำงาน ทำให้ตัดสินไม่ได้
ต้องมีวิธีรับมือที่อยู่นอกเหนือมาตรการทางเทคนิค เช่น ให้คนที่กระจายตัวอยู่จริง ๆ ช่วยกันทดสอบแอปแบบ crowdsourcing เพื่อหาพฤติกรรมมุ่งร้าย
โดยทั่วไปแล้ว ฟังก์ชันตรวจอัปเดต หรือการเช็กว่ามีเวอร์ชันใหม่หรือไม่ ก็ใช้พร้อมกันเพื่อเช็กได้ว่า “เวอร์ชันนี้ยังอยู่ระหว่างการรีวิวแอปหรือเปล่า?”
ความเป็นไปได้ที่จะถูกขับออกจากระบบนิเวศ Apple App Store หรือถูกตอบโต้ทางกฎหมาย เป็นหนึ่งในวิธียับยั้งพฤติกรรมไม่พึงประสงค์ที่ทางเทคนิคไม่สามารถป้องกันได้
สุดท้ายต้องใช้แรงกดดันจากทั้งระบบนิเวศและภาครัฐมากขึ้น เพื่อให้ข้อกำหนดการใช้งานสมเหตุสมผลและเป็นธรรม เพราะการแฮ็กเพื่อเลี่ยงข้อกำหนดจะกลายเป็นเรื่องแทบเป็นไปไม่ได้ ผมคิดว่าแฮ็กพวกนี้ฉลาดดี แต่ไม่น่าจะอยู่ได้นาน
ถ้าสงสัยถ้อยคำของ Apple เกี่ยวกับ การอัปเดตแบบไดนามิก อย่าง CodePush อยู่ ที่นี่มีอยู่: https://github.com/microsoft/react-native-code-push#store-gu...
“โค้ดที่เรียกใช้งานได้
ยกเว้นในกรณีที่ระบุไว้ในย่อหน้าถัดไป แอปพลิเคชันห้ามดาวน์โหลดหรือติดตั้งโค้ดที่เรียกใช้งานได้ โค้ดแบบอินเทอร์พรีเตอร์สามารถดาวน์โหลดลงในแอปพลิเคชันได้ แต่โค้ดดังกล่าวต้อง (a) ไม่เปลี่ยนวัตถุประสงค์หลักของแอปพลิเคชันโดยมอบฟังก์ชันที่ไม่สอดคล้องกับวัตถุประสงค์ที่ตั้งใจและโฆษณาไว้ของแอปพลิเคชันที่ส่งเข้า App Store, (b) ไม่สร้างสโตร์หรือหน้าร้านสำหรับโค้ดหรือแอปพลิเคชันอื่น และ (c) ไม่หลบเลี่ยงการลงนาม แซนด์บ็อกซ์ หรือฟีเจอร์ความปลอดภัยอื่น ๆ ของระบบปฏิบัติการ”
ดูเหมือนมีข้อตกลงระหว่างผู้พัฒนาเกมกับ Google/Apple ว่า ให้เลี่ยงการรีวิวได้แลกกับการปล่อยให้รายได้ กล่องสุ่ม ระดับหลายพันล้านดอลลาร์ยังไหลต่อไป
ชุดฟีเจอร์ที่เห็นได้ชัดอย่างหนึ่งคือวิธีที่แอปจำนวนมากเก็บค่าสมัครสมาชิกนอกระบบชำระเงินในรั้วของ Apple เพราะงานจริงของแอปไม่ได้เกิดขึ้นแค่ในอุปกรณ์ แต่เกิดบนคลาวด์ด้วย การแบ่งแอปออกเป็นแอปโลคัลพื้นฐานกับงานเพิ่มเติมบนคลาวด์มีข้อดี แต่เมื่อประสิทธิภาพอุปกรณ์ดีขึ้นเรื่อย ๆ การดูว่าอะไรทำบนเครื่องได้บ้างก็น่าสนใจขึ้นเรื่อย ๆ
ถ้าโครงสร้างระดับบนของแอปชัดเจนพอ รายละเอียดที่เติมอยู่ข้างในก็สามารถค่อยเติมทีหลังได้
ผมชอบสิ่งอย่าง SDUI มานานแล้ว เพราะมันเปิดทางให้สร้างอินเทอร์เฟซที่ไดนามิกมากขึ้นตามความชอบหรือรูปแบบการใช้งานของผู้ใช้ เป็นต้น
แนวทางการทำซอฟต์แวร์สำหรับขั้นตอนงานที่ตายตัวกำลังล้าสมัยลงเรื่อย ๆ ไม่ว่าจะเป็นความต้องการที่เปลี่ยนไปในแต่ละช่วงของมาตรการล็อกดาวน์ช่วงโรคระบาด หรือการปรับประสบการณ์ผู้ใช้ให้เป็นส่วนบุคคลอย่างแท้จริง ซอฟต์แวร์ที่มีกรอบคิดตายตัวกำลังถูกแทนที่ด้วยซอฟต์แวร์ที่ต้องการความยืดหยุ่น
ตอนที่ต้องทำให้พฤติกรรมที่ Apple ไม่ชอบผ่านไปได้ เคยใช้ ทริกตามเวลา
หลังส่งแอปไป 20 วัน พฤติกรรมของปุ่มหนึ่งจะเปลี่ยนไป ทำให้กล่องโต้ตอบ “เปิดไฟล์” กระโดดตรงไปยังไดเรกทอรี root ของผู้ใช้
ตั้งตัวจับเวลาไว้ 2 สัปดาห์ หลังจากนั้นแอปจึงเริ่มทำงานจริง รวมถึงการเรียก API
การรีวิวแอปของ Apple เป็นเรื่องตลกโดยสมบูรณ์
น่าจะหาวิธีระบุระบบของผู้รีวิวเหมือน fingerprint แล้วซ่อนฟังก์ชันจากพวกเขาโดยตรงได้ด้วย
แยกประเด็นหน่อย แอปหลอกลวงส่วนใหญ่ท่วมท้นดูเหมือนจะเอาเงินผู้คนด้วย การสมัครสมาชิกแบบต่ออายุรายสัปดาห์
สิทธิ์ใช้งาน 1 สัปดาห์แบบไม่ต่ออายุอาจมีประโยชน์ได้ เช่น แอป VPN ใช้ 1 สัปดาห์ระหว่างเดินทาง แต่การตัดเงินซ้ำทุกสัปดาห์ควรต้องมีการอนุมัติด้วยมือ ไม่ควรให้ทุกแอปเก็บเงินแบบต่ออายุรายสัปดาห์ได้
การเรียกแอปละเมิดลิขสิทธิ์ว่า มุ่งร้าย ดูจะเกินไปหน่อย ผมพลาดอะไรไปหรือเปล่า หรือบทความนี้เขียนโดยเจ้าของลิขสิทธิ์?
แต่แอปรายได้สูงสุดก็เป็นแอปหลอกลวงอยู่แล้ว และเท่าที่จำได้ก็เป็นแบบนั้นมาตลอด จึงไม่ใช่เรื่องใหม่อะไร
“ตามเอกสารที่เผยแพร่ในปี 2021 ทีม App Store Review มีผู้เชี่ยวชาญที่เป็นมนุษย์มากกว่า 500 คน คอยตรวจสอบแอปมากกว่า 100,000 แอปต่อสัปดาห์”
ถ้ามองข้ามถ้อยคำกำกวมของประโยคนี้ และสมมติว่าผู้รีวิวใช้เวลาทำงาน 100% ไปกับการรีวิว พร้อมทำงานตามสัปดาห์การทำงานมาตรฐาน ก็จะเหลือเวลาประมาณ 12 นาที ต่อแอปหนึ่งตัว
น่าเสียดายที่ Apple ผู้น่าสงสารคงไม่มีเงินพอจ้างผู้รีวิวเพิ่ม เพื่อรับประกันกระบวนการรีวิวที่มีความหมายสำหรับทุกแอป และจ่ายค่าตอบแทนอย่างเพียงพอให้แรงงานที่ทำงานในสภาพแวดล้อมที่เหมาะสม พวกเขาคงกำลังถูกโควตาแอปที่ต้องตรวจในแต่ละสัปดาห์ไล่กดดันอยู่แน่ ๆ
แล้วทำไม Apple ถึงสมควรได้ 30% อีกนะ?
หากแอปล่าสุดผ่านการรีวิวของ App Store และยังอยู่รอด ก็จะมี ช่อง/กลุ่ม Telegram ที่มีคนรวมตัวกันเป็นพัน ๆ คนเพื่อใช้งานมันจนกว่า Apple จะลงมือจัดการ
ยังมีตลาดสำหรับใบรับรองการเซ็นชื่อและที่นั่งเครื่องนักพัฒนา Apple ด้วย ดังนั้นคนที่มีความรู้ทางเทคนิคมากขึ้นก็สามารถเซ็นชื่อ IPA เองแล้วติดตั้งได้
สหรัฐฯ จำเป็นต้องมีกฎหมายแบบ DMA อย่างยิ่ง บริษัทเดียวไม่ควรสามารถกักผู้ใช้ในสหรัฐฯ มากกว่า 60% ไว้ในเรื่องการติดตั้งแอปที่พวกเขาอยากใช้ได้
เช่นเดียวกัน Apple และ Google สองบริษัทก็ไม่ควรสามารถเก็บ 15–30% ของรายได้ทั้งหมดที่เกิดขึ้นในตลาดแอปมือถือได้
ก่อนอื่น 60% นั้นเลือก iOS เอง ไม่ใช่ “ตัวประกัน” และสามารถย้ายออกไปได้ อีกทั้งนี่ก็ไม่ใช่พฤติกรรมใหม่ แต่มีมาตั้งแต่ iPhone เปิดตัวแล้ว ผู้บริโภคกำลังลงคะแนนสนับสนุนสิ่งนี้อยู่ [1]
อย่างที่สอง Google ไม่ได้ควบคุมว่าผู้ใช้ติดตั้งอะไร ดังนั้นตามนิยามแล้วจึงไม่ได้เอาส่วนแบ่งจาก “รายได้ทั้งหมด” คุณค่าส่วนใหญ่ที่มาจากแอปมือถือก็เกิดขึ้นที่อื่น [2] ดังนั้นแม้แต่ตัวเลขของ Apple ก็ยังไม่ถูกต้อง
ในฐานะนักพัฒนา แน่นอนว่าย่อมอยากเข้าถึงอุปกรณ์ของผู้ใช้ได้ตามใจและรันโค้ดที่ต้องการ น่าเสียดายที่นักพัฒนาบางรายต้องการการเข้าถึงแบบนั้นด้วยเหตุผลที่เป็นอันตรายต่อผู้บริโภค นั่นจึงเป็นเหตุผลที่นักพัฒนาพยายามเล่นงานระบบเหมือนเล่นเกม และแอปที่ซื่อสัตย์กลับถูกปฏิเสธ
แต่ต้องเข้าใจว่าผู้ใช้ต้องการ การเข้าถึงที่ผ่านการคัดกรอง แบบนี้ และกำลังลงคะแนนสนับสนุน ไม่ใช่คัดค้าน
[1] เรื่องเมสเซนเจอร์อาจถกเถียงได้ แต่นั่นเป็นปัญหาเรื่องเมสเซนเจอร์ ไม่ใช่เรื่องแอป
[2] แอปเกือบทั้งหมดที่ผมติดตั้งเป็นแอปฟรี บริษัทที่ทำแอปเหล่านั้นมีรายได้จากส่วนอื่นของระบบ พวกเราก็มี “แอปฟรี” ที่เชื่อมกับผลิตภัณฑ์ และผู้คนจ่ายเงินให้ผลิตภัณฑ์นั้น
ด้านหนึ่ง ทั้งคู่รับบทเป็น ผู้เฝ้าประตู ในสโตร์ของตัวเอง และอ้างว่าทำให้ผู้ใช้ปลายทางปลอดภัย
แต่อีกด้านหนึ่ง ถ้าแอปที่เป็นปัญหาทำกำไรได้สูง หรือเกี่ยวข้องกับผลิตภัณฑ์อื่น ๆ จำนวนมากของตนเอง พวกเขาก็อนุญาตความยืดหยุ่นให้ตัวเองในการบังคับใช้กฎแบบเลือกปฏิบัติ
แล้วใครจะเฝ้าผู้เฝ้า?
แผนสำหรับเรื่องนี้คืออะไร?
“แอปสตรีมมิงผิดกฎหมาย”?
นึกว่าเป็นบทความเกี่ยวกับวิธีทำให้แอปไฟฉายได้รับอนุญาตให้เก็บค่าสมัครสมาชิกเดือนละ 50 ดอลลาร์เสียอีก
แอปจำนวนมากเป็นแค่ WebView ที่แสดงหน้าเว็บระยะไกล
ทุกครั้งที่เซิร์ฟเวอร์อัปเดตหน้า แอปก็อัปเดตตาม และไม่ต้องรีวิว