首页
社区
课程
招聘
[原创]2019看雪CTF 晋级赛Q3 签到题:乱世鬼雄 by 心学
发表于: 2019-9-18 19:23 5827

[原创]2019看雪CTF 晋级赛Q3 签到题:乱世鬼雄 by 心学

htg 活跃值
4
2019-9-18 19:23
5827

这是一道简单的根据【 用户名 】和【序列号】校验是否符合要求。

其逻辑是:【用户名】与【序列号】异或后,计算MD5值,并与内置的16字节数据进行比较,相等则通过。
知道处理过程后,进行计算
KCTF对应的序列号是:8DA79EF3CED2B8FCCFB2BBB6CBEFBCE1
# -*- coding: UTF-8 -*-
import binascii
print('输入信息:')
username_Str = 'KCTF'
builtin_HexStr = 'C6E4CAB5CED2B8FCCFB2BBB6CBEFBCE1'
print('username:\t%s'%(username_Str))
print('builtinHex:\t%s'%(builtin_HexStr))

print('\n转换成字节流')
username_Bytes = str.encode(username_Str)
builtin_Bytes = binascii.unhexlify(builtin_HexStr)
print('username:\t%s'%(username_Bytes))
print('builtinHex:\t%s'%(builtin_Bytes))

print('\n转换成整数:小端获取')
username_hex =  int.from_bytes(username_Bytes, byteorder = 'little')
builtin_Hex =  int.from_bytes(builtin_Bytes, byteorder = 'little')
print('username:\t%02X'%(username_hex))
print('builtinHex:\t%02X'%(builtin_Hex))

print('\n异或操作:此结果是字节反转的。主要是为了进行异或操作的对齐')
xorAB = username_hex^builtin_Hex
print('xor:\t\t%02X'%(xorAB))

print('\n转换成字节流')
SN_Re_HexStr = '%02X'%(xorAB)
SN_Re_Bytes = binascii.unhexlify(SN_Re_HexStr)
print('序列号字节流:\t%s'%(SN_Re_Bytes))

print('\n转换成整数:小端获取')
SN =  int.from_bytes(SN_Re_Bytes, byteorder = 'little')
print('序列号:\t\t%02X'%(SN))
#8DA79EF3CED2B8FCCFB2BBB6CBEFBCE1

# -*- coding: UTF-8 -*-
import binascii
print('输入信息:')
username_Str = 'KCTF'
builtin_HexStr = 'C6E4CAB5CED2B8FCCFB2BBB6CBEFBCE1'
print('username:\t%s'%(username_Str))
print('builtinHex:\t%s'%(builtin_HexStr))

print('\n转换成字节流')
username_Bytes = str.encode(username_Str)
builtin_Bytes = binascii.unhexlify(builtin_HexStr)
print('username:\t%s'%(username_Bytes))
print('builtinHex:\t%s'%(builtin_Bytes))

print('\n转换成整数:小端获取')
username_hex =  int.from_bytes(username_Bytes, byteorder = 'little')
builtin_Hex =  int.from_bytes(builtin_Bytes, byteorder = 'little')
print('username:\t%02X'%(username_hex))
print('builtinHex:\t%02X'%(builtin_Hex))

print('\n异或操作:此结果是字节反转的。主要是为了进行异或操作的对齐')
xorAB = username_hex^builtin_Hex
print('xor:\t\t%02X'%(xorAB))

print('\n转换成字节流')
SN_Re_HexStr = '%02X'%(xorAB)
SN_Re_Bytes = binascii.unhexlify(SN_Re_HexStr)
print('序列号字节流:\t%s'%(SN_Re_Bytes))

print('\n转换成整数:小端获取')
SN =  int.from_bytes(SN_Re_Bytes, byteorder = 'little')
print('序列号:\t\t%02X'%(SN))
#8DA79EF3CED2B8FCCFB2BBB6CBEFBCE1

00000000 MyMD5           struc ; (sizeof=0x58, mappedto_60)
00000000                                         ; XREF: sub_8819D0/r
00000000 unkownUInt      dd ?                    ; XREF: sub_8819D0+191/w
00000000                                         ; sub_8819D0+1DB/r ...
00000004 unkownInt       dd ?                    ; XREF: sub_8819D0+19D/w
00000008 vectorOrMD5Value __m128i ?              ; XREF: sub_8819D0+1A9/w
00000008                                         ; sub_8819D0+1B4/w ...
00000018 value           __m128i ?
00000028 unkownM128I     __m128i 3 dup(?)
00000058 MyMD5           ends

00000000 MyMD5           struc ; (sizeof=0x58, mappedto_60)
00000000                                         ; XREF: sub_8819D0/r
00000000 unkownUInt      dd ?                    ; XREF: sub_8819D0+191/w
00000000                                         ; sub_8819D0+1DB/r ...
00000004 unkownInt       dd ?                    ; XREF: sub_8819D0+19D/w
00000008 vectorOrMD5Value __m128i ?              ; XREF: sub_8819D0+1A9/w
00000008                                         ; sub_8819D0+1B4/w ...
00000018 value           __m128i ?
00000028 unkownM128I     __m128i 3 dup(?)
00000058 MyMD5           ends

主函数是sub_8819D0()

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 72
活跃值: (229)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
你好,有个问题想请教一下:


看大佬提供的反汇编的代码有中文字符也显示了相关函数调用,为什么我这个就是&unk_41E728这个样子呢。是不是ida pro有相关的设置,导致我这个显示不出来。请大佬看看是哪儿需要设置一下呢。感谢!
2019-10-7 12:33
0
雪    币: 5568
活跃值: (3208)
能力值: ( LV12,RANK:407 )
在线值:
发帖
回帖
粉丝
3
unk_41E728点进去,然后按a键盘,它会转换成字符形式
2019-10-8 19:20
0
雪    币: 72
活跃值: (229)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
感谢解答。还有一个问题:
如下图所示,这个函数的调用怎么能显示出来呢。

2019-10-9 17:42
0
雪    币: 5189
活跃值: (9712)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
5
郝若宁 感谢解答。还有一个问题:如下图所示,这个函数的调用怎么能显示出来呢。
动手去跟一下上在的几个函数,你就会发现它是啥功能,然后在IDA里按N给函数改个名字,帮助自己记忆,名字可以随便起,但是是自己改的,不是IDA自动 识别的,有一些库如果在IDA的FLIRT库里,有可能识别出来,但是业务代码基本是没有识别的。
2019-10-9 18:03
0
雪    币: 72
活跃值: (229)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
嗯嗯,感谢大佬解答
2019-10-11 11:13
0
游客
登录 | 注册 方可回帖
返回
//