通过cydia substrate 对 framework AP
2017-01-19 本文已影响96人
ahking17
这篇文章没有什么自己的内容, 主要是对别人文章的一个总结和代码实践.
技术知识点
参考资料:
http://www.cnblogs.com/goodhacker/p/4014617.html
//主要参考的这篇文章, 讲的很清晰.
http://blog.csdn.net/yzzst/article/details/47318751
实践demo
- 到http://www.cydiasubstrate.com/ 下载安装cydia_substrate.apk
- 用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<Resources, Integer>() {
public Integer invoked(Resources resources, Object... args)
throws Throwable
{
return invoke(resources, args) & ~0x0000ff00 | 0x00ff0000;
}
});
}
}
});
}
}
通过Hook API 可以实现的一些特殊功能
现在能想到的起码有下面几点:
- 修改任意Activity的背景颜色, 实现对微信的夜间模式
- 修改SplashView的getSplashTime()返回值, 去除自己及其他app的闪屏广告.
- 通过修改传感器的值, 刷微信计步值.
- 一些app, 有一些购买积分的功能点, 通过反编译, 也许能找到设置积分值的代码, 这样也许能设置个无限量的积分值.
- 比较典型的像ximalaya这样的应用, 如果访问积分这块逻辑没有anti-hook的机制保证的话, 很容易出现安全漏洞.
- 有些特殊情况下,有助于调试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 <<Android Anti-Hooking Techniques in Java>>
总结: 了解使用 hook的技术还算比较的重要, 但更重要的是如何anti-hook, 这个技术点其实是更加的重要.
----------------------DONE.--------------