Day 11:安全

前言


安全性虽然不做也不会影响功能,
但如果出事了,小则财损,大则影响公司的生存,
以下分别用攻、防的角度来讨论,
这个领域的水很深,也需要很多背景知识,
这边就只介绍比较常见且基础的手段。


反组译

如果只是要看一个 apk 的档案结构、用了哪些套件,
最简单的做法就是直接将 apk 拖到 Android Studio 中,
但如果是要看程序码,可以使用 JADX ,一样将 apk 拖进 JadxGUI 就可以看程序码了。
但因为有 ProGuard,所以很多 class、function 名称都变成 a, b, c 了。
如果是要修改程序,那麽就需要使用 apktool 将 apk 反编译後,
修改 smali 档,再重新签名、对齐等。

记忆体修改

上面说的是静态的修改,那麽来聊聊 app 正在执行时,动态的修改方式,
记忆体修改大致流程如下:
直接搜寻变数的数值(比如有 100 点数,就搜寻 100),
接着改变数值(花掉或是增加都可以),然後重新搜寻改变後的数值,
范围应该会缩小不少,如果还没有明确出现,就反复上述步骤,
找到该记忆体位置以後,透过该工具直接输入需要的数值。
工具有 GameGuardian、烧饼修改器、八门神器 Game Killer 等。

拦截封包

封包是网路数据传输的单位,
我们可以透过工具将 app 发出的 request 以及 response 拦截,
以此得知该 app 呼叫的 api、资料内容等等资讯。
工具有 Packet Capture 等。


反组译

ProGuard 混淆一定要做好,
重要的资讯不要放在 res 中(res 只要解压缩就能看到),
也尽量不要放在 code 里面,即使要,也请记得加密,
相对好的做法是从 api 取得,这样即使被破,还能及时修改规则,
另外,也有加壳的技术,
加壳的方式很多种,技术细节也很深,这边就不细说。

记忆体修改

对数值做加密,使用的时候做比较、解密,
另外,不要让 app 的数值覆写 server 端的数值,
比方说钱包余额,不管是储值还是消耗,
都要在 server 端执行,app 只做呈现。

拦截封包

请使用官方建议的、GitHub 上有持续维护且使用者众多的方式做网路传输,
部分套件并没有做防护。
另外,也请使用 https。

加解密机制

在 app 中总会有要保护的东西,像是音档、电子书,
这时候我们可能有自己的一套保护机制: DRM
毕竟像音档、电子书等内容经常需要离线浏览,
所以 DRM 机制就会在 app 中,
我们可以使用 c 语言实作编译成 so 档,然後使用 jni 的方式呼叫,
这样可以提升安全性。

金钥

现在将 app 上传至 Google Play 有两种档案格式 - apk 与 aab,
aab 比较新,有很多好处,新的 app 也有规定要 aab,
但如果一开始就上传 apk 的 app 就没有强制要求,
但 apk 是要自己签名後上传,Goolge Play 会认签名,
如果没有当初第一次上传的那把钥匙,
就永远没有办法再上传更新,
aab 的话则是由 Google Play 保管,由 Google Play 来签名,
如此一来就不需要担心金钥遗失或外流的风险。

结语


平常大家都在追功能,很容易就忽略了安全,
到最後可能心血都被盗走了,
我们应该要设周期性的行事历来排时间定期检查,
也要勤劳的更新第三方套件,
另外,也可以请资安团队做黑箱、白箱攻防测试,
其他还有很多安全的方向可以注意,
像是 WebView 可能会遇到 JavaScript injection,
也有可能使用者并不是破解,而是使用欺骗,
像是调时间、模拟 GPS、挡广告等,都要注意。


<<:  [DAY 11] RDS 之 multi AZ 和 security 相关

>>:  [day-11] 一切的基础! Python "运算式与算符"的运用(Part .1)

[DAY3]SQL新手的懒人笔记

[DAY3]SQL的新手懒人笔记 (大写为内建语法) 21.ORDER BY可用来排序资料,如果是字...

[Day 32] - 手把手跨出第一步!用JavaScript在Arduino上写出第一支闪烁LED程序-Part 2

大家好,我是17King~ d(`・∀・)b 好久不见,因为最近比较多事情...Orz 但!我没有忘...

[Flutter ][译] FLUTTER + DJANGO APP (1. DJANGO)

此文来自这位 youtuber BK Codes 的内容;但其实也不算翻译,因为他的印度口音我还真的...

[Day-22] 呼叫自订函式小练习

上次练习完了自订函式的基础 今天就要来练习相关题目罗~ 题目: 1.计算:键盘输入任一整数a,计算2...

学校体温自动上传爬虫(学习记录)

动机 因为疫情,这学习开始学校要求大家每天都要在九点前到学校网站上传体温,我觉得非常麻烦。 动点,果...