飘云阁(PYG官方论坛)

 找回密码
 加入论坛

QQ登录

只需一步,快速开始

扫一扫,访问微社区

123下一页
返回列表
查看: 666|回复: 24
打印 上一主题 下一主题

[macOS] 使用Frida优雅调试010 Editor[补上Python脚本]

    [复制链接]
  • TA的每?#25307;?#24773;
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    跳转到指定楼层
    楼主
    发表于 2019-4-22 11:16:03 | 只看该作者 |只?#21019;?#22270; 回帖奖励 |倒序浏览 |阅读模式
    使用Frida优雅调试010 Editor


    010 Editor(http://www.sweetscape.com/010editor)是?#22771;吧?#26377;的、功能极其强大的十六进制编辑工具,最出色的就是它独特的二进制模板技术,能够方便的分析任何二进制文件格?#20581;?#23427;也是跨?#25945;?#30340;,同时支持Windows、Linux及macOS。
    对010 Editor的分析已经很成熟了,论坛里面的?#22363;?#20063;非常多,C版也写了在线注册机本文的目的是抛砖引玉介绍Frida在破解软件中的应用。我本人工作中使用Frida多年,但是一直没有时间?#28304;?#20570;?#22363;蹋?#36825;么好的工具没得到推广实属遗憾,今天抽空用010 Editor为例来?#27493;?#19968;些优雅的方法。

    1.1 Frida
    Frida是一个跨?#25945;?#30340;轻量级Hook框架,支持所有主流操作系统,它可?#22253;?#21161;逆向人员对指定的进程进行分析。它主要提供了精简的Python接口和功能丰富的js接口,除了使用自身的控制台?#25442;?#20197;外,还可以利用Python将js脚本库注入到目标进程。使用Frida可以获取进程详细信息、拦截和调用指定函数、注入代码、修改?#38382;?#20174;iOS应用程序中dump类和类方法信息等。
    Frida?#21019;?#30721;托管在GitHub:https://github.com/frida/,?#34892;?#36259;的读者可以下载回来阅读。

    1.1.1 安装方法
    对于调试本地应用?#27492;擔?#21482;需要安装主控端即可。可?#22253;?#35013;到Windows、macOS、Linux等,本文仅以macOS端为例?#27493;狻?/font>
    使用sudo权限,利用pip安装或升级frida及frida-tools,如下:
    [JavaScript] 纯文本查看 复制代码
    # 安装
    $ sudo pip install frida
    $ sudo pip install frida-tools
    $ frida --version
    12.4.8
    # 升级
    $ sudo pip install frida --upgrade
    $ sudo pip install frida-tools --upgrade

    1.1.2 基本使用
    使用-h?#38382;?#21487;以列出详细的使用提示,如下:
    [JavaScript] 纯文本查看 复制代码
    $ frida -h
    Usage: frida [options] target
    
    Options:
      --version             show program's version number and exit
      -h, --help            show this help message and exit
      -D ID, --device=ID    connect to device with the given ID
      -U, --usb             connect to USB device
      -R, --remote          connect to remote frida-server
      -H HOST, --host=HOST  connect to remote frida-server on HOST
      -f FILE, --file=FILE  spawn FILE
      -n NAME, --attach-name=NAME
                            attach to NAME
      -p PID, --attach-pid=PID
                            attach to PID
      --debug               enable the Node.js compatible script debugger
      --enable-jit          enable JIT
      -l SCRIPT, --load=SCRIPT
                            load SCRIPT
      -c CODESHARE_URI, --codeshare=CODESHARE_URI
                            load CODESHARE_URI
      -e CODE, --eval=CODE  evaluate CODE
      -q                    quiet mode (no prompt) and quit after -l and -e
      --no-pause            automatically start main thread after startup
      -o LOGFILE, --output=LOGFILE
                            output to log file

    本次我们调试只需要使用“-l”?#38382;?#21152;载脚本,并使用“--no-pause”?#38382;?#20351;得主线程继续跑下去,如下所示:

    [Bash shell] 纯文本查看 复制代码
    $ frida ./010\ Editor -l 010.js --no-pause


    010.js就是我?#20999;?#24314;的js文件,后续只需编辑它。

    1.2 优雅调试
    本次不需要使用LLDB、GDB等调?#20113;鰨?#20840;程由IDA及Frida完成,你需要的仅仅是敲入一点点js。Go、Go、Go!!

    1.2.1 寻找切入点
    先输入注册码,弹出错误提示,如下图:

    用IDA分析主程序,搜索?#22336;?#20018;如下:

    我们?#31243;?#25720;瓜往上可以查看到注册成功的提示:

    sub_1000E9680就是验证函数了,返回0xDB即可注册成功。

    1.2.2 注入脚本
    修改js文件内容如下:
    [JavaScript] 纯文本查看 复制代码
    function get_rva(module, offset) {
        var base_addr = Module.findBaseAddress(module);
        if (base_addr == null)
            base_addr = enum_to_find_module(module);
        console.log(module + ':' + base_addr);
        var target_addr = base_addr.add(offset);
    
        return target_addr;
    }
    
    
    var target_addr = get_rva("010 Editor", 0xE9680);
    console.log("target_addr:" + target_addr);
    Interceptor.attach(ptr(target_addr), {
        onEnter: function(args) {
            console.log("Enter CheckSN()")
        },
        onLeave: function(retval) {
            console.log("return:" + retval.toInt32());
            retval.replace(ptr(0xDB)); // 修改返回值为0xDB
        },
    });


    get_rva()获取内存地址,Interceptor.attach是Frida提供的API,用来?#38405;?#20010;地址实施附加,附加后就可以进行返回值替换等~,只需要处理onEnter(进入函数触发)、onLeave(离开函数触发)两个回调函数即可。这里使用retval.replace(ptr(0xDB))对返回?#21040;?#34892;修改。
    将脚本注入后,发现破解成功了,但是有点遗憾的是显示“0 User License”,如下图所示:

    为了显示得更优雅,我们继续进行分析。

    1.2.3 更改用户数
    查看?#22336;?#20018;的交叉引用,可以确定“qword_1006B4340 + 48”的位?#27599;?#21046;了?#23548;?#29992;户数量,而sub_1000EADA0则决定是否为“Site License”,如下图所示:


    先进入sub_1000EADA0函数看一下逻辑,如下图:


    这里很简单,如果用户数大于999则表示是“Site License”。

    现在来追踪qword_1006B4340,往上查?#21019;?#30721;,发现sub_1000E9680函数再次引用了qword_1006B4340,如下图所示。

    ?#28909;?#26159;这样,那我们在sub_1000E9680里面将“qword_1006B4340+48”修改掉不就好了么?看下一节分解。

    1.2.4 再次注入
    [JavaScript] 纯文本查看 复制代码
    function get_rva(module, offset) {
        var base_addr = Module.findBaseAddress(module);
        if (base_addr == null)
            base_addr = enum_to_find_module(module);
        console.log(module + ':' + base_addr);
        var target_addr = base_addr.add(offset);
    
        return target_addr;
    }
    
    var target_addr = get_rva("010 Editor", 0xE9680);
    console.log("target_addr:" + target_addr);
    Interceptor.attach(ptr(target_addr), {
        onEnter: function(args) {
            Memory.writeInt(args[0].add(48), 10000);
            console.log("Enter CheckSN()")
        },
        onLeave: function(retval) {
            console.log("return:" + retval.toInt32());
            retval.replace(ptr(0xDB));
        },
    });


    加载脚本,效果如下:
    接下来,你就可以编写一个dylib进行注入,持?#27809;?#30772;解它!

    1.4 Python脚本
    应要求,补上Python脚本:
    [Python] 纯文本查看 复制代码
    import codecs
    import frida
    import sys
    
    def on_message(message, data):
        print("[%s] => %s" % (message, data))
    
    def main(pid):
        session = frida.attach(pid)
    
        with codecs.open('./010.js', 'r', 'utf-8') as f:
            source = f.read()
    
        #script = session.create_script('''js脚本''')
        script = session.create_script(source)
        script.on('message', on_message)
        script.load()
        sys.stdin.read()
        session.detach()
    
    if __name__ == '__main__':
        pid = frida.spawn("010 Editor")
        frida.resume(pid)
        main(pid)
    
    1.5 总结
    采用Frida你不需要关心Hook细节,只需要把重点放到分析上,是不是非常爽呢?#24247;?#28982;,Frida对移动端的应用也是相?#26412;?#24425;的,有时间再给大伙分享。Frida优雅调试之门已经开启!!





    点评

    666,我要努力学习  发表于 2019-4-23 09:08

    评分

    参与人数 13威望 +28 飘云币 +28 收起 理由
    AssasinC + 1 + 1 期待移动端更新。
    xdnice + 1 + 1 赞一个,这个帖子很给力!
    小范 + 1 + 1 PYG有你更精彩!
    九层楼 + 1 + 1 ?#34892;?#21457;布原创作品,PYG有你更精彩!
    small-q + 8 + 8 赞一个,这个帖子很给力!
    Master.lu + 1 + 1 ?#34892;?#21457;布原创作品,PYG有你更精彩!
    610100 + 1 + 1 ?#34892;?#21457;布原创作品,PYG有你更精彩!
    yxg888 + 5 + 5 ?#34892;?#21457;布原创作品,PYG有你更精彩!
    风轻云淡 + 1 + 1 ?#34892;?#21457;布原创作品,PYG有你更精彩!
    不破不立 + 1 PYG有你更精彩!

    查看全部评分

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
    收藏收藏14 转播转播 分享分享 分享淘帖 顶1 踩 扫码赞助 微信分享
  • TA的每?#25307;?#24773;
    开心
    3 天前
  • 签到天数: 221 天

    [LV.7]常住?#29992;馡II

    沙发
    发表于 2019-4-22 11:27:21 | 只看该作者
    谢谢飘总分享!
    回复 支持 反对

    使用道具 举报

  • TA的每?#25307;?#24773;
    开心
    2018-7-9 22:48
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    藤椅
    发表于 2019-4-22 11:28:01 | 只看该作者
    飘总威武!过?#25945;?#25105;也写个,分享个frida Python脚本hook Android 的。
    回复 支持 反对

    使用道具 举报

  • TA的每?#25307;?#24773;
    慵懒
    2019-4-11 11:45
  • 签到天数: 103 天

    [LV.6]常住?#29992;馡I

    板凳
    发表于 2019-4-22 11:29:20 | 只看该作者
    前排膜拜飘总
    回复 支持 反对

    使用道具 举报

  • TA的每?#25307;?#24773;
    开心
    2019-3-25 15:21
  • 签到天数: 487 天

    [LV.9]以坛为家II

    报纸
    发表于 2019-4-22 11:31:02 | 只看该作者
    膜拜最近这个一下火起来了 ?#26522;?#20154;开始搞起了 学习了
    回复 支持 反对

    使用道具 举报

  • TA的每?#25307;?#24773;
    开心
    3 天前
  • 签到天数: 221 天

    [LV.7]常住?#29992;馡II

    地板
    发表于 2019-4-22 11:34:14 | 只看该作者
    飘总再搞一个python的,现在python用的比较多

    点评

    Python的模板就那么几句话,官方文档有~~ 我书里面也有写,到时可以有些高级用法  详情 回复 发表于 2019-4-22 11:35
    回复 支持 反对

    使用道具 举报

  • TA的每?#25307;?#24773;
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    7#
     楼主| 发表于 2019-4-22 11:35:36 | 只看该作者
    wangwei628 发表于 2019-4-22 11:34
    飘总再搞一个python的,现在python用的比较多

    Python的模板就那么几句话,官方文档有~~ 我书里面也有写,到时可以有些高级用法
    回复 支持 反对

    使用道具 举报

  • TA的每?#25307;?#24773;
    开心
    2016-6-16 14:07
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    8#
     楼主| 发表于 2019-4-22 12:38:45 | 只看该作者
    应要求,补上Python脚本~~
    回复 支持 反对

    使用道具 举报

  • TA的每?#25307;?#24773;
    开心
    2 分钟前
  • 签到天数: 582 天

    [LV.9]以坛为家II

    9#
    发表于 2019-4-22 14:19:12 | 只看该作者
    跟着飘总学习,飘总出的书名是?
    回复 支持 反对

    使用道具 举报

  • TA的每?#25307;?#24773;
    慵懒
    2019-5-8 22:09
  • 签到天数: 137 天

    [LV.7]常住?#29992;馡II

    10#
    发表于 2019-4-22 14:52:18 | 只看该作者
    坛主出书竟然没有在论坛里大力宣传?这不科学啊@飘云
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入论坛

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表
    时时彩十二次本金多少