吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6844|回复: 14
收起左侧

[Android 原创] QTrace动态逆向分析Android程序

[复制链接]
QTrace2019 发表于 2019-12-11 08:44
本帖最后由 QTrace2019 于 2019-12-13 22:35 编辑

QTrace动态逆向分析Android程序

一、QTrace概述   
   QTrace是Android软件动态分析工具,它就像一个X光扫描仪,实时打印一个类中所有函数的执行情况(比如函数堆栈,相关变量等), 同时还可以用UML序列图的方式展示程序的执行情况。
   所以可以借助QTrace来分析混淆的程序,  可以在混淆代码中快速的定位到相关的代码, 并理清代码的运行。
   QTrace官网:http://www.qtrace.topQTrace
   下载地址:https://pan.baidu.com/s/1kkPZgRWepe_FIEWNAsO8sw
(注:要动态分析程序,首先要保证程序可以Debug的, 或者需要root手机。如何将程序重新打包成可debug的或者root手机,网络上相关文档一大把,自己baidu一下, 这里不再赘述)


二、如何逆向分析
     逆向分析时,最麻烦的事情当然是程序被混淆了。一则包名被混淆了,所以无法知道该看那个类。 二则每个类的代码被混淆了,根本无法知道执行了那个函数。
      下图为一个混淆后的程序,如果要分析一个功能,从类名根本无法判断该从那个文件开始分析。
   
    本文将演示QTrace如何解决这两个问题.


三、类文件的定位

1.定位当前Activity
    这个执行adb dumpsys就可以得到了。
    打开QTrace, 打开Terminal面板。点击Current Activity图标:


2.根据类加载信息定位使用到的类
       定位到Activity往往还是不够的,毕竟Activity类文件只占了类文件的一小部分。分析一个功能,还需要看下它使用到了那些类。
       由于Android与Java一样,对于一个要使用的类,都是需要使用时才加载的,所以可以根据加载的类,来分析一个功能执行时大概会调用那些相关的类。
       查看类加载信息具体操作如下:
1.打开QTrace,  同时保证电脑ADB连接上手机
2.执行运行->调试进程,选择要调试的程序

3.打开控制台面板, 在该面板上可以看到类加载信息下图就是执行了一个处理后,类的加载信息, 分析该功能,可以从如下类入手。

  注意:
1.类加载后,下次就不会加载了。第一次执行某个功能会提示类加载信息,第二次执行往往就不会提供类加载信息了。
2.之前执行别的功能,已经加载了某类,及时该功能需要这个类,也不会提示类加载信息。     
    虽然,分析类加载有诸多限制,但是打印类加载信息成本很低的,所以还是一个非常有效的方法。

3.跟踪类实例化(跟踪new一个类)
       分析一个功能使用到了那些类,还有更精确的方法: 跟踪类的初始化。比如一个功能, 会使用到某些类, 同时会new来构造这些类实例。 如果能监视类的初始化,就能看到这个功能使用到了那些类。   该方案说起来简单,做起来缺不容易,如果用Android Studio, 则需要一个个打开类文件,然后在类的构造函数上打断点。
       解决QTrace则可以一步到位设置断点。 具体方法如下:
1.打开QTrace,  同时保证电脑ADB连接上手机
2.执行运行->调试进程,选择要调试的程序
3.打开左侧''设备''面板.
    该面板列出了当前程序所有已经加载的类。​   
    比如这个例子中,要监视a.开头的类,选择目录a, 执行右键菜单'实例初始化断点', 完成断点设置。


4.断点的结果也还是在控制台查看

     QTrace可以批量的设置类的断点,不用一个个的设置。并且该方法开销不大,在一般性能的手机上测试,都不会出现手机卡顿。

四、函数的定位
     上一节讨论了定位使用到的类的方法。这一节会进一步的讨论,如何定位使用到的函数。比如点击一个Button, 到底执行那些函数呢。在上面的'跟踪类实例化'例子中,我们分析到了这个功能,调用的类都是在a.a.a.b包下。 我们接着分析这个功能时,那些函数会被执行。
    具体方法如下:
1.监视函数运行
     打开QTrace,  同时保证电脑ADB连接上手机2.执行运行->调试进程,选择要调试的程序3.打开左侧''设备''面板.   选择a.a.a.a目录,执行右键菜单'类断点'

      结果还是在控制台面板中。

      注意: 该方法会有较大的开销,需要性能较好的手机进行测试,不要一下监视太多的类,同时注意在''断点'','序列图跟踪'页面中去掉不需要的断点设置。

2.监视函数堆栈
    上面例子中,打印的信息只包含执行了什么函数,以及执行该函数时的变量信息。在很多时候,还需要知道该函数是谁调用的,也就是需要查看函数栈信息。要打印堆栈信息,在设置断点时,修改脚本就可以了。
     打开断点面板, 删除已有的断点设置.
       打开左侧''设备''面板.   选择a.a.a.a目录, 重新设置类断点。   设置脚本内容为<trace>

      打印的结果如下



五、UML 序列图
     如上分析函数的方法,都是一个个函数分析的。QTrace还提供了UML序列图的方式展示了函数之间的调用关系,可以更直观,更快速的分析程序执行的脉络。
     具体方法如下:
1.打开QTrace,  同时保证电脑ADB连接上手机
2.执行运行->调试进程,选择要调试的程序
3.打开左侧''设备''面板.   选择a目录,执行右键菜单'序列图跟踪'

4.UML序列图显示如下

从UML序列图就可以很直观的看到程序是如何执行的。

六、程序的调试
对于分析程序执行,单步执行等这些基本的Debug方法也是必须的。反编译程序后,用Eclipse,Android Studio都可以进行Debug。QTrace也提供了相同的功能,这里说明下QTrace如何调试程序。
1.反编译程序
    QTrace支持反编译APK, jar。 打开左侧'源码'面板,将apk文件拖到'源码'面板, 然后添加路径到源码。
    QTrace会自动完成APK的反编译,反编译后的源码可以用于调试。
    也可以采用别的反编译工具进行反编译得到源码,然后将源码路径添加到项目。
2.调试
     如果反编译后的代码行信息对的,那么可以打开对应的源码文件,然后在对应的代码行上打断点(按F9)。
     如果反编译后的代码行信息不对,那么可以采用函数断点。选择函数声明,按F9打断点。保证类型为函数,同时保证选择了'断住', '生效'选项。

    QTrace的调试方法与AndroidStudio,Eclipse是一样的,可以逐行调试,可以查看变量。

免费评分

参与人数 7威望 +2 吾爱币 +18 热心值 +7 收起 理由
qtfreet00 + 2 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zycode + 1 + 1 谢谢@Thanks!
抄经大弟子 + 1 + 1 热心回复!
lishixin23 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
忘了世界的人 + 1 + 1 谢谢@Thanks!
风绕柳絮轻敲雪 + 1 + 1 我很赞同!
等时光灬 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| QTrace2019 发表于 2019-12-13 08:12
zycode 发表于 2019-12-13 00:17
从作者发布以来每个版本都尝试过了。每个都报错。没一个能正常跑的。可能是我环境问题。但是换了各种物 ...

物理机安卓版本最新的是多少?
报错可以发给作者, 邮箱jeff_chau@163.com
zycode 发表于 2019-12-13 00:17
从作者发布以来每个版本都尝试过了。每个都报错。没一个能正常跑的。可能是我环境问题。但是换了各种物理机安卓版本都没成功过。连接完物理机后就报错了。不知道谁成功使用过没
Rolanju 发表于 2019-12-11 16:34
hmlhao 发表于 2019-12-11 18:31
感谢楼主分享。。。。。
头像被屏蔽
lishixin23 发表于 2019-12-11 20:34
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| QTrace2019 发表于 2019-12-12 08:21
Rolanju 发表于 2019-12-11 16:34
使用模拟器也可以调试吗?

模拟器也可以的,不过模拟器速度会慢些。
L剑仙 发表于 2019-12-12 10:45
这个功能强大啊
mrlovable 发表于 2019-12-12 12:01
这个怎么调试模拟器
 楼主| QTrace2019 发表于 2019-12-12 16:56
mrlovable 发表于 2019-12-12 12:01
这个怎么调试模拟器

如果adb shell能连接上模拟器,那么可以直接调试

如果不行,尝试DDMS选择要调试的进程,然后再QTrace中,选择远程进行调试。
waqqt 发表于 2019-12-12 18:01
貌似是个好东西,回头研究下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 11:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表