最近上机课多出来一些琐碎的时间,于是我乘着无聊,顺便为了巩固一下刚刚入门的反汇编,然后看到桌面上的学生机挺碍眼(-_-;),当即决定拿它开刀了!
首先,试了下,如果用任务管理器结束学生机程序student.exe,那过不久它会重新启动,我猜想是后台有个守护程序,一旦检测到student.exe关闭,就重新打开它。考虑到时间问题,我没有仔细去研究,而是采用如下投机取巧的方法。
其实苏亚星自己有卸载学生机的程序,不过要输入管理员密码。那这样我们的目标就明确了,只要能找到管理员密码就行。
先用PEiD检测了下,程序没有加壳,嘛,还是对新手挺友好的~
然后,我们使用强大的动态追踪反汇编工具OllyDbg,点击字符串参考工具,搜索unicode关键字“密码”,我们能找到以下内容:
跳转到相关汇编语句,我们能看到如下内容:
这里应该就是密码验证的代码,往上拉一下,能看到注释有"adminpwd"字样,我认为这一段应该会有管理员密码的提示,我先直接试了下“adminpwd”行不行,尝试了下以后,果然不行(这是当然啦- -)。
再往上拉看又能看到"%ssysdata\config.ini"这段注释,这明显是个设置文件。顿时我觉得这个文件一定有猫腻(难道密码就藏在这里?),于是跟随到苏亚星的目录下,C:\Program Files\AsiaStar\Mars8.1下有个config.ini文件,打开一看,里面有如下内容:
[Student]
TcpPort=6990
SvrIp=192.168.52.253
AutoFind=1
AutoSaveIP=1
AdminPwd=200CEB26807D6BF99FD6F4F0D1CA54D4
SysHAC=0
BindIP=
LastSecPara=0
[LogClt]
ip=192.168.52.253
port=6993
想必管理员密码就在这里面。
接着,看到了AdminPwd字段,显而易见,是管理员密码(居然还真藏在了这里!),它的值是"200CEB26807D6BF99FD6F4F0D1CA54D4"(为何感觉如此感觉似曾相识) ,是32个16进制数。
PS:当时我还拿这个当做密码试了下,不过结果当然是失败- -,所以这段密码还是被加密过的。
其实这32个16进制数是MD5码,卸载学生机程序应该就是先从用户窗口中读取输入的密码再加密成md5,再从这个config.ini文件读取这一段md5码,然后,最后将两个md5码比对,看看是否匹配。
PS:看到了汇编代码中有调用mfc的dll中的函数来进行加密,这里顺便去考查了下,原来MFC库里还有真提供了md5的加密函数(-_-;)。
接下来想想看破解方案:
考虑到MD5码是不可逆的,所以我们不打算破解这段密码,而是投机取巧去修改这段密码,比如:我们想要修改成1234,随便拿一个md5加密器,将1234加密成md5,得到"81DC9BDB52D04DC20036DBD8313ED055",修改config.ini文件的AdminPwd字段,使其变成:
AdminPwd=81DC9BDB52D04DC20036DBD8313ED055
然后打开卸载学生机程序,输入密码1234,然后确定,过了一会儿便大功告成啦!

2601

被折叠的 条评论
为什么被折叠?



