通过cydia substrate 对 framework API进行注入

这篇文章没有什么自己的内容, 主要是对别人文章的一个总结和代码实践.

技术知识点

参考资料:
http://www.cnblogs.com/goodhacker/p/4014617.html
//主要参考的这篇文章, 讲的很清晰.
http://blog.csdn.net/yzzst/article/details/47318751

实践demo
  1. 到http://www.cydiasubstrate.com/ 下载安装cydia_substrate.apk
  2. 用eclipse导入demo工程, 这个demo工程用于演示更改背景色.
    /home/wangxin/src/github/substrate/cydia-android-hook-master
核心代码
import com.saurik.substrate.MS;

public class Main {

    static void initialize() {

        // getExternalStorageState hook to return true, will cause boot issue
        // so hook it after boot
        //if (!MainActivity.isManualTrigger) return;

          MS.hookClassLoad("android.content.res.Resources",
                new MS.ClassLoadHook() {
                   public void classLoaded(Class resources) {
     
                      Method getColor;
                      try {
                         getColor = resources.getMethod("getColor",
                            Integer.TYPE);
                      } catch (NoSuchMethodException e) {
                         getColor = null;
                      }
     
                      if (getColor != null) {
                          MS.hookMethod(resources, getColor, new MS.MethodAlteration() {
                                public Integer invoked(Resources resources, Object... args)
                                    throws Throwable
                                {
                                    return invoke(resources, args) & ~0x0000ff00 | 0x00ff0000;
                                }
                            });
                        }
                   }
                });

       }
}

通过Hook API 可以实现的一些特殊功能

现在能想到的起码有下面几点:

  1. 修改任意Activity的背景颜色, 实现对微信的夜间模式
  2. 修改SplashView的getSplashTime()返回值, 去除自己及其他app的闪屏广告.
  3. 通过修改传感器的值, 刷微信计步值.
  4. 一些app, 有一些购买积分的功能点, 通过反编译, 也许能找到设置积分值的代码, 这样也许能设置个无限量的积分值.
  5. 比较典型的像ximalaya这样的应用, 如果访问积分这块逻辑没有anti-hook的机制保证的话, 很容易出现安全漏洞.
  6. 有些特殊情况下,有助于调试app, 比如确定某个framework API在app层的调用位置, 就可以通过hook这个api, 打印出stacktrace来确定.
Anti-Hooking 技术

http://wps2015.org/drops/drops/Android%20Java%E5%B1%82%E7%9A%84anti-hooking%E6%8A%80%E5%B7%A7.html
这里提供了几种方法用于anti-hook Cydia Substrate和Xposed框架
0x01 检测安装的应用
0x02 检查调用栈里的可疑方法
0x03 检测并不应该native的native方法
0x04 通过/proc/[pid]/maps检测可疑的共享对象或者JAR

写的非常精彩, 对于正经开发app是很有价值的.

原文地址:
http://d3adend.org/blog/?p=589 <>

总结: 了解使用 hook的技术还算比较的重要, 但更重要的是如何anti-hook, 这个技术点其实是更加的重要.
----------------------DONE.--------------

你可能感兴趣的:(通过cydia substrate 对 framework API进行注入)