patch爆破(L-W都可)

这种方法主要是用来抢签到题一血的,flag字符串之间没有关系且有对错回复的题目都可用(linux的话把exe去掉就行)
from subprocess import Popen,PIPE
path=”dump.exe”
flag=””
‘’’
print(“please input first_address====>\t”);start=int(input())
print(“please input end_address====>\t”);end=int(input())
print(“please input code_string====>\t”);firs=input()
‘’’
start=1;end=23;firs=”01837c2418”;process_ans=’Good’
for i in range(start,end):
patch=bytes.fromhex(firs+hex(i).replace(“0x”,””).zfill(2))
fea=bytes.fromhex(firs+”01”)
f1=open(“dump.exe”,”wb”)
f2=open(“1.exe”,”rb”)
arr=f2.read()
arr=arr.replace(fea,patch)
f1.write(arr)
f1.close()
f2.close()
for j in range(0x10,0x80):
tmp=flag+chr(j)
p=Popen(path,stdin=PIPE,stdout=PIPE)
p.stdin.write(tmp.encode())
if(process_ans in str(p.communicate()[0])):
flag=tmp
print (flag)
break
题目:OBFU的复仇.exe
2000多个函数,分析算法可能会死掉,主要用了OBFU的混淆,然后他的结果之间互相没有关系,而且会有反馈,所以可以用做一个实例。
ida伪代码
ida伪代码
逻辑很简单,经过一个函数sub_41644A的运算,然后进行了和运算和异或运算最后得到相应的数值,直接上爆破代码,得出结果,有趣
爆破结果


一个好奇的人