美文网首页Android技术知识Android安全-逆向
某博国际版去广告过so签名校验的思路

某博国际版去广告过so签名校验的思路

作者: sunrain_ | 来源:发表于2019-04-20 23:02 被阅读85次

    前言

    每次打开某博国际版时,有 5 秒的开屏广告,不胜其烦,便萌生了去掉开屏广告的想法。

    本文不会拘泥于细节,仅体现大致思路。因为随着软件的更新需要修改的位置难免发生变化,在其它软件上更是无法照搬。

    本文仅供研究学习使用,请勿用于非法用途。

    工具

    某博国际版 - v3.1.0
    dex2jar - v2.1-nightly-28
    jd-gui - v1.4.2
    apktool - v2.4.0
    Android Killer - v1.3.1
    Sublime Text
    010 Editor - v8.0.0
    IDA - v7.0.170914
    ApkScan-PKID

    dex2jar 和 jd-gui 使用教程
    apktool 命令配置教程

    查壳

    未进行加壳,省一些事情。

    dex 转换为 jar

    因为 Android Killer 对多 dex 文件的支持并不很好,所以只得使用一些原始的方法。

    将 apk 解压后可以看到有两个 dex 文件。
    使用 dex2jar 将其转换为 jar 文件,在 jd-gui 中打开。

    定位广告位置

    在 Android Killer 中可以容易的看到入口为 LogoActivity .

    在 LogoActivity 中找到显示广告的相关逻辑。
    所以接下来的思路就是让openSinaAd()openGDTAD()的 if 语句返回 false,以绕过这两个方法,让其直接执行initMainTabActivity()方法。

    反编译

    apktool -r d com.***.***.apk
    使用 apktool 命令反编译 apk,加 -r 是不需要处理 res.

    使用 Sublime Text 打开 LogoActivity.smali ,找到刚才定位到的loginOrGlance()方法。
    修改 条件判断前半部分为 0 ,使 == 1 不成立,绕过openGDTAD()方法,openSinaAd()方法同理。

    保存,使用 apktool 回编译,签名,安装。
    但软件启动时崩溃,想必是遇到了签名校验。

    过 so 签名校验

    查看日志,在 so 中getIValue方法发生了崩溃。

    使用 IDA 搜索 getIValue,(可配合 Graph view 、Text view 视图),找到后 F5 查看 C 语言代码。上下查看方法调用,在找到一处签名校验的地方,在 HEX view 中修改(右键 Edit 修改,再右键 Apply changes)直接使 R0 赋值为 1(true),绕过其字符串 <= 0 判断。

    在 IDA 中的修改仅仅是为了验证修改是否正确,源文件并不会改变(也可以通过一些设置使其生效)。可以定位修改位置后再利用 010 Editor 等编辑器来对源文件进行修改。

    完毕后,回编译,签名,安装。
    这次不崩溃了,但是输入账号密码后,弹出了“客户端没有权限”的 Toast.

    定位“客户端没有权限” Toast 位置

    在 Android Killer 中搜索“客户端没有权限”文本,查询到它在 string.xml 中对应资源名称为 SINA_21326,根据名称在 public.xml 中查询到它的 id 为 0x7f0f003e,转为 10 进制:2131689534,用 jd-gui 搜索十进制后在 UIManager.class 文件中找到了 Toast 显示的地方,但本地字符串并没有直接用于(进行了其它逻辑判断), Toast 显示的字符串很可能来自于服务器。再加上这段逻辑复杂,可能耗费时间较多,我放弃根据 Toast 位置反推的方法,正推直接查看登录函数。

    登录函数

    因为没有混淆,还是很简单的。较为怀疑的就是****Pin函数。它是 native 方法,继续使用 IDA 查看 so.

    在它的调用函数中,看到了一段 hashcode 的判断。

    在 HEX view 中修改,CMP 判断条件,使 == 永远为 true,令 hashcode 判断失效。

    完毕后,回编译,签名,安装。
    输入账号密码后,成功登录,反复关闭打开软件,启动时不再有 5 秒的广告。

    这次去广告以及由此引发的过 so 签名校验的分享也就告一段落了。
    谢谢大家。

    后续

    使用时还发现软件从后台回到前台时也会显示广告,使用开发者助手发现这个广告页是 NewSplashActivity,查找调用后发现在 ProcessMonitor 中有 Activity 生命周期的监听,定位到相关函数,将 != 改为 == 即可。


    相关文章

      网友评论

        本文标题:某博国际版去广告过so签名校验的思路

        本文链接:https://www.haomeiwen.com/subject/jivqgqtx.html