ce吧 关注:196,569贴子:3,801,452
  • 5回复贴,共1

扫盲第二弹,带你看懂解密函数,写出简单的解密

取消只看楼主收藏回复

昨天发了扫盲第一弹,基址到底是什么? 传送门https://tieba.baidu.com/p/5833596628
收到了热心朋友们的支持,给我了继续写下去的信心。今天继续来第二弹
带你看懂解密函数,写出简单的解密
过程不多,临时书写,难免有遗漏或不妥之处,忘见谅
经常看到有人在贴吧里问解密函数,但是给出的写法,都是一堆置入代码。大佬们一看就懂,但是苦了一堆0基础的新人。那这些置入代码到底是什么,有没有简单的解密办法,让人一看就懂,答案是肯定的,今天就来讲讲,怎么写出简单的解密函数
首先,上解密过程汇编

过程很短,很简单,但是还是有新人看不懂,那么,我现在来逐句翻译下


IP属地:云南1楼2018-08-10 14:37回复
    逐句翻译后的结果如下

    大家看到这里,应该基本看懂,是怎么解密的了
    但是,这段过程,还是太繁琐,太长。接下来,就是提炼这个过程,让整个过程更简单。
    通过上面的逐句翻译,我们已经知道,解密需要两个数据,一个是加密的内容,一个是Key,两个数据的内存地址,是在一起的。
    由此,我们可以得出下面的结构体


    IP属地:云南3楼2018-08-10 14:43
    收起回复
      然后,我们精简解密函数,得到如下解密函数

      接下来,为了方便使用,我们可以把这个函数,放到上面的结构体里面,得到了如下结构体

      接下来的使用,就很简单了,如果你要获取疲劳,那么只用
      ((EnProperty*)疲劳基址)->ecrypt() 这样,即可获得疲劳,是不是超级简单


      IP属地:云南4楼2018-08-10 14:51
      回复
        易语言,也和C++同理,虽然用置入代码,直接运行汇编,可以得到一样的结果。但是自己写过程,才是真正了解整个流程,为之后的各种分析,打下基础。
        今天过程没有说的太仔细,不过我都加了注释,新人多看几遍,应该就明白了。
        下一篇科普预告,带你看懂call的过程,让你自己分析,自己找call


        IP属地:云南5楼2018-08-10 14:55
        回复
          我的读写是这样的 int a = read<int>(addr) 这样的,里面判断的了空指针


          IP属地:云南16楼2018-08-10 16:13
          回复
            不过还是有不严密的时候,图省事,我就直接try catch了。。。。。。。。


            IP属地:云南17楼2018-08-10 16:14
            回复(2)