【安卓逆向】如何简单快速去除云注入(另附MT论坛某佬的方法对比)

本文档详细介绍了如何解决安卓虚拟机遭遇云注入的问题,包括分析云注入的原理,提供两种不同的解决方案:一种是通过修改AndroidManifest.xml文件,另一种是修改smali代码。同时,提供了寻找原作者Application类名的多种方法,并给出了具体步骤和工具链接。最后,讨论了MT论坛某大佬的高级解决办法,涉及修改smali代码以创建空壳类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0、相关工具链接:

先说我的解决办法:

1、使用算法助手分析出原作者自己写的那个Application类名
2、把这个类名替换AndroidManifest文件中的<application的android:name属性即可
3、(可选)把云注入文件删除,删不删都不影响。

其中使用到的工具备份百度云链接:(工具仅供学习交流使用,切勿用于非法用途)
请添加图片描述

因为虚拟机有点大,所以提供两种选择:
1、带虚拟机(大文件):
链接:https://pan.baidu.com/s/1nuhMH1QjrggwhFMek8N5Ow
提取码:4848
2、不带虚拟机(小文件):
链接:https://pan.baidu.com/s/1NGtp7VqpRXQpKfi49dEr5w
提取码:4848

1、需求分析:

因为最近使用的虚拟机突然不能用了,被人云注入强制弹窗,如下图:(这一看就是云注入了)
在这里插入图片描述

2、原理分析:

前提知识:
1、安卓中的每一个应用程序真正的入口点Application类实例(如果你做过安卓开发你就会知道)。
2、一个应用最多只能有一个Application类实例。开发者通过继承Application类来实现,在Java中写法为:public class App extends Application,这个Application来自android.app.Application包。
3、如果用户继承Application类并使用,必须要在AndroidManifest文件中的<application标签内的android:name属性写上这个自定义类的包名(路径)。

比如:
(1)假设原来作者写了一个Application类(类名为App):
public class App extends Application{ .... }
(2)那么作者必须要在AndroidManifest文件的<application标签的出现这个东西:android:name="com.xxx...App"
但是你如果要加上自己的Application,那你必须继承上面的App类(类名为App2):
public class App2 extends App{ .... }
(3)然后对应修改在AndroidManifest文件的<application标签的改成新的类android:name="com.xxx...App2"

关于这个Application类的具体细节请自行查看官网文档(英文,自己翻译)
https://developer.android.google.cn/reference/android/app/Application

也就是说如果原来的应用作者已经写一个了,你逆向修改的时候想直接再加一个自己的Application类是不行的。如果你想加,就必须要继承原来作者写的那个Application类。也就是说,你首先要知道原来作者写的这个Application的类名。一般在AndroidManifest文件中的<application的android:name属性就能看到目前程序的那一个Application类名路径了。

通过反编译,我们发现
1、在AndroidManifest文件的<application标签的出现这个东西:android:name=“com.cloudinject.feature.App”
比如:
在这里插入图片描述这就说明可能存在两种情况:
1、原作者没继承Application,但是有人通过修改继承Application类加入的
2、原作者已经继承Application,但是有人通过修改继承原作者的Application那个类名加入的


2、分析这个com.cloudinject.feature.App包对应的代码
其实你会发现就是多了一个com.cloudinject的目录。
cloudinject这个单词的意思就是云注入。这个目录中强行继承了作者原来的Application类,然后在在AndroidManifest文件的<application标签的android:name属性改成自己的。为了防止云注入被破解,还对自己继承的这个原来作者的这个Application类名加密了


3、解决办法:

根据上面的【原理分析】,
(1)我的解决方法:

0、把cloudinject目录删了(其实删不删都无所谓)。
1、寻找原来作者的Application类名
2、在AndroidManifest文件的\<application标签的android:name属性改回作者原来的

最后自己保存回编译重新签名安装(使用MT管理器都没啥问题)。

(2)MT论坛某大佬的解决办法:

0、不要删cloudinject目录(其实反倒是需要修改)。
1、寻找原来作者的Application类名
2、修改其中的继承自原作者Application类的子类改为空壳代码

也就是说,大佬的方法需要修改smali代码,但是不需要修改AndroidManifest的代码,稍微有点麻烦,但是可能在某种情况下有更好的作用,所以此处只是作一个记录扩展。个人推荐使用我的方法。

所以唯一的难点就是如何去寻找这个原来作者的Application类名,目前总结的部分方法如下:
(3)如何去寻找这个原来作者的Application类名:

1、通过解密的方式获取(MT大佬的方法,具体看文末,此处简单写出方法和工具)
	(1)通过分析smali代码,找到云注入的代码。然后复制A变量和app_id变量的值。
	(2)使用大佬的解密工具解密出类名。(此方法可行)
		工具可以去MT搜大佬的文章,获取链接。
		但是为了方便大家,我把自己保存的备份给你们。
2、通过MT的注入日志log来打印出来。
此方法感觉不简单,感兴趣的请自行尝试,此处我不做进一步探讨。

3、使用逆向中最常用的【算法助手】,使用其中的【Application监听】分析一下即可看到。但是此处需要lsp/xposed框架。

4、MT某大佬的方法

感兴趣的翻到文章末尾。

5 【算法助手】寻找作者的Application类名(路径)

在这里插入图片描述

在这里插入图片描述

我的解决办法:

然后就可以知道我们后面需要的原来的Application的类名``arm.StubApp了,记住她。如果使用我的办法,就直接去修改AndroidManifest的那个属性就行了,就不需要往下看了
在这里插入图片描述

----------END分割线:如果你使用我的方法,就不需要往下看了--------

6 【使用MT-DL方法】找到云注入启动代码路径并修改

!注意:如果你使用我的方法,就不需要往下看了

找到云注入(cloudinject)的代码,
在这里插入图片描述
这里就放着云注入cloudinject所启动的代码。
在这里插入图片描述

7、修改这个类。

按照大佬的意思,就是改成空壳代码即可。
这里需要用到前面我们苦苦寻找的Application类名
【arm.StubApp】对应的smali代码写法是
【Larm/StubApp】前面加个L,点化成斜杠

修改模板:
.super L路径;// 修改处注意1
# direct methods
.method public constructor <init>()V    
    .registers 1    
    invoke-direct {p0}, L路径;-><init>()V    // 修改处注意2
    return-void
.end method

改成:

.class public Lcom/cloudinject/feature/App;

.super Larm/StubApp;
# direct methods
.method public constructor <init>()V    
    .registers 1    
    invoke-direct {p0}, Larm/StubApp;-><init>()V    
    return-void
.end method

如图:
在这里插入图片描述

然后保存退出重新签名即可。

因为替换成空壳代码,云注入就彻底没用了。

结束。

8 【最后】扩展:大佬的方法

如图(MT大佬分享的,感兴趣的朋友可以去大佬主页看看他其他文章):在这里插入图片描述

### SQL 二次注入攻击原理 SQL 二次注入是一种特殊的SQL注入形式,在这种情况下,恶意输入被暂时保存在数据库中而不是立即执行。当应用程序稍后检索并处理这些数据时,未正确转义的数据可能导致意外的SQL命令被执行[^1]。 例如,考虑一个论坛应用允许用户设置自己的签名档。假设该平台没有充分验证或清理提交的内容,则攻击者可以在此字段内嵌入有害字符串。当下次显示此用户的帖子列表时,服务器端代码可能会尝试读取这条记录来构建页面输出,而其中包含未经适当过滤的先前存储下来的特殊字符序列,从而触发潜在风险。 ```sql -- 用户提供的恶意签名可能如下所示: ' OR '1'='1 ``` 一旦上述内容作为正常查询的一部分再次拼接成新的语句片段,就有可能绕过预期逻辑控制流,造成非授权操作的发生。 ### 防御措施 为了防止SQL 二次注入的风险,应当采取多层次的安全策略: #### 参数化查询与预编译语句 通过使用参数化的SQL查询而非直接拼接字符串的方式构造指令集,能够有效阻止大部分类型的SQL注入威胁。这种方式确保了传入变量仅会被解释为值而不是部分构成语法结构本身的部分。 ```csharp using (var command = new SqlCommand("SELECT * FROM Users WHERE Username=@username", connection)) { command.Parameters.AddWithValue("@username", userInput); } ``` #### 数据净化和编码转换 对于任何来自外部源的信息,在存入库之前都应经过严格的清洗流程去除掉不必要的空白符、HTML标签以及其它可疑成分;同时针对特定上下文环境做相应的编码变换(比如URL编码),以此减少后续环节遭遇解析错误的概率[^4]。 #### 输出逃逸机制 即使是在展示阶段也要保持警惕——特别是那些曾经由第三方供给过的材料。采用合适的函数对即将呈现给浏览器或其他客户端组件前的数据实施必要的转义动作,使得它们不会干扰到渲染过程中的标记语言解析器工作状态[^3]。 #### 定期审查和更新依赖库 随着技术进步,旧版软件可能存在未知漏洞。因此建议开发者团队持续关注官方发布的补丁通知,并及时升级至最新稳定版本以获得更好的保护性能[^5]。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值