码迷,mamicode.com
首页 > 其他好文 > 详细

梆梆加固破解

时间:2014-09-28 19:52:46      阅读:394      评论:0      收藏:0      [点我收藏+]

标签:破解   梆梆   dalvik   


  本文假设你已经使用过梆梆加固,手头至少有个一个通过梆梆加固后的apk

梆梆加固的原理,这里就不仔细描述了,可以将加固后的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内存的方式来破解,但是一挂上进程后,程序就

  退出了。


1、hook住dalvik.system.DexFile 中的openDexFileNative方法,用以建立dexpath与DexFileInfo的键值对(存储cookie,即DexOrJar对象的指针)

     (openDexFileNative方法为native方法,实现定义在dalvik_system_DexFile.cpp文件中的Dalvik_dalvik_system_DexFile_openDexFileNative方法中)

2、根据dexpath取出DexOrJar对象指针,有了这个对象拿出odex只是时间的问题了,看一下数据结构定义:

typedef struct DexOrJar {
    char*          fileName;
    bool           isDex;
    bool           okayToFree;
    RawDexFile*    pRawDexFile;
    JarFile*       pJarFile;
    u1* pDexMemory;
} DexOrJar;
       

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

bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣

  其实得到了dex和工程资源文件后,下一步我可以自定义一个外壳把陌陌跑起来,下一篇文章准备写这个内容。


      

梆梆加固破解

标签:破解   梆梆   dalvik   

原文地址:http://blog.csdn.net/jiang_lostcode/article/details/39500197

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!