代码改变世界

分析Android APK-砸壳-Fdex2

  c#在路上  阅读(2581)  评论(0编辑  收藏  举报

砸壳的工具千千万,但是FDex2 是最有能耐的,我尝试过各种壳,都是秒砸的。特别说明一下,360的壳,oncreated 方法还是空的,但是其他大部分内容还是有的,反正是可以参考一下的。

 

安装环境:

 

1,安卓手机root ,必须root,记住是必须,只支持6.0 或者更低的版本,太高版本也不行。

Root 手机很好找,淘宝买个nexus 手机,然后家里用工具就可以root,为什么不 推荐其他手机,是因为其他手机现在root 特别麻烦,买个旧手机就几百块钱。

2,安装virtual xposed

Xposed 的安装,使用,之前已经讲过了,这里不在赘述。

3,安装Fdex2.

下载地址:链接:https://pan.baidu.com/s/1smxtinr 密码:dk4v

 

 

 

4, 激活FDex2 模块

 

开始砸壳:

安装app 到xposed, 启动FDex2 ,然后配置需要砸壳的app,

 

 

 

再提示的目录,就可以找到脱壳后的dex 文件。

 

 

 

 

Fdex2 的程序代码:

 

package com.ppma.xposed;
 
 java.io.File;
 java.io.FileOutputStream;
 java.io.IOException;
 java.io.OutputStream;
 java.lang.reflect.Method;
 
 de.robv.android.xposed.IXposedHookLoadPackage;
 de.robv.android.xposed.XC_MethodHook;
 de.robv.android.xposed.XSharedPreferences;
 de.robv.android.xposed.XposedBridge;
 de.robv.android.xposed.XposedHelpers;
 de.robv.android.xposed.callbacks.XC_LoadPackage;
 
 
{
 
    XSharedPreferences xsp;
    Class Dex;
    Method Dex_getBytes;
    Method getDex;
    String packagename;
 
 
    
{
        xsp = 
 XSharedPreferences(
, 
);
        xsp.makeWorldReadable();
        xsp.reload();
        initRefect();
        packagename = xsp.getString(
, 
);
        XposedBridge.log(
+packagename);
        
 ((!lpparam.packageName.equals(packagename))||packagename==
) {
            XposedBridge.log(
);
            
;
        }
        XposedBridge.log(
+lpparam.packageName);
        String str = 
;
        String str2 = 
;
 
        XposedHelpers.findAndHookMethod(str, lpparam.classLoader, str2, String.class, Boolean.TYPE, 
 XC_MethodHook() {
            
{
                
.afterHookedMethod(param);
                Class cls = (Class) param.getResult();
                
 (cls == 
) {
                    

                    
;
                }
                String name = cls.getName();
                XposedBridge.log(
 + name);
                
[] bArr = (
[]) Dex_getBytes.invoke(getDex.invoke(cls, 
 Object[
]), 
 Object[
]);
                
 (bArr == 
) {
                    XposedBridge.log(
);
                    
;
                }
                XposedBridge.log(
);
                String dex_path = 
 + packagename + 
 + packagename + 
 + bArr.length + 
;
                XposedBridge.log(dex_path);
                File file = 
 File(dex_path);
                
 (file.exists()) 
;
                writeByte(bArr, file.getAbsolutePath());
            }
            } );
    }
 
    
{
        
 {
            Dex = Class.forName(
);
            Dex_getBytes = Dex.getDeclaredMethod(
, 
 Class[
]);
            getDex = Class.forName(
).getDeclaredMethod(
, 
 Class[
]);
        } 
 (ClassNotFoundException e) {
            e.printStackTrace();
        } 
 (NoSuchMethodException e) {
            e.printStackTrace();
        }
 
    }
 
    
{
        
 {
            OutputStream outputStream = 
 FileOutputStream(str);
            outputStream.write(bArr);
            outputStream.close();
        } 
 (IOException e) {
            e.printStackTrace();
            XposedBridge.log(
);
        }
    }
}

 

努力加载评论中...
点击右上角即可分享
微信分享提示