Androguard的使用方法

Androguard 中提供的每个工具都是一个独立的py文件,我以上一节中的crackme0502.apk 与破解后的 crackme0502_cracked.apk 为例,来讲解它们的使用方法。

androapkinfo.py

androapkinfo.py用来查看apk文件的信息。该工具会输入apk文件的包、资源、权限、组件、方法等信息,输出的内容比较详细,建议使用时将输出信息重定向到文件后再进行查看。使用方法:
./androapkinfo.py -i ./crackme0502.apk

命令执行后输出信息如下。
./androapkinfo.py -i ./crackme0502.apk
crackme0502.apk :
FILES: 
res/layout/activity_main.xml Android's binary XML -51d837ba
res/menu/activity_main.xml Android's binary XML 2471e50a
AndroidManifest.xml Android's binary XML b5b7132
resources.arsc data 2a26ed7f
res/drawable-hdpi/ic_action_search.png PNG image, 48 x 48, 8-bit colormap,
non-interlaced 64275be8
……
MAIN ACTIVITY:  com.droider.crackme0502.MainActivity
ACTIVITIES:  ['com.droider.crackme0502.MainActivity']
SERVICES:  []
RECEIVERS:  []
PROVIDERS:  []
Native code: False
Dynamic code: False
Reflection code: True
……
Lcom/droider/crackme0502/MainActivity; <init> ['ANDROID', 'APP']
Lcom/droider/crackme0502/MainActivity; getAnnotations  ['ANDROID', 'WIDGET']
Lcom/droider/crackme0502/MainActivity; onCreate ['ANDROID', 'WIDGET', 'APP']
Lcom/droider/crackme0502/MainActivity; onCreateOptionsMenu ['ANDROID',
'VIEW']
Lcom/droider/crackme0502/MyApp; <init> ['ANDROID', 'APP']
Lcom/droider/crackme0502/MyApp; onCreate ['ANDROID', 'OS', 'APP']

androaxml.py

androaxml.py用来解密apk包中的AndroidManifest.xml文件。使用方法:
./androaxml.py -i ./crackme0502.apk

输出结果如下。
./androaxml.py -i ./crackme0502.apk
<?xml version="1.0" ?>
<manifest android:versionCode="1" android:versionName="1.0"
package="com.droider.crackme0502"
xmlns:android="http://schemas.android.com/apk/res/android"> 
  <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"> 
 </uses-sdk> 
  <application android:debuggable="true" android:icon="@7F020001" 
  android:label="@7F050000" android:name=".MyApp" android:theme=
  "@7F060000">
  <activity android:label="@7F050003" android:name=".MainActivity">
 
   <intent-filter>
    <action android:name="android.intent.action.MAIN"> 
   
    </action>    
    <category android:name="android.intent.category.LAUNCHER">
     
    </category>    
   </intent-filter>  
  </activity> 
 </application> 
</manifest>

androcsign.py

androcsign.py用于添加apk文件的签名信息到一个数据库文件中。Androguard工具目录下的signatures/dbandroguard文件为收集的恶意软件信息数据库。在开始使用androcsign.py前需要为apk文件编写一个sign文件,这个文件采用json格式保存。下面是笔者编写的crackme0502.apk的sign文件crackme0502.sign 的内容:
[
{
 "SAMPLE":"apks/crackme0502.apk"
},
{
 "BASE":"AndroidOS",
 "NAME":"DroidDream",
 "SIGNATURE":[
  {
   "TYPE":"METHSIM",
   "CN":"Lcom/droider/crackme0502/MainActivity$SNChecker;",
   "MN":"isRegistered",
   "D":"()Z"
  }
 ],
 "BF":"0"
}
]

SAMPLE 指定需要添加信息的apk 文件。BASE指定文件运行的系统,目前固定为AndroidOS。NAME 是该签名的名字。SIGNATURE 为具体的签名规则,其中TYPE用来指定签名的类型,METHSIM表示的是方法的签名,此外还有CLASSSIM 表示为类签名;CN用来指定方法所在的类;MN指定了方法名;D指定了方法的签名信息。BF用来指定签名的检测规则,可以同时满足1条或多条,例如,使用 SIGNATURE 定义了3条签名规则,当软件的代码同时满足规则1或规则2且满足规则3时说明样本符合检测条件,那么BF可定义为“"BF" : "(0 or 1) and 2"”。

在Androguard目录下新建一个apks目录,将crackme0502.apk复制进去,然后将 crackme- 0502.sign文件复制到Androguard的signatures目录下,在终端提示符下执行下面的命令:

./androcsign.py -i signatures/crackme0502.sign -o signatures/dbandroguard

命令执行后crackme0502.apk的信息就存入dbandroguard数据库了,输出信息如图5-11 所示。


 

androdd.py

androdd.py 用来生成apk文件中每个类的方法的调用流程图。使用方法:

./androdd.py -i ./crackme0502.apk -o ./out -d -f PNG

这里需要使用-o选项强制指定一个输入目录,-d指定生成dot图形文件,-f用来指定输出的图片格式,可以是PNG 或JPG 。不过在笔者的 Ubuntu 10.04上,该工具并没有很好的工作。

androdiff.py

androdiff.py用来比较两个apk文件的差异。使用方法如下:
./androdiff.py -i ./crackme0502.apk ./crackme0502_cracked.apk

命令执行后输出结果如下。
./androdiff.py -i ./crackme0502.apk ./crackme0502_cracked.apk
……
 [ ('Lcom/droider/crackme0502/MainActivity$2;', 'onClick',
'(Landroid/view/View;)V') ] 
<-> [ ('Lcom/droider/crackme0502/MainActivity$2;', 'onClick',
'(Landroid/view/View;)V') ]
onClick-BB@0x0 onClick-BB@0x0
Added Elements(1)
  0x32 12 if-nez v2, +15
Deleted Elements(1)
  0x32 12 if-eqz v2, +15
Elements:
   IDENTICAL: 3
   SIMILAR:   1
  NEW:  0
  DELETED: 0
  SKIPPED: 0
NEW METHODS
DELETED METHODS

通过结果可以发现,androdiff分析出了两个apk之间的差异,MainActivity$2类的 onClick()方法中有一行代码不同。

androdump.py

androdump.py 用来dump一个Linux进程的信息。使用方法如下。

./androdump.py –i pid

pid 为一个Linux 进程的ID,该工具使用的时候较少,这里就不做介绍了。

androgexf.py

androgexf.py用来生成APK的GEXF格式的图形文件。该文件可以使用Gephi查看。使用方法:

./androgexf.py -i ./crackme0502.apk -o ./crackme0502.gexf

命令执行完后会在crackme0502.apk目录下生成crackme0502.gexf,gexf 是图形数据文
件,可以使用 Gephi打开,关于 Gephi的详细使用方法将在下一小节介绍。crackme0502.gexf打开后效果如图5-12所示(Windows 版本的Gephi)。


 

androlyze.py

androlyze.py提供了一个交互环境方便分析人员静态分析Android程序,该工具的功能非常强大,而且涉及的内容较多,详细的用法将在5.7.4小节介绍。

andromercury.py

andromercury.py是Mercury工具的框架。 功能上是对Mercury的包装,Mercury需要的Python 版本为2.7,此处不展示该工具,Mercury工具的详细使用方法会在本书的第11 章进行介绍。

androrisk.py

androrisk.py用于评估apk文件中潜在的风险。使用方法如下。

./androrisk.py -m -i ./crackme0502.apk

-m选项表明需要分析apk中的每一个方法,命令执行后效果如图5-13所示。


 

从输出结果来看,crackme0502.apk中没有发现风险,唯独有一项REFLECTION的值为1,表示程序中有使用到Java反射技术。

androsign.py

androsign.py用于检测apk的信息是否存在于特定的数据库中,它的作用与androcsign.py恰好相反。使用方法:

./androsign.py –i apks/crackme0502.apk -b signatures/dbandroguard -c signatures/dbconfig

androsim.py

androsim.py用于计算两个apk文件的相似度,它是唯一一个有Windows移植版的工具,Windows平台上该工具为androsim.exe,使用方法为:

./androsim.py -i ./crackme0502.apk ./crackme0502_cracked.apk

命令执行后输出结果如下。
Elements:
       IDENTICAL:  717
       SIMILAR:  1
       NEW:    0
       DELETED:  0
       SKIPPED:  0
    --> methods: 99.983498% of similarities

可以看到两个程序的相似度为99.983498%。

androxgmml.py

androxgmml.py用来生成apk/jar/class/dex文件的控制流程及功能调用图,输出格式为xgmml 。使用方法如下。

./androxgmml.py -i ./crackme0502.apk -o crackme0502.xgmml

不过很可惜的是,目前不管是在Ubuntu 10.04,还是Ubuntu 12.04上使用该功能,都会运行错误,并输出以下错误提示:

AttributeError: DVMBasicBlock instance has no attribute 'get_ins'

后者笔者发现这是Androguard的一个bug,截止到笔者编写完本章,该bug都还没出解决方案。

apkviewer.py

apkviewer.py用来为apk文件中每一个类生成一个独立的graphml图形文件,使用方法如下。

./apkviewer.py -i ./crackme0502.apk -o output

命令执行完后,可以使用 Gephi打开生成后的graphml文件,不过图形中的每个节点是指令级别的,在查看时效果没有方法级别的gexf文件直观。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Androguard是一个用于分析和反编译Android应用程序的强大工具。以下是使用Androguard的一般步骤: 1. 安装Androguard:首先,你需要安装Androguard库。你可以使用pip命令来安装它: ``` pip install androguard ``` 2. 导入Androguard库:在Python脚本中,导入Androguard库以便使用其中的功能: ``` from androguard.core.bytecodes.apk import APK from androguard.core.bytecodes.dvm import DalvikVMFormat ``` 3. 加载APK文件:使用APK类加载APK文件,以便进行后续分析和操作: ``` apk = APK("path/to/apk/file.apk") ``` 4. 获取应用程序信息:通过APK对象,你可以获取应用程序的各种信息,例如包名、版本号、权限等: ``` package_name = apk.get_package() version_code = apk.get_androidversion_code() permissions = apk.get_permissions() ``` 5. 分析DEX文件:使用DalvikVMFormat类加载DEX文件,以便对应用程序的字节码进行分析: ``` dex = DalvikVMFormat(apk.get_dex()) ``` 6. 分析类和方法:通过DalvikVMFormat对象,你可以获取类和方法的信息,例如类名、方法名、参数等: ``` classes = dex.get_classes() for cls in classes: class_name = cls.get_name() methods = cls.get_methods() for method in methods: method_name = method.get_name() parameters = method.get_descriptor().get_parameters() ``` 7. 其他功能:Androguard还提供了其他一些功能,例如分析资源文件、查找敏感API调用等。你可以根据你的需求进一步探索Androguard的文档和示例。 需要注意的是,Androguard是一个功能强大但复杂的工具,对Android应用程序进行深入分析需要一定的知识和经验。在使用Androguard进行任何操作时,请确保你有合法的使用权限,并遵守相关法律和伦理规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值