一个逆向的问题
上上周吧,一个道通科技的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做攻防,不断地和金山做攻防,不断地和恶意软件做攻防,
一点点积累下来的,自己总结,自己积累,
能得到一个专门需要做逆向的公司的认可,其实我非常高兴,真的非常高兴。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2018-04-25 今天突然点开一个网页
2018-04-25 反省