• 哈萨克斯坦今年计划启动1吉瓦可再生能源项目 2019-06-16
  • 有理讲理,不要诬蔑。 2019-06-16
  • 新鲜出炉 三款高颜值个性SUV你准备好了么? 2019-06-15
  • 张育林代表推进泰兴经济社会发展高质量上台阶 2019-06-08
  • 光明日报副总编辑李春林 2019-06-07
  • 紫光阁中共中央国家机关工作委员会 2019-06-06
  • 国务院部署实施蓝天保卫战三年计划 2019-06-06
  • 最高法发布互联网公开审判流程信息规定 9月1日起施行 2019-06-02
  • 一周新疆新闻图片扫描(6.2——6.8) 2019-06-02
  • 海底捞回应侵犯音乐人林海著作权:已停止播放 2019-05-25
  • 十三届全国人大一次会议在北京闭幕 2019-05-19
  • 清明美食之青团:从祭祖供品到时令小吃 2019-05-19
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-15
  • 非洲大叔都中暑了,高温津贴更应阶梯化 2019-05-15
  • 海南省委常委张韵声任宁夏回族自治区党委政法委书记 2019-05-08
  • 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|新疆喜乐彩开奖介绍 www.sl-36.com

     找回密码
     注册[Register]

    QQ登录

    只需一步,快速开始

    搜索
    查看: 2529|回复: 36
    上一主题 下一主题

    新疆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.
    >>>看了一下,符合啊。



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

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

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

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

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

    GMT+8, 2019-6-17 02:40

    Powered by Discuz!

    © 2001-2017 Comsenz Inc.

    快速回复 新疆喜乐彩开奖介绍 返回列表
  • 哈萨克斯坦今年计划启动1吉瓦可再生能源项目 2019-06-16
  • 有理讲理,不要诬蔑。 2019-06-16
  • 新鲜出炉 三款高颜值个性SUV你准备好了么? 2019-06-15
  • 张育林代表推进泰兴经济社会发展高质量上台阶 2019-06-08
  • 光明日报副总编辑李春林 2019-06-07
  • 紫光阁中共中央国家机关工作委员会 2019-06-06
  • 国务院部署实施蓝天保卫战三年计划 2019-06-06
  • 最高法发布互联网公开审判流程信息规定 9月1日起施行 2019-06-02
  • 一周新疆新闻图片扫描(6.2——6.8) 2019-06-02
  • 海底捞回应侵犯音乐人林海著作权:已停止播放 2019-05-25
  • 十三届全国人大一次会议在北京闭幕 2019-05-19
  • 清明美食之青团:从祭祖供品到时令小吃 2019-05-19
  • 新华时评:美逆潮流而动,必将付出代价 2019-05-15
  • 非洲大叔都中暑了,高温津贴更应阶梯化 2019-05-15
  • 海南省委常委张韵声任宁夏回族自治区党委政法委书记 2019-05-08