ToB企服应用市场:ToB评测及商务社交产业平台

标题: 巅峰极客 2023 g0re [打印本页]

作者: 卖不甜枣    时间: 2023-8-8 07:11
标题: 巅峰极客 2023 g0re
解题过程

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

有个wrong,字符串搜索定位过去,然后查看交叉引用,
可以看到在main 里面对应这两个地方,应该是要走到下面的success 才是正确的flag,然后从上面进行分析,有两个main_sub的函数,第一个

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


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

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

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

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

所以还原思路,首先对encodearray 还原成base64,然后变表base64 解码,最后aes解密,aes密钥动调获取的和flag的输入数据放一块,正好16位
[code]import structfrom Crypto.Cipher import AESfrom Crypto.Util.Padding import unpadimport base64def 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_datacustom_table = "456789}#IJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123ABCDEFGH"encodearray = [    0xC9F5C5CFC889CEE6,    0xCCAC7FCE91C0D9D2,    0x92EAD496C0B7CFE9,    0x93AEA5CB84DFD7E2,    0xC9F0CEDF97BECAA6,    0xDB65B1C46BAEE1B7,    0xC3ED8CD69392EDCE,    0xA7B5B2AAA594DAA3]result = []key=b'wvgitbygwbk2b46d'for num in encodearray:    bytes_ = struct.pack('




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4