使用Xposed进行黑盒测试
作者:Goshin 发布时间:[ 2016/8/31 14:02:45 ] 推荐标签:黑盒测试 单元测试
Hook 系统 API
你可以 hook 一些敏感的系统 API,打印出参数和返回结果,从而获取到一些关键信息。
比如说 HTTP 请求中的 payload、 startActivity() 中传递的 Intent,块加密的密钥等敏感内容。
XposedHelpers.findAndHookConstructor("java.net.URL", loadPackageParam.classLoader, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
String url = (String) param.args[0];
log("URL construct " + url);
/* 还可以通过修改参数或结果,改变应用逻辑 */
param.args[0] = "http://www.baidu.com/";
log("Change URL to " + param.args[0]);
}
});
打印栈跟踪信息
新建一个 Exception ,把当前应用方法调用的栈跟踪信息打印出来。对于混淆后的代码,这招相当有用,可以快速定位反汇编后的关键点,理清类之间调用关系,对理解程序的逻辑很有帮助。
XposedHelpers.findAndHookConstructor("java.net.URL", loadPackageParam.classLoader, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
/* 打印调用栈跟踪信息 */
new Exception("new URL").printStackTrace();
/* 记录到 Xposed 日志 */
XposedBridge.log(new Exception("new URL"));
}
});
Hook 异常信息
应用运行过程中产生的异常往往包含了一些重要信息,而这些异常通常会被捕获且不会将异常 log 内容打印出来。这时可以通过 Xposed 来 hook 异常的构造方法,得到异常跟踪信息。Java 的异常类通过继承来实现异常的层级化归类,且子类在构造时会调用父类的构造方法,所以我们可以通过 hook 异常基类来实现对一大类异常的捕获,如:
XposedBridge.hookAllConstructors(IOException.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
/* 所有网络 IO,本地 IO 等 IO 错误都会被捕获 */
XposedBridge.log((Throwable) param.thisObject);
}
});
后
暂时先记录这么多,以后有想起什么再另行补充,欢迎大家留言指正。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
iOS单元测试mocha、chai、sinon和istanbul实现百分之百的单元测试覆盖率关于单元测试的总结及思考编写更好的Java单元测试的7个技巧Android单元测试框架Robolectric3.0介绍(一)使用Kiwi单元测试总结单元测试如此重要,为什么你不知道Python单元测试??使用装饰器实现测试跳过和预期故障对Controller的单元测试写好单元测试的10个技巧单元测试的重要性Angular单元测试系列??Component、Directive、Pipe 以及ServiceAndroid单元测试的整理提升单元测试体验的利器--Mockito使用总结iOS UnitTest单元测试Vue的单元测试探索(二)

sales@spasvo.com