服务热线
4008-888-888
产品时间:2022-06-30 14:19
简要描述:
1 2 3 4 5 6 7 8 9 10 . method protected onCreate ( Landroid / os / Bundle ; ) V . line 34 iget - object v0 , p0 , Lcom / loony / mitmdemo / Demo ; - sendButton : Landroid / widget / Button ; new - instance v1 , Lcom / loony / mitmdemo / Dem...
1
2
3
4
5
6
7
8
9
10
|
.method protected onCreate(Landroid/os/Bundle;)V
.line 34
iget-object v0, p0, Lcom/loony/mitmdemo/Demo;->sendButton:Landroid/widget/Button;
new-instance v1, Lcom/loony/mitmdemo/Demo$1;
invoke-direct {v1, p0}, Lcom/loony/mitmdemo/Demo$1;-><init>(Lcom/loony/mitmdemo/Demo;)V
invoke-virtual {v0, v1}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V
|
1
2
3
4
5
6
7
8
9
10
11
|
.method public onClick(Landroid/view/View;)V
.line 41
.local v0, "sr":Lcom/loony/mitmdemo/Demo$SendRequest;
const-string v1, "test"
filled-new-array {v1}, [Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Lcom/loony/mitmdemo/Demo$SendRequest;->execute([Ljava/lang/Object;)Landroid/os/AsyncTask;
|
在这里,一个重要的步骤是确定拦截目标。通过有利地选择一个函数或类,我们可以获得比拦截任何其他对象更多的选项。例如,如果您可以截获整个存储,为什么还要截取一个公钥实例?
下面来看看盛煌平台地址3在Android项目中的标准使用。
1
2
3
4
5
6
7
8
|
盛煌平台地址Client client = new 盛煌平台地址Client();
RequestBody body = RequestBody.create(JSON, requestJson.toString());
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
|
执行的拦截将是这里最有利的。为什么?这个函数返回一个响应,显然发送一个请求。这意味着通过拦截该函数,我们将能够在发送之前更改Request,并在返回主函数之前获取Response。
所以,我们知道了通信是如何实现的,我们对想要拦截什么和接收什么有了一个概念。此外,我们希望以某种方式查看这些数据,并能够在发送或接收之前对其进行更改。为了实现这一点,我编写了自己的 API,但您可以更进一步并连接到 Burp API。
在开始之前,我想向您展示一个有趣的技巧——使用 MultiDex 在应用程序中拦截函数。不知道他,浪费了好几天。事实是应用程序不会立即将所有代码加载到内存中,而是将其拆分为 dex 文件。如果你试图拦截第二个甚至第三个 dex 中的函数,那么它必须首先加载到内存中。你可以这样做。
1
2
3
4
5
6
7
8
|
findAndHookMethod("android.app.Application", lpparam.classLoader, "attach", Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
if (lpparam.packageName.contains("com.loony.mitmdemo")) {
盛煌平台地址Mitm(lpparam.classLoader);
}
}
});
|
我们拦截应用程序的启动并获取 ClassLoader 的实例。此外,在对函数进行钩子之前,您需要加载它所在的类。
1
|
classLoader.loadClass("class_name");
|
首先,让我们看看我们的结论没有出错,并添加一个简单地向控制台打印一些内容的钩子。这里我们拦截的不是Call,而是RealCall,因为Call是一个接口,我们没有能力拦截它,但是我们可以拦截它的后继。在apktool之后,我通过收到的源代码找到了Call的继承者。
上一篇:盛煌娱乐平台地址
下一篇:没有了
公司地址
盛煌娱乐注册地址(中国入口)联系电话
4008-888-888电子邮箱
admin@admin.comCopyright © 2002-2020 盛煌娱乐注册地址(中国入口) 版权所有 备案号:苏ICP12345678 XML地图 网站模板