ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

巅峰极客obf

2022-08-17 22:30:38  阅读:142  来源: 互联网

标签:极客 obf json keda flag func print import 巅峰


re

ObfPuzz

先起docker

按get传参flag即可

docker file中

CMD [ "php", "-d", "extension=ctf.so", "-S", "0.0.0.0:1447" ]

指php载入拓展 直接分析so

大概是重载了vardump?

image-20220817194301784

image-20220817194313818

图论相关的题目 根据输入的字符进入不同的函数

起点是sub_1443

终点是sub_295778

image-20220817194424070

先写idapython 将所有函数的边拿到

import idaapi
import matplotlib.pyplot as plt
import idautils
import idc
all_funcs = idautils.Functions()
print(all_funcs)
keda={}
for fn in all_funcs:
    #fn是个int 就是这个函数的地址
    func_name = idc.get_func_name(fn)
    func_name = func_name+"_ptr"
    #print(func_name)
    start = idc.get_func_attr(fn, FUNCATTR_START)
    end = idc.get_func_attr(fn, FUNCATTR_END)
    curr_addr = start   
    while curr_addr <= end:
    # print(hex(curr_addr),idc.GetDisasm(curr_addr))
    #当前地址的汇编
        asmmm = idc.GetDisasm(curr_addr)
        asmmm_1=idc.GetDisasm(idc.next_head(curr_addr, end))
        asmmm_2=idc.GetDisasm(idc.next_head(idc.next_head(curr_addr, end),end))
        asmmm_3=idc.GetDisasm(idc.next_head(idc.next_head(idc.next_head(curr_addr, end),end),end))
        asmmm_4=idc.GetDisasm(idc.next_head(idc.next_head(idc.next_head(idc.next_head(curr_addr, end),end),end),end))
        asmmm_5=idc.GetDisasm(idc.next_head(idc.next_head(idc.next_head(idc.next_head(idc.next_head(curr_addr, end),end),end),end),end))

        #print(asmmm)
        #print(asmmm_1)
        #print(asmmm_2)
        import re
        if ("mov     rax, [rbp+var_10]" in asmmm) and  "cmp     rax," in asmmm_1:
            if func_name not in keda:
                keda[func_name]=[]
            keda[func_name].append([asmmm_5.split(":")[-1],asmmm_1.split(",")[-1]])
        curr_addr = idc.next_head(curr_addr, end)
    #break
#print(keda)
import json
c=json.dumps(keda)
with open (r"D:\CTF\J\ObfPuzz_98857a60fab26c4c9425423d23a6aa25\2.json","w")as f:
    f.write(c)

image-20220817194534721

2.json如图

1.json是上个版本 脚本修改掉了

image-20220817194614587

用nx导入 计算所有可能路径 再塞进去爆破就好

import string

import networkx as nx
import json
import matplotlib.pyplot as plt

with open("1.json", "r") as f:
    keda = json.load(f)
with open("2.json", "r") as f:
    keda2 = json.load(f)
# print(keda)
G = nx.DiGraph()
for x in keda.keys():
    G.add_node(x)
for x in keda.keys():
    for c in keda[x]:
        G.add_edge(x, c)
start = "_sub_295778_ptr"
tem=[]
for path in nx.all_simple_paths(G, source="_sub_1443_ptr", target="_sub_295778_ptr"):
    tem.append(path)
# print(tem[4])
for x in tem:
    flag = ""
    for index in range(1, len(x)):
        flagt = keda2[x[index - 1]]
        for tessssss in flagt:
            if tessssss[0] == x[index]:
                flag += tessssss[1].split("'")[-2]
    # if "sub_295778" in x[-1]:
    #     print(flag)
    import requests
    url = "http://127.0.0.1:1447/?flag="
    tf = url + flag
    r = requests.get(tf)
    # print(r.text)
    # print(r.text)
    if "win" in (r.text):
        print(flag)
# print(ddddddddd)
# G2=nx.DiGraph()
# for x in ddddddddd:
#     G2.add_node(x)
# for x in ddddddddd:
#     for c in keda[x]:
#         G2.add_edge(x,c)
# c=G2.nodes()
# e=G2.out_degree()
# e=list(e)
# e.sort(key=lambda x:x[1],reverse=True)
# print(e)

image-20220817194756012

image-20220817194814321

flag{4ed4c7872f71240d75624ff04d25631f}

标签:极客,obf,json,keda,flag,func,print,import,巅峰
来源: https://www.cnblogs.com/FW-ltlly/p/16597022.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有