反编译exe软件_【娱乐向】exe逆向工程(破译《游戏开发课》老师的成绩程序)...

17e68d16d6fbd0179f61417f7fd1f4d2.png

第一幕

  • 我们的游戏老师有一个自己的网站,他很喜欢在他网站上发布各种各样的消息,也包括我们的成绩。
  • 我们第一次小测的成绩他就放了一个链接,链接里面是个exe文件,只要你输入了你的学号,就可以查到你的成绩。

8a1e02f9405fb7bf89c12a0a992ca03a.png
  • 但是由于大家是知道互相的学号的,所以互相就能查到各自的成绩,所以引起了不满。

第二幕

  • 于是老师就发送了一个Passcode,让我们使用Passcode来查询成绩。
  • 这个passcode长成这样

5d6f590a644e1705be9e92d5176429bd.png
  • 总共是8位数,全部都是数字。
  • 我上看下看,都看不出这串数字和学号之间的关系。

第三幕

  • 期中考的时候,老师就通过这个exe文件,让我们查询了我们的成绩。

000cfdb55125b963ed1eea5fd82b8d2f.png

9aa622cead252e9526325982c4f1ce87.png

5328e2ff1faa23db172564d8f620ef20.png
  • 当时我是相当好奇
    • 到底其他同学分数咋样?
    • 这个passcode和学号的关系是怎么样?
  • 由于太忙了,我没有去深入调查。

期末

  • 然而期末的时候,老师发了个小组作业成绩和期末成绩的成绩单。
  • 小组作业查出来是这个

a646a7b1b00e96c5dd40bff415e94cde.png
  • 期末成绩是这个

b6611dcdae3e876d5ee5a9afbd1ed6aa.png

97bb635c322be278c3bacfde4735f9fd.png
  • 这逗我玩呢????
  • 于是我下定决心,得把它这exe拆了才行。

尝试

  • 我去网上搜了几个软件,lpspy,dnspy,Resource Hacker,全部以失败告终。
  • 他们都只能处理C#相关的包文件。

查找

  • 很重要的关键词在于逆向工程(reverse engineering) ,一旦知道了这个词之后,你再去搜索结果,出来的工具会靠谱很多。

7a55dc20246376579062e0f0710d0900.png
  • 在查阅了大量资料只好,我发现IDA-pro可以将exe文件转为汇编语言。

IDA-pro

  • 安装好IDA-pro之后,我马上开始处理老师的文件。【教育用途】

8e3c22b10cb0103cddf63f2aacbf5204.png

d74ce66aa7cd36a918b4c1756ddefcd8.png

a5e8c640cbaead6917640adafd24c3fc.png
  • 因为这里是主流处理器和执行配置,所以默认选项即可。

9628dc7fd2bfea084a79611569c1efff.png
  • 等待处理结束后,出现了这样的界面。

51ef46cc95e50cfdad8a1d7783685b86.png
  • 左边是函数名称,右边则是大段的汇编代码。

2aca1d515ca86b24ccad1560001a5e36.png
  • 这里是一些关于函数窗口的解释,来自于IDA的帮助文档,但是对于理解这些代码的帮助并不大。

直接观察

结论1: 黑体的函数更重要

  • 原因:我猜黑体的是执行了的函数,因为main也在里面。

结论2:老师没有自己写函数(除了main)

  • 原因: 这一点其实让我非常的意外。我原来的推测是老师是用了什么办法,通过我们的学号生成了passcode,然后再进行输入输出的操作。这理应需要一个函数,但是在IDA显示的函数表中,并没有任何像是人写的函数名。
  • 当然,这也有可能是IDA本身就不会正确显示函数名称。

d7e6b71f584fa0c0304ffd780aac2cbb.png

着手研究main函数

线索1:输出

  • 即使是汇编语言,输出也会是可以辨别的,我很快的在main函数里找到了很多个输出的地方。

947fa768edeca09d122401ee4ea5a819.png
  • 这里感觉他应该是采用了一些变量来存储这些字符串语句,但是具体我也不是太懂,我想看的主要是有关成绩和的部分。

线索2:大量定义变量和赋值

  • 在main的一开头,有着一处显然在大量定义变量。

6ef9dfc6a9d754bc6b2c957fb4482251.png
  • 那可以推测,在某处肯定进行了赋值和给分。
  • 我认为显然是一下这处。

403906aaa214def996b9257e2ffb6985.png
  • 我看到这里都是16进制数,我觉得可以将我的passcode转成16进制,再进行比对,来确认这些是不是对应的passcode和分数。
  • 下面这是我的转换结果

e72bdda9600c6e70a06c2e61f616e809.png
  • 额,一下就对上了,下面的分数也是对上的。

0e1257475115c0639cdda07f22869a13.png

结论:

  1. 老师根本没有把我们的学号和我们的Passcode联系在一起,他是直接声明一个变量,然后就把我们的passcode和成绩丢进去。
  2. 我能够看到班里其他人的成绩,但是没有办法知道具体哪个人成绩是多少【也许这是老师的精妙设计】【害我小测和期中考好菜啊】

彩蛋

  1. 在Assignment_mark中,当你的分数低于17分时,你会被要求提交youtube链接和GoogleDrive(就说某些同学老师是已经给好分了的,但是因为你的分数低于17,然后就会看不见;有一些是真的没交youtube和GoogleDrive链接的)

919fd61ac9900ba8c4fcc970f1448f68.png

2. 老师的FinalExam_Mark里面没有任何一个同学的真实成绩。

小总结

  • IDA pro是一个非常强大的反编译软件,它对于电脑病毒,恶意代码,汇编,指令集等领域的研究有很大帮助。
  • 我这里只看了看main函数,事实上函数窗口中有非常多系统预定义的函数,如果能把这些函数吃透,我们就基本可以理解编译运行一个程序的时候,计算及内部究竟发生了什么。这可以很大程度的帮助我们理解程序语言,编译器,还有和计算机组成原理相关的知识。

声明

  • 以上所谓的结论的其实都是我的推测,也许是错的也说不定。
  • 这篇博文主要是满足大家的好奇心,仅供娱乐。如有冒犯,敬请原谅。
  • 新年快乐,身体健康。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值