`
shuai1234
  • 浏览: 972146 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

梆梆加固破解

 
阅读更多

本文假设你已经使用过梆梆加固,手头至少有个一个通过梆梆加固后的apk,并且要求您对xposed框架有一定的了解,以下的所有hook方法都是通过xposed来实现的。

     BTW:本人实现了一个hook动态库的功能,无需root就能hook住动态库的对外接口,后面会写文章介绍方法

梆梆加固的原理,这里就不仔细描述了,可以将加固后的apk反编译后分析一下,看看梆梆在里面都加了什么内容,我总结一下梆梆加固做了哪些事情:

1、创建.cache目录,/data/data/packageName/.cache/"

2、自定义DexClassLoader:

      dexPath: /data/data/packagename/.cache/classes.jar

      optimizedDirectory: /data/data/packagename/.cache

      libraryPath: /data/data/packagename/lib

3、通过自定义dexclassloader的方式,可以将真正的dex进行隐藏,在运行时动态load该dex,

4、 由于dex在安装时会被转换为odex存放在/data/dalvik-cache目录下,梆梆加固后的app在该目录下的odex文件非真正运行的odex文件。

  小结:万变不离其宗,不管梆梆加固怎么伪装,原理上都是通过自定义DexClassLoader来实现的,这也是破解梆梆加固的根本。

  BTW:梆梆加固为了防破解还是做了很多工作的,比如笔者之前试着通过用gdb来挂进程,并通过dump内存的方式来破解,但是一挂上进程后,程序就异常终止了。

破解办法:由于梆梆加固将真实的dex进行了隐藏,所以咱们现在要做的就是想办法把真实的dex给挖出来,通过静态的文件分析没什么好办法,但是有一点可能是所有的加固软件都没办法解决的问题,就是在程序运行时,需要把dex文件加载到内存里来。这是我们破解的入口,以下内容也是围绕着这个目标来展开的。

1、 要获取dex文件的信息,必须获得系统的ClassLoaer ,每个apk运行起来后都有一个对应的数据结构:如下:

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public final class LoadedApk {  
  2.   
  3.     private static final String TAG = "LoadedApk";  
  4.   
  5.     private final ActivityThread mActivityThread;  
  6.     private final ApplicationInfo mApplicationInfo;  
  7.     final String mPackageName;  
  8.     private final String mAppDir;  
  9.     private final String mResDir;  
  10.     private final String[] mSharedLibraries;  
  11.     private final String mDataDir;  
  12.     private final String mLibDir;  
  13.     private final File mDataDirFile;  
  14.     private final ClassLoader mBaseClassLoader;  
  15.     private final boolean mSecurityViolation;  
  16.     private final boolean mIncludeCode;  
  17.     private final DisplayAdjustments mDisplayAdjustments = new DisplayAdjustments();  
  18.     Resources mResources;  
  19.     private ClassLoader mClassLoader;  
  20.     private Application mApplication;  
  21.   
  22.     private final ArrayMap<Context, ArrayMap<BroadcastReceiver, ReceiverDispatcher>> mReceivers  
  23.         = new ArrayMap<Context, ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher>>();  
  24.     private final ArrayMap<Context, ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher>> mUnregisteredReceivers  
  25.         = new ArrayMap<Context, ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher>>();  
  26.     private final ArrayMap<Context, ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>> mServices  
  27.         = new ArrayMap<Context, ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>>();  
  28.     private final ArrayMap<Context, ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>> mUnboundServices  
  29.         = new ArrayMap<Context, ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>>();  
  30.   
  31.     int mClientCount = 0;  

          如果能拿到这个数据结构,就能拿到对应的ClassLoader信息,还能拿到所有的services、receivers信息。这个可以通过hook类

Android.app.ActivityThread.AppBindData中的handleBindApplication方法来实现。

2、拿到ClassLoader后,就能拿到dex文件路径、library路径、odex文件路径,dexPath对应的类为dalvik.system.DexPathList,包含一个成员变量Element数组用来存放所有的odex文件,Element数据结构如下:

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. static class Element {  
  2.         private final File file;  
  3.         private final boolean isDirectory;  
  4.         private final File zip;  
  5.         private final DexFile dexFile;  
  6.   
  7.         private ZipFile zipFile;  
  8.         private boolean initialized;  

        其中DexFile就是odex文件的描述,而在该类中有个变量mCookie,如下图:

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public final class DexFile {  
  2.     private int mCookie;  
  3.     private final String mFileName;  
  4.     private final CloseGuard guard = CloseGuard.get();  

 

这个就是咱们要找的东西啦,这个整形变量存储的是native层的指针值,指向的是dex在内存里的地址,也就是咱们的最终目标,mCookie指向的结构体如下图。

 

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. typedef struct DexOrJar {  
  2.     char*          fileName;  
  3.     bool           isDex; //是dex文件还是jar包  
  4.     bool           okayToFree;  
  5.     RawDexFile*    pRawDexFile;  
  6.     JarFile*       pJarFile;  //如果是jar包,则指向JarFile结构  
  7.     u1* pDexMemory; //如果是dex,则指向dex内存区  
  8. } DexOrJar;  

         思考:如何建立dexPath和DexOrJar结构体之间的映射关系呢?方法是:hook住dalvik.system.DexFile 中的openDexFileNative方法。在应用程序启动时,都会load dex文件,最终都会调用该方法,openDexFileNative方法为native方法,实现定义在dalvik_system_DexFile.cpp文件中的Dalvik_dalvik_system_DexFile_openDexFileNative方法中)然后根据dexpath取出DexOrJar对象指针,有了这个对象拿出odex只是时间的问题了。

   从上述结构体中可以看出,根据扩展名是dex还是jar来决定内存的组织。有了指针我们就可以将其强转换为DexOrJar对象,其实到此处就已经拿到了odex文件对应的内存内容,下一步需要将该内容导出为smali,然后做dexodex to smali,最终得到smali文件后通过baksmali,就可以还原为dex文件。得到dex文件后,通过dex2jar可以转为Java文件,如下图为用梆梆加固后的陌陌解密后导出的dex文件反编译后内容:


 

  

在得到了dex和工程资源文件后,就可以将程序跑起来,还可以在外面加一层壳后跑起来,后面会写一篇文章详细描述这个过程。

分享到:
评论

相关推荐

    梆梆加固方案分析和破解--论梆梆安全加固的不可靠.doc

    "梆梆加固方案分析和破解--论梆梆安全加固的不可靠" 梆梆加固方案分析和破解是一篇关于Android应用程序加固方案的分析和破解文章。通过对梆梆加固方案的技术分析和破解,文章揭示了梆梆加固方案的保护策略和实现...

    MAC版梆梆加固助手

    MAC版梆梆加固助手是梆梆安全应用加固系统的 PC 端加固辅助工具,可以帮助客户实现“一 键加固 -&gt; 自动下载 -&gt; 自动打渠道包 -&gt; 自动签名 -&gt; 自动导出”的一站式加固服务体 验,是客户执行应用加固操作的必备助手。

    梆梆企业版加固防篡改相关文件

    这篇文章可能涵盖了如何集成梆梆加固服务到Android项目中,以及如何进行配置和测试加固效果等内容。由于我们无法直接查看该文章,以下将基于梆梆加固的一般特性进行说明: 1. **动态加载技术**:梆梆企业版通常采用...

    Andorid APK反逆向解决方案:梆梆加固原理探寻-CSDN.

    Andorid APK反逆向解决方案:梆梆加固原理探寻-CSDN

    梆梆加固方案分析和破解__论梆梆安全加固的不可靠.doc

    梆梆加固方案分析和破解__论梆梆安全加固的不可靠.doc

    脱壳练习(2)-最新免费版梆梆加固脱壳笔记-附件资源

    脱壳练习(2)-最新免费版梆梆加固脱壳笔记-附件资源

    梆梆企业版加固防dump相关文件

    梆梆企业版是一款知名的移动应用安全加固平台,其主要功能是增强应用程序的安全性,防止恶意攻击和逆向工程。在给定的压缩包文件中,包含的“libDexHelper.so”是一个动态链接库文件,它在Android系统中起到关键作用...

    360、爱加密、梆梆去壳辅助工具

    DroidSword快速锁定具体的方法类名、FDex2_1.1去壳获取dex、GDA3.62查看去壳后的源代码

    360加固宝 64位

    360加固保为开发者提供加固基础服务和可选增强服务,开发者根据使用需求选择增强服务,勾选后,再选择您上传的apk签名为正式签名还是测试签名,完成后,点击“开始加固”按钮进行加固。

    xposed hook框架的使用(二)

    androidHook,xposed,Android逆向androidHook,xposed,Android逆向

    项目资源-移动安全加固

    研发团队在移动安全领域有着多年的研究和经验,有成熟的企业级产品。项目实现了Android应用的安全加固功能,包括SDK和加固工具。实现的功能请见《移动安全...同类产品请参考:爱加密、梆梆加固、聚安全、360加固宝。

    Adroid 防破解 防反编译 加壳 安全加固 源码

    加固工具如腾讯乐固、360安全加固、梆梆安全等提供了一站式解决方案,它们能帮助开发者全面提高应用的安全性。 5. **Dome源码**:Dome可能指的是防御外壳,一种用于增强应用安全性的技术。它通常包含运行时的防护...

    ApkInfo APK信息查看神器

    查壳功能,支持获取爱加密,360加固,梆梆加固,阿里云加固,腾讯乐固,百度加固,娜迦加固,顶象加固,通付盾,网秦,几维加固等壳信息 支持提取高清图标 支持提取APK对应的权限,并且给出权限注释 支持提取签名...

    梆梆程序管理 apk

    梆梆程序管理_0.8_wap世纪-4梆梆程序管理_0.8_wap世纪-4梆梆程序管理_0.8_wap世纪-4

    android 安卓应用 防二次打包 防重签名 防篡改 安全加固

    技术实现上,类似360加固宝、梆梆加固、爱加密、阿里聚安全类似。实现了: - 签名运行时校验 - 资源文件运行时校验 - dex资源运行时校验 - 其他资源运行时校验 保护个人移动应用或企业数据的安全性。如有源码需要,...

    APK Messenger APK信息查看工具

    查壳功能,支持获取爱加密,360加固,梆梆加固,阿里云加固,腾讯乐固,百度加固,娜迦加固,顶象加固,通付盾,网秦,几维加固等壳信息 支持提取高清图标 支持提取APK对应的权限,并且给出权限注释 支持提取...

    so加固(包括section加密&&so的函数加密).zip

    在实际操作中,可以使用现有的加固工具,如梆梆加固、360加固宝等,它们提供了自动化处理流程,简化了加固步骤。同时,开发者也需要定期更新加固策略,以应对不断演进的攻击手段。 综上所述,so加固是Android应用...

Global site tag (gtag.js) - Google Analytics