首页 > 其他分享 >2023香山杯nesting详解

2023香山杯nesting详解

时间:2023-10-17 13:11:54浏览次数:36  
标签:inscount0 .. max intel64 chr 详解 so nesting 2023

nesting

通过函数分析 ,有一个VM的指令解析器,也看不懂,VM的题看起来特别费劲

在sub_16BC里面找cmp的flag比对指令,0x1E21和0x1EC9。最终发现输入正确的字符和错误的字符,0x1E21处的指令执行次数不一样,可以通过输入fo,fl,fi,其中fl是正确的字符,发现正确的字符在0x1E21处执行的次数更多,因此可以使用这个方法来进行逐字节爆破,但是需要一款工具来统计执行次数,看了别人的WP好像是通过直接patch的方式,让返回值返回执行次数,但没详细写,也看不懂,所以自己找了下,发现一款动态插桩工具可以实现指令执行次数统计,叫pin

安装教程

https://www.intel.com/content/www/us/en/developer/articles/tool/pin-a-dynamic-binary-instrumentation-tool.html
下载完之后解压,然后进入source/tools/ManualExamples,
make obj-intel64/inscount0.so TARGET=intel64,这是计数器的so,
此时在 obj-intel64 下编译生成了 inscount0.so,这个 so 即为一种 pintool,功能为记录程序执行的指令的条数;

判断 pintool 的功能可以阅读 pintool 源代码或者使用下条指令

$ pin -t your_pintool -h -- your_application

类似的,要编译 32 位的 pintool 可以使用

make obj-ia32/inscount0.so
编译 ManualExamples 中的所有 pintool 可以使用

make all TAEGET=intel64 make all TAEGET=ia32

编译完的使用格式是
../../../pin -t obj-intel64/inscount00.so -o inscount0.log -- you_binary

实战

原example是统计的所有指令的执行次数,但是,这个程序的执行次数是变化的,可能来自库函数的指令差异,我们只想统计指定行的执行次数,需要对inscount.cc进行更改,具体如下:

差异如下:

VOID docount() { icount++; }

已更改为:

VOID docount(void *ip) 
{
	if ((long long int)ip == 0x0000555555555E21)
	 icount++; 
}

和:INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)docount, IARG_END);

已更改为:

INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)docount, IARG_INST_PTR, IARG_END);

这里的IARG_INST_PTR的解释,表示传入eip
image

这还有一个小坑,我使用的ubuntu开了ALSR,所以基址一直在变,追踪不到,需要关闭ALSR

点击查看代码
sudo su
echo 0 > /proc/sys/kernel/randomize_va_space

然后就可以编写脚本爆破了,附上我的脚本

from pwn import *
import subprocess
def run(msg):
    cmd = [
    "../../../pin",
    "-t", "obj-intel64/inscount00.so",
    "-o", "inscount0.log",
    "--",
    "/home/xiaowei/Desktop/CTF/nesting"
]
    # 启动进程,并设置 stdin, stdout, stderr 为 PIPE,以便与进程交互
    p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    # 发送数据到进程
    p.stdin.write(msg.encode())
    p.stdin.flush()
    # # 从进程接收数据
    output = p.stdout.readline()
    # print(output)
    # 结束进程
    p.terminate()
    return int(read("inscount0.log").split(" ")[1])


def read(fname):
    with open(fname) as f:
        return f.read()
# print(run("fl"))


charset = string.printable

l = []
flag = ""
counter = 0

while(True):
    max_chr = 0
    first_iteration = True  # 初始化标志为 True
    for chr in charset:
        tmp = run(flag + chr)
        if first_iteration:  # 只在第一次迭代时执行
            max_value = tmp
            first_iteration = False  # 设置标志为 False
        if tmp > max_value:
            max_chr = chr
            max_value = tmp
            break
    print(max_chr)
    flag += str(max_chr)
    print(flag)

大概半小时左右就能出来了
image

参考文章

https://eternal.red/2017/dont_panic-writeup/
https://firmianay.gitbooks.io/ctf-all-in-one/content/doc/5.6_llvm.htmlhttps://firmianay.gitbooks.io/ctf-all-in-one/content/doc/5.6_llvm.html

标签:inscount0,..,max,intel64,chr,详解,so,nesting,2023
From: https://www.cnblogs.com/immune53/p/17769444.html

相关文章

  • php中关于token验证的相关问题详解
    这篇文章主要介绍了php中关于token验证的相关问题详解的相关资料,需要的朋友可以参考下目录token验证首先是为什么用?那么怎么用呢?token的组成一般token组成:JWT组成:标准的组成:总结token验证什么是token?我相信很多开发者都或多或少听过基于token的用户鉴权和基于session的用户......
  • 博睿数据获评2023中国智能运维领域“最具商业合作价值企业”
    博睿数据成功入选由数据猿携手上海大数据联盟共同推出的《2023中国智能运维领域最具商业合作价值企业盘点》。作为中国IT运维监控及可观测性领域的领导者,博睿数据凭借前瞻的产品技术布局、市场影响力以及领先的智能运维技术,获得了评审的一致认可,成功获评“最具商业合作价值企业”。......
  • Qt OpenGL textures详解
    1.初始化opengl资源 Q_INIT_RESOURCE:textures(资源名称)QSurfaceFormat:定义3d面显示方式如果在vs+qtvstools中无法正常显示3d图形,则需加入以下代码:format.setStenciBufferSize(8);format.setVersion(1,1);版本号根据用户安装的Qt版本来更改2.继承QOpenGLWidget和QOpen......
  • PRCV 2023:语言模型与视觉生态如何协同?合合信息瞄准“多模态”技术
    PRCV2023:语言模型与视觉生态如何协同?合合信息瞄准“多模态”技术近期,2023年中国模式识别与计算机视觉大会(PRCV)在厦门成功举行。大会由中国计算机学会(CCF)、中国自动化学会(CAA)、中国图象图形学学会(CSIG)和中国人工智能学会(CAAI)联合主办,多媒体可信感知与高效计算教育部重点实验室、......
  • 【2023潇湘夜雨】WIN11_Pro_Dev_23565.1000软件选装纯净版10.16
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_Dev_23565.1000。2.增加部分优化方案,手工精简部分较多。3.OS版本号为23565.1000。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.13.0.8》网卡版、运......
  • 2023年CSPM-3国标项目管理中级认证含金量及报名指南
    CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要求,培养我国项目管理领域复合型人才。  【证书含金量】 ·竞聘优先......
  • 2023年10月DAMA-CDGP数据治理专家认证报名来这
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023年惠州/深圳CPDA数据分析师认证含金量及报名流程
    CPDA数据分析师认证是大数据方面的认证,助力数据分析人员打下扎实的数据分析基础知识功底,为入门数据分析保驾护航。帮助数据分析人员掌握系统化的数据分析思维和方法论,提升工作效率和决策能力,遇到问题能够举一反三,为大部分决策难题提供解决方案。帮助数据分析人员掌握几种通用的数据......
  • 「解题报告」2023-10-17 模拟赛
    1、取石子游戏(nim.pas/c/cpp)【题目描述】小林和亮亮正在玩一个取石子的游戏。石子一共有\(n\)堆,其中第\(i\)堆恰好有\(i\)粒石子。小林先取,亮亮后取,并且两人依次轮流取石。每一次取石子的人可以选择任意一堆还未被取完的石子,并取走这一堆中任意多粒石子(注意,不能一粒石......
  • 《流畅的Python》 读书笔记 第三章字典和集合 20231017
    第3章字典和集合dict类型是Python语言的基石模块的命名空间、实例的属性和函数的关键字参数中都可以看到字典的身影跟它有关的内置函数都在__builtins__.__dict__模块中模块的命名空间:我的理解是sys.modules实例的属性:我的理解是实例.__dict__classA:def_......