• OPPO Find X真全面屏 突破史上最高屏占比 2019-08-14
  • 端午节小长假来临,这两件事与你的节日福利有关 2019-08-11
  • “光棍”曾被看作是无依无归的流氓恶棍文史参考 2019-08-09
  • 吐鲁番哈密瓜飘香疆外 2019-08-09
  • 中考期间广州部分公交线路有调整 2019-08-08
  • 中国国家级自然保护区名录旅行地中国国家地理网 2019-08-08
  • 简逸光:从《佛祖历代通载》看佛教史的建立 2019-08-08
  • 手机流量大战套路:“不限量”都是有条件的 2019-08-08
  • 熊丙奇:不要以高校预算收入多少论“英雄” 2019-08-04
  • 【海北天气】最新海北今天天气,实时提供海北气温、空气质量、24小时天气预报、生活指数查询 2019-08-04
  • 阿兰启程世界杯 清爽简约look现身机场阿兰 世界杯 2019-08-03
  • 变相“现金贷”重出江湖 利率畸高个别超过1000% 2019-08-03
  • 1天400吨 宁波这个餐厨垃圾处理厂月底开始运行 2019-07-30
  • 赌王四太家的豪宅曝光,网友:一点都不羡慕 ——凤凰网房产 2019-07-30
  • 广东摧毁全国首例“呼死你”犯罪团伙 2019-07-29
  • 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|新疆喜乐彩开奖介绍 www.sl-36.com

     找回密码
     注册[Register]

    QQ登录

    只需一步,快速开始

    搜索
    查看: 4555|回复: 35
    上一主题 下一主题

    新疆25选7奖金: [Android 原创] Android逆向小技巧:批量注入日志,打印目标程序执行流程(拿支付宝试试手)

      [复制链接]
    跳转到指定楼层
    楼主
    encoderlee 发表于 2019-5-30 20:35 回帖奖励
    本帖最后由 encoderlee 于 2019-5-30 20:56 编辑

    回顾

    新疆喜乐彩开奖介绍 www.sl-36.com 《Android应用逆向——分析反编译代码之大神器》

    在之前的一篇文章中,我们提到一个思路,使用 apktool 解包目标APK,然后在感兴趣的JAVA包里使用脚本批量注入日志,随后重新打包APK,安装运行后,函数的执行流程就通过logcat打印了出来,目标APP点击某个按钮后执行了哪些函数一目了然。

    回顾一下大致思路:

    public class InjectLog {
        public static void PrintCaller()
        {
            Thread cur_thread = Thread.currentThread();
            StackTraceElement stack[] = cur_thread.getStackTrace();
            Log.d("InjectLog", stack[3].toString() + "[" + cur_thread.getId() + "]");
        }
    }

    我们写了这样一段JAVA代码,用于输出调用者的函数名。
    然后我们又写了一行JAVA代码:

    InjectLog.PrintCaller();

    反编译为smali代码:

    invoke-static {}, Lcom/hook/tools/InjectLog;->PrintCaller()V

    然后把这句smali代码,批量注入到目标APP的smali代码中,让目标APP的每个函数都会调用这行代码,就能实现观测目标APP函数执行流程的效果。

    这个思路行之有效,被转到52pojie论坛中,很多同学使用了都说好。不过之前的文章中我们只是讲了思路,注入脚本也写的很潦草很随意,对于各种异常情况没有做处理,比如有的APK反编译的smali代码,没有.prologue标记,导致注入失败,并且存在重复执行脚本会导致重复注入多行代码的情况。于是这一章,我们完善了一下这个注入脚本,修复这些问题,并放到Github上,大家一起来完善,也可以提 issues 反馈问题,使得这个工具可用性越来越好。同时,本章我们也通过一个小小的案例,来回顾一下这个工具的具体用法。

    完善后的日志注入工具

    项目地址:https://github.com/encoderlee/android_tools

    需要先安装 Python3

    用法示例:
    1.先用 apktool 解包 apk 到目录 f:\alipay_10.1.30\
    2.执行 inject_log.py -c    目标是 apktool 解包出的文件夹根目录

    inject_log.py -c f:\alipay_10.1.30\

    这一步作用其实是把 InjectLog.smali 拷贝到  f:\alipay_10.1.30\smali\com\hook\tools\ 中,InjectLog.smali 就是 InjectLog.PrintCaller()函数的实现,对于每个apk项目,这个步骤只需做一次

    3.注入代码:
    ① 只对一个 smali 文件注入代码

    inject_log.py f:\alipay_10.1.30\smali_classes5\com\alipay\mobile\payee\ui\PayeeQRActivity.smali

    ② 对一个目录下的所有 smali 文件注入代码,不递归子目录

    inject_log.py f:\alipay_10.1.30\smali_classes5\com\alipay\mobile\payee\ui\

    ② 对一个目录及它所有子目录下的所有 smali 文件注入代码,递归子目录

    inject_log.py -r f:\alipay_10.1.30\smali_classes5\com\alipay\mobile\payee\ui\

    小技巧:
    可以把 inject_log.py 放到一个目录中,把这个目录添加到 PATH 环境变量中


    接下来在任意位置,按住【shift】键,点击鼠标右键,就可以在此位置打开CMD窗口
    然后就可以直接对当前目录执行注入脚本工作了:

    inject_log.py -c ./
    inject_log.py -r ./

    重要提示

    先缩小范围,确定关键代码在某几个包中,再小范围批量注入代码,不要一上来就对整个APK全部注入代码,那样运行起来会卡死奔溃的

    注入代码前,最好先用 git 跟踪 apktool 解包出的整个项目文件夹,这样清除注入的日志也方便

    git chekout .

    分析支付宝案例

    《Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP》
    上一篇文章,我们通过 adb 获取了 Activity 名,并通过【Android Device Monitor】获取 resource-id ,找到了关键代码的大致位置。

    在支付宝的收款二维码界面点击【设置金额】后来到了第二个界面,通过 adb 获取到了 Activity 名为:

    com.alipay.mobile.payee.ui.PayeeQRSetMoneyActivity

    于是我们将目光锁定到了 com.alipay.mobile.payee.ui 这个JAVA包,使用日志注入工具对该包下的所有 smali 注入代码。
    在首次注入代码前,我们需要到 apktool 解包出的根目录里执行:

    inject_log.py -c f:\alipay_10.1.30\

    此举作用在于往目标APK中放入一个文件 smali\com\hook\tools\InjectLog.smali 该文件是 InjectLog.PrintCaller() 函数的实现,没有这个文件的话,调用 InjectLog.PrintCaller() 会出错的。

    然后我们找到 com.alipay.mobile.payee.ui 所在的 smali 文件目录:

    f:\alipay_10.1.30\smali_classes5\com\alipay\mobile\payee\ui

    使用日志注入工具注入代码:

    inject_log.py -r f:\alipay_10.1.30\smali_classes5\com\alipay\mobile\payee\ui

    随后用 apktool 重打包并安装运行,在 Android Studio 中打开 logcat ,过滤 tag 为 InjectLog,查看日志输出。

    so easy !
    我们可以看到在 PayeeQRSetMoneyActivity 界面 onClick 点击 确定 按钮后,执行了几个函数,后面到了
    PayeeQRActivity.onActivityResult() 的时候,其实 确定 按钮的功能代码已经执行完了,得到了二维码结果并返回了上一个界面PayeeQRActivity。这样一来,大大的进一步缩小了重点关注的范围,只需要在这几个函数上研究反编译的JAVA代码,很快就能找到关键点。

    果然,很快就找到了关键实现代码:

        ConsultSetAmountReq localConsultSetAmountReq = new ConsultSetAmountReq();
        localConsultSetAmountReq.amount = this.g;
        localConsultSetAmountReq.desc = this.c.getUbbStr();
        localConsultSetAmountReq.sessionId = this.h;
        new RpcRunner(new cs(this), new cr(this)).start(new Object[] { localConsultSetAmountReq });

    构造一个 ConsultSetAmountReq 对象,分别赋值 amount 金额,desc 备注,sessionid,然后放入RpcRunner中向服务器发送请求。接下来,继续深入分析他是怎么发的请求,或者止步于此,直接使用Xposed注入??榈街Ц侗讨?,调用这段代码就能实现相同的效果。

    另外,关于有的APK使用 apktool 解包或打包出错。重新打包后的微信、支付宝等APK,签名验证不通过而无法登陆该怎么办,在后续文章中我们将一起研究一一解决。

    本文由encoderlee发表于CSDN博客: https://blog.csdn.net/CharlesSimonyi/article/details/90691417 转载请注明出处

    免费评分

    参与人数 16威望 +2 吾爱币 +26 热心值 +16 收起 理由
    sunnylds7 + 1 + 1 热心回复!
    a5606495 + 1 + 1 用心讨论,共获提升!
    多幸运遇见baby + 1 + 1 谢谢@Thanks!
    a337100 + 1 + 1 谢谢@Thanks!
    洛城曼巴 + 1 + 1 用心讨论,共获提升!
    Super817 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
    VE5514 + 2 + 1 我很赞同!
    qtfreet00 + 2 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
    time2s + 1 + 1 谢谢@Thanks!
    aiwanqq + 1 热心回复!
    mch1998 + 1 热心回复!
    丶咖啡猫丶 + 1 + 1 谢谢@Thanks!
    drakpj + 1 + 1 谢谢@Thanks!
    qaz003 + 1 + 1 谢谢@Thanks!
    独行风云 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
    k649758044 + 1 + 1 我很赞同!

    查看全部评分

    本帖被以下淘专辑推荐:

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

    推荐
    冥界3大法王 发表于 2019-6-2 08:22
    本帖最后由 冥界3大法王 于 2019-6-2 08:47 编辑

    C:\Users\Administrator.DESKTOP-8JRMERI>J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\2019.5.30最新下载到的注入工具\inject_log.py J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\projects\泰捷视频_4.2.1\Project\smali\com\google\gson\Gson.smali
      File "J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\2019.5.30最新下载到的注入工具\inject_log.py", line 33
    SyntaxError: Non-ASCII character '\xe6' in file J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\2019.5.30最新下载到的 注入工具\inject_log.py on line 33, but no encoding declared; see //python.org/dev/peps/pep-0263/ for details

    C:\Users\Administrator.DESKTOP-8JRMERI>J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\2019.5.30最新下载到的注入工具\inject_log.py J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\projects\泰捷视频_4.2.1\Project\smali\com\google\gson\Gson.smali
    Inject: J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\projects\泰捷视频_4.2.1\Project\smali\com\google\gson\Gson.smali
    Traceback (most recent call last):
      File "J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\2019.5.30最新下载到的注入工具\inject_log.py", line 160, in <module>
        main()
      File "J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\2019.5.30最新下载到的注入工具\inject_log.py", line 143, in main
        inject_log(sys.argv[1])
      File "J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\2019.5.30最新下载到的注入工具\inject_log.py", line 120, in inject_log
        inject_code_to_smali_file(path)
      File "J:\Android_assembly\修改工具\AndroidKiller_v1.3.1\2019.5.30最新下载到的注入工具\inject_log.py", line 73, in inject_code_to_smali_file
        with open(smali_file_path, "r", encoding = "utf-8") as file:
    TypeError: 'encoding' is an invalid keyword argument for this function
    推荐
    冥界3大法王 发表于 2019-6-2 09:15

    @encoderlee

    encoderlee 发表于 2019-6-2 09:02
    你好,需要使用python3,目前未对python2.7做兼容
    @encoderlee
    @C:\Users\Administrator.DESKTOP-8JRMERI>python
    Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>>看了一下,符合啊。



    不知为啥总报错,就差一哆嗦了。楼主帮助。
    4#
    hkdg009 发表于 2019-5-30 20:54
    5#
    liucq 发表于 2019-5-30 21:09
    我也支持一下楼主分享
    6#
    HCJ 发表于 2019-5-30 21:18
    支持楼主!
    7#
    k649758044 发表于 2019-5-30 22:44
    感谢发布原创作品,吾爱破解论坛因你更精彩!
    8#
    冥界3大法王 发表于 2019-5-30 23:16
    @encoderlee
    全是青一色的  名字在日志猫中并不好一眼定位到。
    论坛2魔头给我搞的【名称:编号i+1版】我觉得比较实惠。
    9#
    冥界3大法王 发表于 2019-5-30 23:19
    10#
    莫问刀 发表于 2019-5-30 23:19
    我在2年前,在CSDN中就看到你的博客,不会使用,你还很详细的给我解答怎么使用这个工具。现在大佬来到了吾爱,还继续优化这个项目,真是很用心,这个工具在分析中的确很方便看快捷。支持大佬继续更新
    11#
     楼主| encoderlee 发表于 2019-5-31 00:20 <
    莫问刀 发表于 2019-5-30 23:19
    我在2年前,在CSDN中就看到你的博客,不会使用,你还很详细的给我解答怎么使用这个工具。现在大佬来到了吾 ...

    幸会幸会
    12#
    lyghost 发表于 2019-5-31 06:30
    输出日志的确方便逆向
    您需要登录后才可以回帖 登录 | 注册[Register]

    本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

    快速回复 收藏帖子 返回列表 搜索

    RSS订阅|小黑屋|联系我们|新疆喜乐彩开奖介绍 ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

    GMT+8, 2019-8-23 03:51

    Powered by Discuz!

    © 2001-2017 Comsenz Inc.

    快速回复 新疆喜乐彩开奖介绍 返回列表
  • OPPO Find X真全面屏 突破史上最高屏占比 2019-08-14
  • 端午节小长假来临,这两件事与你的节日福利有关 2019-08-11
  • “光棍”曾被看作是无依无归的流氓恶棍文史参考 2019-08-09
  • 吐鲁番哈密瓜飘香疆外 2019-08-09
  • 中考期间广州部分公交线路有调整 2019-08-08
  • 中国国家级自然保护区名录旅行地中国国家地理网 2019-08-08
  • 简逸光:从《佛祖历代通载》看佛教史的建立 2019-08-08
  • 手机流量大战套路:“不限量”都是有条件的 2019-08-08
  • 熊丙奇:不要以高校预算收入多少论“英雄” 2019-08-04
  • 【海北天气】最新海北今天天气,实时提供海北气温、空气质量、24小时天气预报、生活指数查询 2019-08-04
  • 阿兰启程世界杯 清爽简约look现身机场阿兰 世界杯 2019-08-03
  • 变相“现金贷”重出江湖 利率畸高个别超过1000% 2019-08-03
  • 1天400吨 宁波这个餐厨垃圾处理厂月底开始运行 2019-07-30
  • 赌王四太家的豪宅曝光,网友:一点都不羡慕 ——凤凰网房产 2019-07-30
  • 广东摧毁全国首例“呼死你”犯罪团伙 2019-07-29
  • 彩票店转让 极速飞艇游戏介绍 老挝赌场官网 体彩6+1开奖结果18138 吉林快三出豹子规律 欧洲彩票大奖 海南飞鱼玩法 凤鑫电子游艺厅 公开一码中特 香港赛马会官方网独家 百家乐论坛 彩票模板制作教程 福建体彩11选5遗漏 北京国安吧 快乐8实时开奖号码