smali代码审计:从AndroidManifest到权限漏洞挖掘的思路
https://www.metk.cn/img/posts/smali_code_audit.jpgapktool反编译出来的smali代码看着头疼,但找漏洞其实有套路。这篇说说我做审计的思路。
第一步永远先看AndroidManifest.xml。重点看几个东西:exported为true的组件有没有做权限校验,有没有配intent-filter的Activity和Service暴露给外部,有没有grantUriPermission。很多越权漏洞就是因为一个exported的Activity没做鉴权。
第二步看权限定义。如果应用自定义了permission然后protectionLevel设的normal或者dangerous,这个权限随便就能被恶意应用申请到。如果设的signature,至少要签名一致才能用。
第三步进smali搜敏感API调用。用grep搜getDeviceId、getIMEI、SmsManager、HttpClient、FileOutputStream这些关键词,找到调用点后逆向追数据流,看输入来源是不是用户可控的。比如一个Activity的getIntent参数直接拼进了SQL语句,这就是注入点。
smali代码看着慢但有个好处:不会像Java反编译那样丢信息。jadx反编译有时候会把关键逻辑优化掉或者反编译失败,smali是字节码的直接表示,不会骗你。配合jadx看Java层、apktool看smali层,两层对照着审效率最高。
页:
[1]