Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android APK脱壳--腾讯乐固、360加固一键脱壳

Android APK脱壳--腾讯乐固、360加固一键脱壳

作者头像
用户1205080
发布于 2018-10-18 07:28:19
发布于 2018-10-18 07:28:19
17.8K00
代码可运行
举报
文章被收录于专栏:编码前线编码前线
运行总次数:0
代码可运行

概述

现在使用Proguard进行混淆的代码,也很容易被破解,所以就出现了加固工具,让反编译的难度更大。但是有了加固技术,就会有反加固技术,正所谓道高一尺魔高一丈。

经过加固后的apk,通过 dex2jar反编译:

腾讯乐固:

360加固:

从上面可以看出,经过加固后的apk,通过常规方法反编译无法获取到源码。

下载工具

脱壳工具FDex2

通过Hook ClassLoader的loadClass方法,反射调用getDex方法取得Dex(com.android.dex.Dex类对象),在将里面的dex写出。

下载地址:

链接:https://pan.baidu.com/s/1smxtinr 密码:dk4v

VirtualXposed

VirtualXposed:无需root手机即可使用xp框架。

下载地址:

https://vxposed.com/

脱壳

Step1:

VirtualXposedFDex2需要脱壳的应用都安装到手机上。

Step2:

启动 VirtualXposed,并在 VirtualXposed中安装 FDex2:

Step3:

VirtualXposed中激活 FDex2:

Step4:

VirtualXposed中安装要脱壳的应用,方法和Step2一样。

Step5:

启动 VirtualXposed中的 FDex2,并配置要脱壳的应用。

Step6:

VirtualXposed中运行要脱壳的应用。

Step7:

脱壳后的dex文件:

导出脱壳的dex文件:

root设备:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb root
adb pull /data/user/0/iv.va.exposed/virtual/data/user/0/{packageName}   {电脑上的目录}

未root设备:

VirtualXposed中,设置-->高级设置-->文件管理,安装文件管理器,然后通过文件管理器进入到指定的目录,通过 分享功能发到电脑上。

Step8:

通过 dex2jar对 脱壳的dex进行反编译:

从上图就可以看到脱壳后的dex文件被成功的反编译。

FDex2核心代码MainHook

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.ppma.xposed;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Method;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XSharedPreferences;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class MainHook implements IXposedHookLoadPackage {

    XSharedPreferences xsp;
    Class Dex;
    Method Dex_getBytes;
    Method getDex;
    String packagename;


    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        xsp = new XSharedPreferences("com.ppma.appinfo", "User");
        xsp.makeWorldReadable();
        xsp.reload();
        initRefect();
        packagename = xsp.getString("packagename", null);
        XposedBridge.log("设定包名:"+packagename);
        if ((!lpparam.packageName.equals(packagename))||packagename==null) {
            XposedBridge.log("当前程序包名与设定不一致或者包名为空");
            return;
        }
        XposedBridge.log("目标包名:"+lpparam.packageName);
        String str = "java.lang.ClassLoader";
        String str2 = "loadClass";

        XposedHelpers.findAndHookMethod(str, lpparam.classLoader, str2, String.class, Boolean.TYPE, new XC_MethodHook() {
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                super.afterHookedMethod(param);
                Class cls = (Class) param.getResult();
                if (cls == null) {
                    //XposedBridge.log("cls == null");
                    return;
                }
                String name = cls.getName();
                XposedBridge.log("当前类名:" + name);
                byte[] bArr = (byte[]) Dex_getBytes.invoke(getDex.invoke(cls, new Object[0]), new Object[0]);
                if (bArr == null) {
                    XposedBridge.log("数据为空:返回");
                    return;
                }
                XposedBridge.log("开始写数据");
                String dex_path = "/data/data/" + packagename + "/" + packagename + "_" + bArr.length + ".dex";
                XposedBridge.log(dex_path);
                File file = new File(dex_path);
                if (file.exists()) return;
                writeByte(bArr, file.getAbsolutePath());
            }
            } );
    }

    public void initRefect() {
        try {
            Dex = Class.forName("com.android.dex.Dex");
            Dex_getBytes = Dex.getDeclaredMethod("getBytes", new Class[0]);
            getDex = Class.forName("java.lang.Class").getDeclaredMethod("getDex", new Class[0]);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }

    }

    public  void writeByte(byte[] bArr, String str) {
        try {
            OutputStream outputStream = new FileOutputStream(str);
            outputStream.write(bArr);
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
            XposedBridge.log("文件写出失败");
        }
    }
}

参考链接

  1. https://www.52pojie.cn/forum.php?mod=viewthread&tid=758726&fromguid=hot
  2. https://bbs.pediy.com/thread-224105.htm
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编码前线 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android APK脱壳--腾讯乐固、360加固一键脱壳
参考文章:https://www.jianshu.com/p/138c9de2c987
bosh123
2021/01/24
13.7K0
APP爬虫技术总结
d.通过写xposed hook插件打印请求url和请求参数(示例可参照下面的案例)
全栈程序员站长
2022/08/26
6820
APP爬虫技术总结
没有Android基础都能学会的Xposed基础教程
随着手机使用者增多,手机智能化程度提高,各种app应运而生,这些app中不免有些恶意程序,时刻威胁着使用者,对用户的隐私等造成侵犯。究其原因是系统开源导致安全威胁,这次通过学习一个开源框架xposed来了解移动app的安全。
知识与交流
2023/03/25
1.5K0
没有Android基础都能学会的Xposed基础教程
Xposed 3.1.5 首战 之 来场劫持用户输入玩玩吧
理解程度还不够,阅读几次也只是有个印象而已,这次再次拷贝一份,以供阅读此文的小伙伴简单阅读一下:
贺biubiu
2019/06/11
8720
浅谈android hook技术浅谈android hook技术-- coding:utf-8 --print jscode author = 'gaohe'-- coding:utf-8 --pri
您当前的位置: 安全博客 > 技术研究 > 浅谈android hook技术 浅谈android hook技术 2017年03月17日 10:06 1249 前言 在测试android过程中,能对函数进行hook能帮助更加深入的进行测试,本文简单介绍了hook框架xposed和frida,从简单的小例子做了简单的演示,算是自己的学习的过程,是个入门的过程。
一个会写诗的程序员
2018/08/20
2K0
Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOPXposed参考文档:
Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子:
一个会写诗的程序员
2018/08/20
5880
使用Xposed强制android WebView开启debug模式使用Xposed强制android WebView开启debug模式Xposed前期工作
从 https://developer.chrome.com/devtools/docs/remote-debugging 我们可以知道在android 4.4+可以通过在apk中使用下面的代码开启webview的chrome远程调试
一个会写诗的程序员
2018/08/20
3.1K0
android VitualXposed 模块编写
virtual Xposed virtual Xposed下载链接: 提取码: kyrd virtual xposed wiki vx的一些命令 adb shell am start io.va.exposed/io.virtualapp.splash.SplashActivity 启动 adb shell am broadcast -a io.va.exposed.CMD -e cmd reboot 重启 adb shell am broadcast -a io.va.exposed.CMD
tea9
2022/07/16
8650
android VitualXposed 模块编写
Android逆向(前7章打包下载)|Xposed Hook(上)
每一章节详细内容及实验材料可通过加入底部免费的【Android逆向成长计划】星球获得!
辞令
2022/04/02
1.2K0
Android逆向(前7章打包下载)|Xposed Hook(上)
教你三分钟写个Xposed模块
了解Android开发的同学可能听说过Xposed,它的强大可以说是只有你想不到的,没有它做不到的功能。 举个例子, 它可以修改系统的IMEI,手机号,甚至可以说可以让一台小米手机完全变成一台OPPO。
PhoenixZheng
2018/08/07
8710
使用Xposed强制androidwebView开启debug模式
IMWeb前端团队
2018/01/08
1.7K0
使用Xposed强制androidwebView开启debug模式
使用 Xposed 强制 androidwebView 开启 debug 模式
本文介绍了一种使用Xposed框架实现强制开启Android WebView的debug模式的方法,该方法通过hook WebView的构造函数和调用setWebContentsDebuggingEnabled()来实现。具体步骤包括:获取QQ WebView的Apk,利用Xposed框架对QQ WebView的构造函数进行hook,在hook函数中调用setWebContentsDebuggingEnabled()以强制开启debug模式。
腾讯IVWEB团队
2017/03/13
2.5K0
xposed框架的Android网络监测模块XposedInstaller:操作步骤
https://github.com/rovo89/XposedInstaller
一个会写诗的程序员
2018/08/20
5.1K0
[Android][Security] Android 逆向之 xposed
我当然不会满足于这么一点浅薄的介绍,既然用这个框架了,那就得把这个框架搞清楚对不?
wOw
2020/01/20
2.5K0
Android逆向|Xposed Hook(中)
本篇是《Android逆向入门教程》的第八章第1.3节,具体课程详情可点击下方图片查看:
辞令
2022/05/17
2.1K0
Android逆向|Xposed Hook(中)
Android逆向|Xposed Hook(下)
本篇是《Android逆向入门教程》的第八章第1.4节,具体课程详情可点击下方图片查看:
辞令
2022/05/17
3.9K0
Android逆向|Xposed Hook(下)
Crack App | Android Studio 下的 Xposed 开发环境搭建
创建 app 项目之后,在AndroidStudio创建一个android应用后,在AndroidManifest.xml里添加以下内容
咸鱼学Python
2022/03/29
1.4K0
Crack App | Android Studio 下的 Xposed 开发环境搭建
Xposed模块编写基础案例
如何创建Andrioid项目可以参考之前的文章:IDEA创建Android项目并反编译APK
李玺
2021/11/22
1.4K0
Xposed模块编写基础案例
Xposed 配置,使用以及原理介绍
在搞逆向的时候,Hook是个很必要的手段,通过Hook就可以了解内部的运行机制,甚至进行修改。对于Hook Java方法,用的比较多的就是Xposed,本篇就介绍下Xposed的配置,使用,原理。
一只小虾米
2022/10/25
2.9K0
Xposed 配置,使用以及原理介绍
xposed模块开发流程
xposed是什么: 必须部署在ROOT后的安卓手机上,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对zygote进程及其创建的dalvik虚拟机的劫持。
bosh123
2021/01/07
3.5K0
推荐阅读
相关推荐
Android APK脱壳--腾讯乐固、360加固一键脱壳
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验