吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11670|回复: 28
收起左侧

[CTF] 使用Frida制造自动化脚本爆破Windows平台的CTF

  [复制链接]
kalikai 发表于 2020-4-23 13:41
本帖最后由 kalikai 于 2020-4-23 22:30 编辑

1 前言
        谈到FrIDA,大部分人的反应都是使用Frida hook Android应用。 但是实际上,Frida提供了丰富的API接口支持多平台,如Windows、MAC、Linux、IOS、Android。相信熟悉PC补丁的朋友,都应该有用过Baymax。Baymax是一个很棒的工具,支持动态修改目标模块的指令和数据 ,实现对目标进程的动态补丁。但我们也可以发现,使用Baymax可以实现单点补丁破解很方便,但却无法实现自由度更高的自动化补丁脚本。而Frida使用Python+JavaScript这种调用形式,提供RPC远程调用和内存读写能力,意味着我们拥有更自由、更灵活的方式,编写自动化补丁和操控脚本,来实现对程序自动化操控。
1.jpg

2 CTF实验      
        我们通过使用一个CTF例子,来说明如何使用Frida自动化脚本进行爆破。
一个Windows平台的CTF.exe,需要输入6位数密码,获取Flag值

2.jpg

提示字符串是"Try again!"。拖入IDA,搜索字符串。
3.jpg
4.jpg
5.jpg
6.jpg

通过动静态分析,基本确定,点击确定后,“确认”按钮执行的函数地址为:0x0040173A
编写模拟点击确定函数,使用Frida提供的JS API: NativeFunction.
通过官方解释,我们可以得知。NtiveFunction第一个参数为指内存函数地址,第二个参数为返回值,第三个为入参类型。
7.jpg

通过Frida提供的RPC远程调用机制,我们可以不断的远程调用代码。
备注:Frida的Python API接口是一种底层接口的封装,API功能也是相当的有限。建议大家看下frida/core.py和frida/tracer.py学习下Frida底层的API接口和底层实现机制。 8.jpg


以下为模拟点击确定函数 代码调用代码。

[JavaScript] 纯文本查看 复制代码
import frida
import sys
def on_message(message, data):
    print("[%s] => %s" % (message, data))

session = frida.attach('CTF.exe')
script = session.create_script('''
    var enter=new NativeFunction(ptr('0x0040173a'), 'void',[]);
    rpc.exports={
        once:function(){
            enter();
        }
    }
''')
script.on('message', on_message)
script.load()
while (1):
    script.exports.once()
sys.stdin.read()session.deatch()



然后在输入框中,使用自动化脚本不断模拟输入框输入。如果需要模拟输入,那么就需要hook获取输入框相关函数。

在输入框输入“720000”,动静结合
17.jpg


可以看到,在0x414090这个地址,返回了输入数值。
9.jpg
IDA大致浏览了sub_414090()一下代码,应该是系统函数类似getText()之类的,从输入框获取文本函数。此处不做深究。
10.jpg
11.jpg
于是,浏览 调用sub_414090()函数的被调用处,hook的函数函数 sub_401ce7() 就可以确定了。
12.jpg
现在准备完毕。可以开始进行编写自动化脚本进行爆破了。

[Python] 纯文本查看 复制代码
import frida
import sys


def on_message(message, data):
    print("[%s] => %s" % (message, data))

session = frida.attach('CTF.exe')
script = session.create_script('''

    var number = 720000;
    var needAdd = true;
     
    var enter=new NativeFunction(ptr('0x0040173a'), 'void',[]);
    rpc.exports={
        once:function(){
            enter();
        }
    };
    var input = ptr('0x00401CE7');//函数入口
    Interceptor.attach(input,{
        onLeave:function(result)//hook返回值
        {
            Memory.writeAnsiString(ptr(result.toInt32()),number.toString())
            if(needAdd){
                number=number+1;
                needAdd=false;
            }
            else{
                needAdd=true;
            }

        }
    });

''')
script.on('message', on_message)
script.load()
while (1):
    script.exports.once()
sys.stdin.read()
session.deatch()



突然发现,还是不能自动化爆破。因为在hook时,会不断弹窗,需要手动点击。
13.jpg


再从源码中,把失败弹窗的代码nop掉。修补补丁保存新的exe文件。
14.jpg
15.jpg

使用自动化脚本爆破跑起来。自动爆破中。
16.jpg

过了几分钟,FLAG值就爆破出来了。
end.jpg

3 总结

使用Frida制造自动化脚本,可以更加灵活应用于破解、逆向、CTF等方面。

例如在某些特别复杂的场景中,算法是魔改的,密钥是分存的,有时可能还混个淆加个固,需要花费大量的时间进行分析。但是通过Frida这种工具,我们可以做到在不知道复杂算法的情况下,自动化的调用他们的加解密接口。例如神器Brida,这样就可以根据你的需求修改程序代码的逻辑和数据流。而不用去逆向整个代码或算法,从而节省人员的精力。


CTF.rar

252.09 KB, 下载次数: 70, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 7威望 +1 吾爱币 +25 热心值 +7 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
iYoloPPD + 1 用心讨论,共获提升!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
暗夜杀神 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
謌丶无心留恋 + 1 + 1 我很赞同!
TLHorse + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
漁滒 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

小朋友呢 发表于 2020-9-14 14:40
大神我直接复制的代码执行后出现这个
[{'type': 'error', 'description': 'Error: access violation accessing 0x0', 'stack': 'Error: access violation accessing 0x0\n   
at frida/runtime/core.js:387\n    at /script1.js:26', 'fileName': 'frida/runtime/core.js', 'lineNumber': 387, 'columnNumber': 1}] => None
LQMIKU 发表于 2020-6-28 18:39
楼主,看了你之前的010editor注册机,提示缺少一些dll的情况。这个应该是visual studio编译成exe的时候选debug模式造成的,换成release模式应该可以解决。一点小建议,不过不换也问题不大。(ps: 本来想在留言板说的,奈何我的用户组权限太低 )
mmattic 发表于 2020-4-23 14:47
Dyingchen 发表于 2020-4-23 15:16
不知道和angr比起来两个哪个更好,估计还是符号执行好一些,这种自动攻防技术尚不成熟,期待以后的发展吧
謌丶无心留恋 发表于 2020-4-23 15:16
学习了,谢谢分享
moluo 发表于 2020-4-23 17:15
感谢分享,学习。
nws0507 发表于 2020-4-23 18:27
长见识了,只用过frida在安卓

斩风 发表于 2020-4-23 19:02
学习了,感谢分享
大白痴先生 发表于 2020-4-23 19:53
楼主你好啊,能不能再仔细说一下,怎么样就知道:
“确认”按钮执行的函数地址为:0x0040173A。
shanxiqq 发表于 2020-4-23 21:07
大白痴先生 发表于 2020-4-23 19:53
楼主你好啊,能不能再仔细说一下,怎么样就知道:

我估计你就没看代码吧!图中那么大个箭头你看不见啊?自己看看。
lynxtang 发表于 2020-4-23 22:12
谢谢分享,正在学frida
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 22:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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