hardasm

最后一题力

进入主函数,发现大部分是汇编

而且汇编形式不太认识

简单检索一下

似乎是avx2的指令集

Intel® Intrinsics Guide

官方指令集

(6条消息) x86_64汇编之二:x86_64的基本架构(寄存器、寻址模式、指令集概览)_ponnylv的博客-CSDN博客_x86指令集

x86架构

1
2
3
4
5
6
x=get_reg_value("ymm4")
y=get_reg_value("ymm7")
x=x.hex()
y=y.hex()
print(x,y)
#idapython读取寄存器指令

常规方式直接做看着都麻

搞搞黑盒测试

随便拉点数据

在数据存放位置[rsp+70h+var_50]找到加密后数据

和 ’ hgame{ ‘ 一样长度的0xff

看来是获得了正确的输入就会输出0xff

然后根据字符长度相匹的cmp和jz来跳转至正确答案

本来想能不能用idapython或者之类的插件对其进行爆破

但是似乎没有这样的api

改成用python对文件进行爆破,那么就需要一个可以在py中启动子进程并控制输入,获取输出的模块,找一找

Python3 subprocess | 菜鸟教程 (runoob.com)

subprocess模块

学习学习

先小小patch一手回显内容

Untitled

可以考虑用idapython写一下这道题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import subprocess
flag_1="hgame{"
flag=[]
index=6
for x in range(len(flag_1)):
flag.append(ord(flag_1[x]))
while index<31:
for i in range(32,128):
flag_guess=[0]*31
for j in range(len(flag)):
flag_guess[j]=flag[j]
flag_guess[index]=i
flag_guess_str="".join(chr(x)for x in flag_guess)
p=subprocess.Popen(["D:\\my re code\\hgame 2022\\week4\\hardasm.exe"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
#设置子进程状态
p.stdin.write(flag_guess_str.encode())
p.stdin.close()
out=p.stdout.read()
if len(flag_1)==30:
print(flag_1+"}")
break
if len(out)>index:
flag.append(i)
flag_1+=chr(i)
index+=1
print(flag_1)

记录一个想法

既然不知道怎么修改寄存器

那就不改了

改变跳转位置

跳转到开头

瞎几把修还是会出问题