第一幕
- 我们的游戏老师有一个自己的网站,他很喜欢在他网站上发布各种各样的消息,也包括我们的成绩。
- 我们第一次小测的成绩他就放了一个链接,链接里面是个exe文件,只要你输入了你的学号,就可以查到你的成绩。
- 但是由于大家是知道互相的学号的,所以互相就能查到各自的成绩,所以引起了不满。
第二幕
- 于是老师就发送了一个Passcode,让我们使用Passcode来查询成绩。
- 这个passcode长成这样
- 总共是8位数,全部都是数字。
- 我上看下看,都看不出这串数字和学号之间的关系。
第三幕
- 期中考的时候,老师就通过这个exe文件,让我们查询了我们的成绩。
- 当时我是相当好奇
- 到底其他同学分数咋样?
- 这个passcode和学号的关系是怎么样?
- 由于太忙了,我没有去深入调查。
期末
- 然而期末的时候,老师发了个小组作业成绩和期末成绩的成绩单。
- 小组作业查出来是这个
- 期末成绩是这个
- 这逗我玩呢????
- 于是我下定决心,得把它这exe拆了才行。
尝试
- 我去网上搜了几个软件,lpspy,dnspy,Resource Hacker,全部以失败告终。
- 他们都只能处理C#相关的包文件。
查找
- 很重要的关键词在于逆向工程(reverse engineering) ,一旦知道了这个词之后,你再去搜索结果,出来的工具会靠谱很多。
- 在查阅了大量资料只好,我发现IDA-pro可以将exe文件转为汇编语言。
IDA-pro
- 安装好IDA-pro之后,我马上开始处理老师的文件。【教育用途】
- 因为这里是主流处理器和执行配置,所以默认选项即可。
- 等待处理结束后,出现了这样的界面。
- 左边是函数名称,右边则是大段的汇编代码。
- 这里是一些关于函数窗口的解释,来自于IDA的帮助文档,但是对于理解这些代码的帮助并不大。
直接观察
结论1: 黑体的函数更重要
- 原因:我猜黑体的是执行了的函数,因为main也在里面。
结论2:老师没有自己写函数(除了main)
- 原因: 这一点其实让我非常的意外。我原来的推测是老师是用了什么办法,通过我们的学号生成了passcode,然后再进行输入输出的操作。这理应需要一个函数,但是在IDA显示的函数表中,并没有任何像是人写的函数名。
- 当然,这也有可能是IDA本身就不会正确显示函数名称。
着手研究main函数
线索1:输出
- 即使是汇编语言,输出也会是可以辨别的,我很快的在main函数里找到了很多个输出的地方。
- 这里感觉他应该是采用了一些变量来存储这些字符串语句,但是具体我也不是太懂,我想看的主要是有关成绩和的部分。
线索2:大量定义变量和赋值
- 在main的一开头,有着一处显然在大量定义变量。
- 那可以推测,在某处肯定进行了赋值和给分。
- 我认为显然是一下这处。
- 我看到这里都是16进制数,我觉得可以将我的passcode转成16进制,再进行比对,来确认这些是不是对应的passcode和分数。
- 下面这是我的转换结果
- 额,一下就对上了,下面的分数也是对上的。
结论:
- 老师根本没有把我们的学号和我们的Passcode联系在一起,他是直接声明一个变量,然后就把我们的passcode和成绩丢进去。
- 我能够看到班里其他人的成绩,但是没有办法知道具体哪个人成绩是多少【也许这是老师的精妙设计】【害我小测和期中考好菜啊】
彩蛋
- 在Assignment_mark中,当你的分数低于17分时,你会被要求提交youtube链接和GoogleDrive(就说某些同学老师是已经给好分了的,但是因为你的分数低于17,然后就会看不见;有一些是真的没交youtube和GoogleDrive链接的)
2. 老师的FinalExam_Mark里面没有任何一个同学的真实成绩。
小总结
- IDA pro是一个非常强大的反编译软件,它对于电脑病毒,恶意代码,汇编,指令集等领域的研究有很大帮助。
- 我这里只看了看main函数,事实上函数窗口中有非常多系统预定义的函数,如果能把这些函数吃透,我们就基本可以理解编译运行一个程序的时候,计算及内部究竟发生了什么。这可以很大程度的帮助我们理解程序语言,编译器,还有和计算机组成原理相关的知识。
声明
- 以上所谓的结论的其实都是我的推测,也许是错的也说不定。
- 这篇博文主要是满足大家的好奇心,仅供娱乐。如有冒犯,敬请原谅。
- 新年快乐,身体健康。