一个逆向的问题

上上周吧,一个道通科技的HR找到我,问我是否想找一份逆向相关的工作,

然后XXXXXXXX,最后是说,他们会给我一个机试的考题,让我尝试逆向那道题,然后给出算法。

为了保护道通公司,所以我不会透露考题的内容以及相关信息,我只说思路和感想。

这道题,不算特别难,输入一个数字,题里输出一个数字,

MFC的程序,然后我就开始配合IDA和WinDBG,开始,

很顺利,四五个小时,就把两处关键代码找到了,逆向了代码的流程,

但是还有个问题,最后经过我测试的时候发现,还有一个关键的KEY我还没拿到。

然后我就开始忙起来了,

首先代码是VMP加密的(其实我逆向的时候并不知道它是VMP加密的,只是感觉花指令特别多,后来沟通他们逆向主管才知道,这是VMP加密的),

花指令,乱七八糟指令特别多,五个小时之后,直到九个小时,我一直在尝试修复花指令,

通过写IDA插件(我曾经写过C++的IDA插件)来修复,或者通过使用OD插件来修复,

但是最终都以失败告终,我也越来越沮丧,看着数以百万计的花指令,我很疯,

直到我搞了11个小时的时候,我决定不修复代码了,直接去硬看,

这时我突然发现,那个KEY,在内存中的位置一直不变,

这就好办了,我写了一个OD脚本,通过脚本来跑代码,直到那个固定位置的内存出现了我想要的值为止,

第一次,我花了30分钟跑代码,中间还出去买了点吃的,结果跑出来了,跑了一万六千多指令还是十六万多啊,不记得了,

但是一看汇编,我又蒙了,周围还是一堆花指令,怎么办,再调试,

我又调试了不到30分钟,突然发现,这个数字是从另一块内存里面拷贝过来的,

另一块内存的地址也是不变的,那,好办了,继续跑代码,又跑了20多分钟,

终于找到内存出现指定值的代码了,我再回头用IDA看汇编,心情豁然开朗,

原来是个简单的异或,用异或来运算了一个数字,然后根据结果做Key,

之后总结文章,前后花了13个小时,把逆出来的完整算法交还给了HR。

中间浪费了太多时间,其实我是被大量花指令吓怕了,下次,我应该不怕的。

最后他们逆向主管面试我,我们聊得也不错,我给他讲了我的过往,以及逆向思路,

还有一些C++相关逆向的要点,

他们最终决定录用我,给我的价格也算是符合市场行情。

但是遗憾的是,综合利弊,我最后没有去,因为公司在深圳,我在北京,现在赶上疫情期,不太方便。

我也很后悔,可惜了,哎。

我的逆向技术都是这几年,通过不断地和360做攻防,不断地和金山做攻防,不断地和恶意软件做攻防,

一点点积累下来的,自己总结,自己积累,

能得到一个专门需要做逆向的公司的认可,其实我非常高兴,真的非常高兴。

原文地址:https://www.cnblogs.com/suanguade/p/12771245.html