RE April 17, 2020

看雪ctf二进制题解

Words count 2.6k Reading time 2 mins. Read count 0

一、keygenme(逆向)

image-20200417140949632

是一个crackme,已经知道用户名是KCTF的情况下,计算出序列号。这题真的是很好地锻炼了动态调试的能力,学到了~

1、首先ida分析逻辑:

image-20200417141222194

这里要求输入name是大于3位小于20位,sn一定是64位的

接着进入check

这里因为进行了去符号表:

image-20200516165910042所以我们可以通过修复符号表+自定义函数名来进行加密算法的查看:

ida中shift+f5然后导入我们的静态链接库,这个库可以从github下载:

https://github.com/push0ebp/sig-database

搞完后,放到ida的sig\pc目录下,有很多很多的库,可以通过strings或者file先查看下程序的编译环境再导入库去识别,效率会高一些。

image-20200516170026542

接下来回到函数可以看到:

image-20200516170056184

看到了aes的ecb模式的加密,然后进一步分析,自己重新定义函数:

image-20200417141432907

func1是格式化操作,转成32位的16进制数,接着AES解密(0标志位),得到的明文进行RSA加密得到密文,满足密文v5[0]=0,v5[1]=2,这里通过动态调试可以得知,rsa生成的密文后16字节作为了name进行tea算法后check的密文。然后name那里进行了tea算法得到密文,匹配成功说明sn可用,Congratulation即可解答。

AES解密部分可以看出是ECB模式,key提取出来是480b62c3acd6c8a36b18d9e906cd90d2,AES部分结束。

然后RSA部分可以得到:n=0x69823028577465AB3991DF045146F91D556DEE8870845D8EE1CD3CF77E4A0C39
p=201522792635114097998567775554303915819
q=236811285547763449711675622888914229291
e=65537

至此结束这两个算法,然后利用KCTF生成的密文是14AF58AD4D76D59D8D2171FFB4CA2231

利用txt中的序列号去运行,经过rsa后得到c=0x0002888888888888888888888888880090C77273A30E15FA5078A1A291D8DB06

替换后面的16字节得到密文:

c=0x0002888888888888888888888888880014AF58AD4D76D59D8D2171FFB4CA2231

进行rsa解密:

image-20200417142342996

得到aes解密后的明文:

2d5f4c9d567c43399312b8898d6c7f2ec799c64bde4fe39eb01771be1e7f4795

进行AES加密:

image-20200417142438296

将得到的sn和txt中的sn进行cmp得知,进行了切割操作,后面的是不要的。

image-20200417142509078

因此序列号就是

0c5ce379f2102313d7420ec4883e25d07b935f98e2b0d9819275450cfda7086e

image-20200417140949632

0%