首页
社区
课程
招聘
[原创]Dexguard分析&钛备份破解
发表于: 2014-12-10 17:57 31241

[原创]Dexguard分析&钛备份破解

2014-12-10 17:57
31241

钛备份,貌似是备份方向很火的一个软件(可能类似于win下的super recovery)。Claud说是加的Dexguard壳,由于本人是初学者,也没见过什么世面,更不懂得Dexguard是个什么东西了,就一股子蛮劲,结果不小心把钛备份干掉了,看来功夫不负有心人啊。以下写出心得和大家分享,互相学习进步。
菜鸟第一次分析,请大牛勿喷,会打击小菜的积极性的!
一、APKtools反编译
可能是Dexguard壳子利用了apktools的bug吧,反正我是没有反编译成功。AndroidManifest.xml里所有不在<intent-filter>与</intent-filter>的元素key值都没有反编译出来。
如图所示:

修复后如下:

但是还是无法打包。用apktools还是打包失败:

既然无法打包,很多方法就行不通了,log的方法也失效了,不过不要紧,反编译失败导致无法正常打包,那就用点原始的方法吧。不管那么多,先分析分析这个程序再说,程序分析透了,至少也算是对自身的一种提高,说干就干。(这个问题现在还没有解决,希望会的大牛告知一下,在下感激不尽。)

二、逆向分析

虽然说打包是没搞定,但主要是因为xml文件apktools分析出错的原因,还好不影响我们亲爱的smali文件的反编译。JEB载入,(这里要感谢SCZ大神的无私奉献,虽然说好像保存功能用不了,但是已经非常感谢了)随便翻了一下,看见一个这个:

我本来准备吐槽作者了,但是往后一翻,我觉得这个也不必怎么大惊小怪。因为对于第一次分析APK,发现如下的东西,我开始有点不淡定了。类名和函数的名称被加密成这样:


不过不管它多么花,也要干掉它!
那就要开始定位关键地方,进行破解了。
2.1.关键定位
我目前知道的一共有2种方法可以成功定位到关键地方。
第一种方法:搜Strings.
如图:
这是一种方法,当然可能搜到的不止一处,这就需要自己去甄别了。
第二种方法:这种方法在我之前的一篇学习笔记里也有讲到,地址:http://bbs.pediy.com/showthread.php?t=195202。里面的第四种方法,所谓的“遗留下的宝藏”。用到了DDMS 如图:

OK,真幸运,直接定位到了fs中。Nice。

2.2log分析
既然发现了验证的类,那就不能放过。发现大部分字符串都被加密过了,我们就从log开始着手吧。找了几个log如下:
发现了解密函数,把它Rename:

解密函数如下:

找到了解密函数,这就好办了,先把strings解密了再说,我写了一个python脚本来解密encryptStrings。Python脚本如下:

#Author Ericky
import sys
import os
import time
from jeb.api import IScript
from jeb.api import EngineOption
from jeb.api.ui import View
from jeb.api.dex import Dex
from jeb.api.ast import Class, Field, Method, Call, Constant, StaticField, NewArray
encbytes = [69, 21, -111, -111, 14, -30, 5, -3, -10, -6, 9, -6, 6, 9, 60, -36, 
                -45, -4, -1, -4, 4, -5, 83, -68, 1, -3, -6, 2, 68, -71, -4, -4, 6, 42, 25, 14, -30, 
                5, -3, -10, -6, 9, -6, 6, 9, 60, -55, -12, -12, 2, 4, 2, -20, 10, -6, 6, 70, -71, -13, 
                2, 1, 76, -68, 1, -3, -6, 2, 68, -71, -4, -4, 6, 68, -15, -1, -1, 14, -30, 5, -3, -10, 
                -6, 9, -6, 6, 9, 60, -51, -20, -15, 2, 0, 0, -6, 13, 68, -74, -11, 82, -79, -2, -6, 
                83, -87, 20, -12, 2, 4, 67, -66, -14, -12, 11, -3, -4, 12, 54, 14, -30, 5, -3, -10, 
                -6, 9, -6, 6, 9, 60, -51, -20, -15, 2, 0, 0, -6, 13, 68, -88, 13, -4, -1, 75, -84, -2, 
                10, -4, -1, 75, -83, 12, -9, 11, -9, -6, 77, -87, 20, -12, 2, 4, 67, -71, -10, -4, 81, 
                14, -30, 5, -3, -10, -6, 9, -6, 6, 9, 60, -51, -20, -15, 2, 0, 0, -6, 13, 68, -74, -11, 
                82, -84, -2, 10, -4, -1, 75, -87, 16, -14, -8, 88, -71, -13, 12, -15, 10, 57, 14, -30, 
                5, -3, -10, -6, 9, -6, 6, 9, 60, -52, -15, -22, 12, -6, 6, 70, -68, 1, -3, -6, 2, 68, 
                -71, -4, -4, 6, 42, 25, 14, -30, 5, -3, -10, -6, 9, -6, 6, 9, 60, -36, -31, -3, -6, 
                2, 68, -87, 20, -12, 2, 4, 36, 30, -30, 28, 14, -30, 5, -3, -10, -6, 9, -6, 6, 9, 60, 
                -51, -20, -15, 2, 0, 0, -6, 13, 68, -88, 13, -4, -1, 75, -67, -4, 68, -83, 12, -2, -13, 
                12, -15, 10, 2, 0, 67, -67, -4, 1, 1, -21, 1, 13, 68, -80, -8, 16, -14, 81, -18, 1, 
                -5, 0, 17, -80, 8, 69, -74, -12, 0, 82, -87, 20, -12, 2, 4, -6, -12, -6, 88, -69, -18, 
                2, 16, -20, 10, -7, 0, 77, -74, -11, 82, -70, -8, 10, -16, -4, 13, 0, 53, 14, -30, 5, 
                -3, -10, -6, 9, -6, 6, 9, 60, -47, -34, 78, -68, 1, -3, -6, 2, 68, -71, -4, -4, 6, 42, 
                25, 14, -30, 5, -3, -10, -6, 9, -6, 6, 9, 60, -37, -34, -8, 6, -16, 10, -6, 6, 70, -79, 
                -2, 0, 64, -74, 20, -12, 2, 4, 67, -68, 1, -3, -6, 2, 68, -71, -4, -4, 6, 42, 25]


class Mydecypt(IScript):

  def run(self, jeb):
    self.jeb = jeb
    self.dex = self.jeb.getDex()
    self.cstbuilder = Constant.Builder(jeb)

    self.csig = 'fs'
    self.encbytes = encbytes
    self.mname_decrypt = None

    r = jeb.decompileClass(self.csig)
    decrypted_string = self.decrypt(66, 26, 0) #Here enter your encrypt strings
    print '  Decrypted string: %s' % repr(decrypted_string)
  def decrypt(self, length, curChar, pos):
    length = 93 - length
    pos = pos * 2 + 91
    curChar = 378 - curChar
    r = ''
    for i in range(length):
      curChar +=1
      r += chr(pos & 0xFF)
      if i >= len(self.encbytes):
        break
      curEncodedChar = self.encbytes[curChar]
      pos = pos - curEncodedChar -1
    return r   

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (14)
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
2
感谢分享分析过程,有时间也按着LZ的思路拆开看看:)
不过看到这个函数名列表还真是眼前一花,哈哈
2014-12-10 20:20
0
雪    币: 370
活跃值: (1180)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
3
多谢楼主分享
2014-12-10 20:48
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
4
嘿嘿 是啊,希望你试试  然后分享下打包的解决方法呢 (*^__^*)
2014-12-10 22:42
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
5
你的ELF 也是很感谢~!
2014-12-10 22:43
0
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
6
AXML的这种混淆原理和恢复方法,版上已经有两个帖子了:
http://bbs.pediy.com/showthread.php?t=194201
http://bbs.pediy.com/showthread.php?t=194206

“遗留下的宝藏”有点舌尖上“自然的馈赠”的感觉,XDD
2014-12-11 02:53
0
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
7
另外,既然你都有了JEB,应该去他们的官方博客看看,JEB有一个脚本可以解密DexGuard的代码加密。就是不知道对最新版的DexGuard是不是还有用,有空你可以再写一篇来介绍,或者自己改改他们的脚本。
2014-12-11 02:54
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
8
很感谢你的回答,文章从你上一次回答我就已拜读过了,要不就不会有修复的xml文件了~还是很谢谢你
至于“遗留下的宝藏”,只能说是一种思路。实际的过程是我进程序看到它会有类似”License cache Not Found“的提示,进而查找”License“字符串进行定位的,才定位到fs类。“遗留下的宝藏”定位的话,确实是一种思路。说不定对于某些特定的程序能起到奇效。但对于这个程序来说,log出来的内容挺多的,其实是很不好找的,用这种方法的需要很大运气成分。
2014-12-11 11:12
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
9
有了JEB  当然会去JEB官网看看,至少也要看一下official的tutorials嘛。官网上的JEB确实是有1个脚本,确切的说是2个,1个是在大家都知道的Download下面的Scripts的下载,还有一个隐藏在它的介绍图片里面(虽然很隐蔽,但是细心点就能发现了)。对最新版的DexGuard已经失效,作者已经修改了一些内容,不过认真把脚本读懂还是可以自己融会贯通的写出来的。对真正看懂脚本的人影响不大,作者的修改也只能阻止一些“死搬硬套”的童鞋啦~谢谢解答~很感谢,起步很晚,所以志同道合的人就更难找到了。
2014-12-11 11:19
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢楼主分享。
2014-12-18 18:55
0
雪    币: 2088
活跃值: (2155)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
关于hidden脚本 不知可否明示
2014-12-20 23:27
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
12
在官网介绍的图片里面有
2014-12-21 13:02
0
雪    币: 144
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
lz最近还在研究这块没?出点文章呗
2015-1-26 12:17
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
14
没什么好文章出。。学习中
2015-1-26 12:54
0
雪    币: 184
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢楼主分享,很精彩,希望能够介绍一下图片中所用的工具,包括搜索字符串文本编辑器等这些,方便童鞋照葫芦画瓢,谢谢
2015-2-15 06:21
0
游客
登录 | 注册 方可回帖
返回
//