这是个暨南大学的校赛题目,第一次尝试破解ELF的题目,作此分享:
1、首先拖进IDA,认准32位(可以去试试64位的,但事实证明是32位的),目录如下:

然后F5,进入到伪C代码,如下:

所以sub_8048434()是输入函数。接着看到了if的判断函数,相信密钥就在里面,因为有cmd,看条件可以知道条件==1时才是正确输出,看看if下面的那个函数,如下:

果然如果if成立,那么correct!,所以最后的答案在if中,走,去看看:

所以,从题目可以知道一些信息,804A020 = 120,这个是新的值,它是通过与0x34u异或得到的,所以根据双重异或得原来的结果(最简单的加密算法)可以得到原来的804A020的值,804A021=49,804A022也异或,23也异或,24就是88,25没有信息非0(无用信息),拿脚本去运行下:

在这里给个提醒,如果用python去写脚本会报错(之前我试过)因为python默认的是无符号的,而C++比较只能有符号位,会自动识别!大家可以记一下,负数转char用C++,而全是正数时,可以用python。
网友评论