• 【安卓逆向】去除云注入(使用MT论坛dl的方法总结拓展)


    0、相关工具链接:

    先说我的解决办法:

    1、使用算法助手分析出原作者自己写的那个Application类名
    2、把这个类名替换AndroidManifest文件中的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文件中android:name属性写上这个自定义类的包名(路径)。

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

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

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

    通过反编译,我们发现
    1、在AndroidManifest文件的
    比如:
    在这里插入图片描述这就说明可能存在两种情况:
    1、原作者没继承Application,但是有人通过修改继承Application类加入的
    2、原作者已经继承Application,但是有人通过修改继承原作者的Application那个类名加入的


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

    
    
    • 1

    3、解决办法:

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

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

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

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

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

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

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

    1、通过解密的方式获取(MT大佬的方法,具体看文末,此处简单写出方法和工具)
    	(1)通过分析smali代码,找到云注入的代码。然后复制A变量和app_id变量的值。
    	(2)使用大佬的解密工具解密出类名。(此方法可行)
    		工具可以去MT搜大佬的文章,获取链接。
    		但是为了方便大家,我把自己保存的备份给你们。
    2、通过MT的注入日志log来打印出来。
    此方法感觉不简单,感兴趣的请自行尝试,此处我不做进一步探讨。
    
    3、使用逆向中最常用的【算法助手】,使用其中的【Application监听】分析一下即可看到。但是此处需要lsp/xposed框架。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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 ()V    
        .registers 1    
        invoke-direct {p0}, L路径;->()V    // 修改处注意2
        return-void
    .end method
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    改成:

    .class public Lcom/cloudinject/feature/App;
    
    .super Larm/StubApp;
    # direct methods
    .method public constructor ()V    
        .registers 1    
        invoke-direct {p0}, Larm/StubApp;->()V    
        return-void
    .end method
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

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

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

    结束。

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

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

  • 相关阅读:
    杭电oj 2041 超级楼梯 C语言
    服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决
    JAVASE语法零基础——抽象类和接口
    [2016-2018]phpstudy的exp制作
    【万字长文】使用 LSM-Tree 思想基于.Net 6.0 C# 实现 KV 数据库(案例版)
    Azure Devops(十四) 使用Azure的私有Nuget仓库
    Vector 模拟实现
    【JavaScript】JS开发中五个常用功能/案例(36-40)(牛客题解)
    Java面试必考题之线程的生命周期,结合源码,透彻讲解!
    VLOOKUP函数的使用方法
  • 原文地址:https://blog.csdn.net/zhinengxiong6/article/details/128093594