-
-
[原创]签到题目解法
-
发表于: 2019-9-18 12:26 4006
-
拿到题目的时候还是比较激动的,想着签到题应该是最简单的,所以先拿它进行练习,但是没啥经验,还是花了不少时间在弯路上。
###0x21 先看看执行文件
通过IDA上去,发现程序没有反调试,没有啥保护,很容易就定位到关键函数sub_4019D0()
通过OD的调试过程,需要输入用户名和序列号信息,通过跟踪调试后,可以通过监控内存发现下面这段是做了字符向16进制转换。
下面的这段函数调用有一点复杂,但是从后续的验证来看,它只是验证了输入的序列号是否正确,
而且通过调用完后的结果,发现它其实是把上面的内存数据xmmword_13C12F8转换成了字符串(一个逆操作);
然后再验证两次转换的结果是否相等,如果不相同,就给出了错误提示(其实只要满足序列号是32位就OK了)。
通过上面的分析,跳过了验证后,到了下面的else分支,里面计算比较复杂,各种变量和转换(第一次的感觉头大啊),在这个地方的分析卡了段时间就放着了,有空的时候突发奇想的,找了一个特征值0x67452301;0x67452301;0x67452301;0x10325476; 从其它文章里的介绍这个是MD5的特征,自己根据其它特征基本也验证下面的算法部分就是MD5过程,其中Md5Update_sub_13A1000(),这样就把下面的处理过程分析清楚了,整理如下:
看到MD5还是挺怕的,以为题目要考虑暴破获取序列号之类的,不过自己算了一下可能的序列号组合:
字典:1234567890ABCDEF,长度是32位,那这样基本不太可能破解,所以自己又回退分析上在的计算过程。
从上面的过程,可以看到v28是关键,根本不需要关注后面的MD5算法,如果KCTF XOR ? 等于V28就OK了。
使用给定的信息获取v28结果为:
v28 = {0xC6,0xE4,0xCA,0xB5,0xCE,0xD2,0xB8,0xFC,0xCF,0xB2,0xBB,0xB6,0xCB,0xEF,0xBC,0xE1} = "其实我更喜欢孙坚"
这个值有点意思,而且计算上"KCTF" xor B = v28 , B = v28 xor "KCTF",可以计算如下:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [求助] 加密算法 5154
- [求助]XXX 5657
- [转帖][转帖] Immunity Canvas 7.26 Leaked 5878
- [转帖]Cobalt Strike 4.2 Crack 10631
- [原创][原创] WVSC的Patch分析 3443