首页 > 其他分享 >巅峰极客 2023 g0re

巅峰极客 2023 g0re

时间:2023-08-07 23:23:42浏览次数:39  
标签:编码 encodearray 极客 import base64 custom g0re 2023 table

解题过程

打开软件是加壳的,使用010打开,可以看到是魔改的upx,将关键词改成UPX ,然后脱壳成功,使用IDA打开,可以看到是没有符号的,分析起来比较难顶,使用go_parser还原符号后打开main_main,

先运行一下查看有没有什么提示

image-20230807142101343

有个wrong,字符串搜索定位过去,然后查看交叉引用,

可以看到在main 里面对应这两个地方,应该是要走到下面的success 才是正确的flag,然后从上面进行分析,有两个main_sub的函数,第一个

image-20230807142715400

有个aes,直接猜是AES加密,第二个函数

image-20230807143027899

image-20230807111902922

这里很多3字节编码的操作,看起来像base64,后面引用了一个外部的字符串off_53D370,应该就是编码表,这个不是标准的编码表是变表

image-20230807143234676

再往后面就是一个数组的比较了,这里函数的参数识别有问题,按Y修改下,查了下这个panicIndex函数好像是处理数组越界的,没有实际的含义。

image-20230807112123391

逻辑清楚很多了,这里可以再修正下数组的定义,这里是对编码后的base64字符串进行操作

image-20230807143358081

然后就是最后的判断了,这里比较的是编码后的字符串和encodearray,没有其他的操作了

image-20230807143445742

所以还原思路,首先对encodearray 还原成base64,然后变表base64 解码,最后aes解密,aes密钥动调获取的和flag的输入数据放一块,正好16位

import struct
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64


def decode_custom_base64(data, custom_table):
    # 标准Base64编码表
    standard_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    # 使用自定义表将加密数据映射回到标准的Base64编码
    trans = str.maketrans(custom_table, standard_table)
    decoded_data = base64.b64decode(data.translate(trans))

    return decoded_data



custom_table = "456789}#IJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123ABCDEFGH"

encodearray = [
    0xC9F5C5CFC889CEE6,
    0xCCAC7FCE91C0D9D2,
    0x92EAD496C0B7CFE9,
    0x93AEA5CB84DFD7E2,
    0xC9F0CEDF97BECAA6,
    0xDB65B1C46BAEE1B7,
    0xC3ED8CD69392EDCE,
    0xA7B5B2AAA594DAA3
]

result = []
key=b'wvgitbygwbk2b46d'
for num in encodearray:
    bytes_ = struct.pack('<Q', num)
    for b in bytes_:
        result.append(b)

# print(result)
base=''
for i in range(len(result)):
    base+=chr((result[i]-key[i%16])^0x1A)
print(base)


decoded_data = decode_custom_base64(base, custom_table)
print(decoded_data)


aes = AES.new(b"wvgitbygwbk2b46d",mode=AES.MODE_ECB)
print(aes.decrypt(decoded_data))

标签:编码,encodearray,极客,import,base64,custom,g0re,2023,table
From: https://www.cnblogs.com/immune53/p/17613012.html

相关文章

  • 2023.8.7
    今天依旧早起去了小河沿早市,吃了很多好吃的而且物价很便宜接着骑自行车去了中街,真的很喜欢在城市里瞎溜达的感觉!!!中街很大,旁边还有其他商城,我很满意。这次旅行出乎意料地重新联系上一个朋友,已经几年没和他说话,但是狗哥说话还是这么贱地气死人(暴怒)昨天晚上和朱朱各种给人打电话......
  • 【专题】2023年预制菜产业发展观察报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33388近年来,中国的预制菜行业迅速发展,已成为消费者生活中不可或缺的一部分。研究报告显示,预制菜行业在美国和日本等国家已经发展了很长时间,与中国市场相比,中国的预制菜市场仍有巨大的增长潜力。预制菜行业的蓬勃发展主要受到两个方面的推动:企业端通......
  • 【专题】2023年中国预制菜产业白皮书 报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33388近年来,中国的预制菜行业迅速发展,已成为消费者生活中不可或缺的一部分。研究报告显示,预制菜行业在美国和日本等国家已经发展了很长时间,与中国市场相比,中国的预制菜市场仍有巨大的增长潜力。预制菜行业的蓬勃发展主要受到两个方面的推动:企业端通......
  • 【专题】2023中国预制菜企业竞争力百强研究 报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33388近年来,中国的预制菜行业迅速发展,已成为消费者生活中不可或缺的一部分。研究报告显示,预制菜行业在美国和日本等国家已经发展了很长时间,与中国市场相比,中国的预制菜市场仍有巨大的增长潜力。预制菜行业的蓬勃发展主要受到两个方面的推动:企业端通......
  • 2023.8.7
    今天把花式栈溢出的framefaking结束了,并且记成了笔记,查东西的时候发现活用最近兴起的ai生成挺有用的,可以很方便地查到很多基础知识,比如pwntools的一些函数,到pwntools官网去查,就感觉查起来有点难受,而且还不一定能找到满意的解答,用ai生成的答案,虽然也不能保证一定正确,但至少也有不......
  • 2023牛客+杭电补题和总结记录(后半)
    前半继续写要被编辑器卡飞了,换个档杭电第六场\(1002.Pair\Sum\and\Perfect\Square\)对于每个位置可以求出该位置的数和哪些位置的数能够组成完全平方数,因为原序列是排列,并且完全平方数个数不多,所以预处理的复杂度不高。(也可以在后续统计过程中处理)处理出点对以后就变成了......
  • 2023.8.6
    今天早起啦,早起化妆准备出发!外面很冷,感觉像是秋天来了其实也快秋天了哈哈,一年过的真的很快啊和朋友做的不是同一辆的火车但是基本上是同时到第一天去了太原街和山姆超市,晚上去了彩电塔夜市拍了很多照片,开心!酒店很便宜但是也很好......
  • 2023.8.7 练习
    ARC060D若\(b^2\len\),此时\(b\)很小,直接枚举即可。若\(\sqrt{n}<b<n\),此时发现其只有两位。那么\(n\bmodb+n/b=s\),即\((n/b)*(b-1)=n-s\),考虑枚举\(n-s\)的约数判断即可。ARC060E考虑借用“弹飞绵阳”一题的套路,先分块,然后预处理出\(cnt_i,nxt_i\),表示走出这个块......
  • 2023.8.7
    Bronya19C场。转圈圈一个长为\(n\)的\(01\)串\(S\),串中有且仅有一个\(1\),你可以操作若干次,每次可以将一个长为\(k\)的子串反转。对每个\(i\)询问\(1\)至少几步可以翻转到位置\(i\),另外地,一些位置在操作的过程中不能有\(1\).对于\(i\),如果不存在这个最小步数,输......
  • 2023.8.7 模拟赛
    A有一个01串,只有一位是\(1\),你每次可以翻转一个长为\(k\)的串,求出使得每个位置为\(1\)最少翻转多少次。其中有一些位是存在\(1\)的。\(n10^5\)考虑求出一个点能翻转一次到哪些点,只要不碰到边界即可。考虑线段树优化建图,建立奇偶两颗线段树。然后deque优化BFS......