全国大学生信息安全邀请赛(西电)逆向题目分析

1. 静态分析

Ida打开,直接f5:

1

大意是用户输入一个8字节的字符串。 根据对byte_41204c处内存做异或,之后对401000处的内存做赋值。最后跳至401000处。

 

查看401100处内存(因为只修改了0x100大小的内存,所以401100处不会改变)。

2

很明显是一个函数的返回,所以401000是一个函数,且根据最后几条指令,可以推断出函数前几条指令为:

根据推断出来的这前几个字节,大致可以推断出输入的字符串。

3

2.写程序解key

设byte_41204c为table1; byte_41214c为table2; byte_401000为table3。

设解密后401000内存为data[10]={“\x55\x8b\xec\x83\xec\x58\x53\x56\x57”}。

对于每个data[i]在table2中查找值等于data[i]的索引值index,table1[index]^i如果是可见字符,那么可能就是输入字符。

程序如下:

 

运行结果:

4

根据结果,发现输入字符的1-7位都能确定,分别为ellozmg,只有第0位不确定,但基本可以猜出第0位不是h,就是H。最后运行测试,发现key为Hellozmg。

5

3.说明

最后吐槽下这个比赛,都是渗透,让人干坐了一天。另外感谢下赛后给我这个程序的朋友。程序下载地址:

http://pan.baidu.com/s/1eQ1ROjg

[via@91ri.org团队]