0x01 背景
渗透测试的时候经常碰到加解密的情况,或者需要实时篡改某些参数,此时一个固定的参数/结果替换并不能满足需要。
本篇文章将教大家,如何使用简单的方式交互式实时篡改参数/返回结果。
交互式篡改的关键在于,将参数发出给测试人员,并接收结果替换回去。
一个简单的方法是建立一个简单HTTP服务器,Xposed将参数发给服务器,服务器将参数原样返回给Xposed。中间经过Burp代理,从而可以在Burp中拦截方法调用并编辑参数内容。
在Xposed Android Studio模板中包含Hook模板,其中GS_Net预制钩子即起到该作用。
0x02 实验
实验目标
一个非常简单的HelloWorld App (即《三分钟创建自定义Xposed模块》中的App)
反编译看一看:
可见,Hello World这个字符串来自text2show方法。
好,接下来我们写一个模块动态篡改这个方法的返回值。
步骤一:创建Xposed模块和钩子
新建空工程创建Xposed模块
包名从AndroidManifest.xml中获得
创建一个Xposed钩子,使用预制钩子GS_Net
步骤二:将钩子挂在目标方法上
新建钩子,启动回环HTTP监听,并挂在目标方法上。
1 | new MyXposedHook(8888) |
步骤三: 设置代理并映射回环地址
编译模块,安装并使用Xposed框架加载重启后。
配置测试机使用Burp代理(在逍遥模拟器中,10.0.2.2即为宿主机)。
输入命令映射回环地址,具体端口在创建钩子实例时设置
1 | adb forward tcp:8888 tcp:8888 |
实验结果
打开应用,可以看到Burp中出现了该调用的结果。
打开Burp拦截功能,修改内容
修改后的内容显示在应用上。
0x03 总结
延展Xposed功能
在《三分钟创建自定义Xposed模块》中,讲述了一个Xposed钩子的三要素,即“在什么时机”、“Hook谁”、“做什么”,交互式篡改技术即是对“做什么”的拓展,利用nanoHttpD在目标进程启动了HTTP服务监听。
你可以简单地用Xposed处理参数,也完全可以利用Xposed在目标进程里创建和启动各种服务,比如Socket Server、动态加载SO文件等等等。
简单来说,不必局限自己的思维,只要Java能做到的,在Xposed里同样也可以做到。
后续还会进一步讲解
1、如何利用Xposed快速寻找加解密方法。
0x04 附件与参考
HelloWorld App
链接:https://pan.baidu.com/s/1dG3PjZN 密码:n2s0