三分钟学会实时参数篡改-含实验

0x01 背景

渗透测试的时候经常碰到加解密的情况,或者需要实时篡改某些参数,此时一个固定的参数/结果替换并不能满足需要。

本篇文章将教大家,如何使用简单的方式交互式实时篡改参数/返回结果。

交互式篡改的关键在于,将参数发出给测试人员,并接收结果替换回去。

一个简单的方法是建立一个简单HTTP服务器,Xposed将参数发给服务器,服务器将参数原样返回给Xposed。中间经过Burp代理,从而可以在Burp中拦截方法调用并编辑参数内容。

Xposed Android Studio模板中包含Hook模板,其中GS_Net预制钩子即起到该作用。

0x02 实验

实验目标

一个非常简单的HelloWorld App (即《三分钟创建自定义Xposed模块》中的App)

image.png

反编译看一看:

image.png

可见,Hello World这个字符串来自text2show方法。

好,接下来我们写一个模块动态篡改这个方法的返回值。

步骤一:创建Xposed模块和钩子

新建空工程创建Xposed模块

image.png

包名从AndroidManifest.xml中获得

创建一个Xposed钩子,使用预制钩子GS_Net

1543981782881

步骤二:将钩子挂在目标方法上

新建钩子,启动回环HTTP监听,并挂在目标方法上。

1
2
3
4
new MyXposedHook(8888)
.hook("com.example.monkeylord.demoapp.MainActivity"
,"text2show"
,classLoader);

1543985835650

步骤三: 设置代理并映射回环地址

编译模块,安装并使用Xposed框架加载重启后。

配置测试机使用Burp代理(在逍遥模拟器中,10.0.2.2即为宿主机)。

1543987113392

1543987097411

输入命令映射回环地址,具体端口在创建钩子实例时设置

1
adb forward tcp:8888 tcp:8888

实验结果

打开应用,可以看到Burp中出现了该调用的结果。

1543987153995

打开Burp拦截功能,修改内容

1543987185210

修改后的内容显示在应用上。

1543987203252

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

之前内容

三分钟创建自定义Xposed模块

三分钟学会Hook加固后应用