zoukankan      html  css  js  c++  java
  • 一个逆向的问题

    上上周吧,一个道通科技的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做攻防,不断地和金山做攻防,不断地和恶意软件做攻防,

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

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

  • 相关阅读:
    如何在Oracle官网下载java的JDK最新版本和历史版本
    屏幕录制专家【Bandicam】
    Bandicam下载 + 破解
    华为荣耀7i手动更改DNS,提高网页加载速度
    SQL中使用GROUP BY注意事项
    JavaScript数据类型判断
    React.lazy和Suspense组合实现组件懒加载
    使用React+TypeScript构建自己的组件库
    leetcode-0101 对称二叉树
    leetcode-0543 二叉树的直径
  • 原文地址:https://www.cnblogs.com/suanguade/p/12771245.html
Copyright © 2011-2022 走看看