ce吧 关注:196,110贴子:3,799,387

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

只看楼主收藏回复

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

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


IP属地:云南1楼2018-08-10 14:37回复
    顶顶顶


    IP属地:山东2楼2018-08-10 14:41
    收起回复
      逐句翻译后的结果如下

      大家看到这里,应该基本看懂,是怎么解密的了
      但是,这段过程,还是太繁琐,太长。接下来,就是提炼这个过程,让整个过程更简单。
      通过上面的逐句翻译,我们已经知道,解密需要两个数据,一个是加密的内容,一个是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
          回复
            666 此帖考虑加精


            IP属地:广东来自Android客户端6楼2018-08-10 14:58
            收起回复
              666,大佬**,请收下我的膝盖


              来自Android客户端7楼2018-08-10 14:58
              回复
                给大佬跪下了,真大佬


                IP属地:湖北8楼2018-08-10 14:59
                回复
                  需要这样的大佬.


                  IP属地:山东9楼2018-08-10 15:05
                  回复
                    解密的汇编过程代码是怎么来的?


                    IP属地:湖北10楼2018-08-10 15:28
                    收起回复
                      大佬如果对着没有一点了解怎么接触呢 从什么学起


                      IP属地:江苏来自Android客户端11楼2018-08-10 15:51
                      收起回复
                        call?需要双击666吗?


                        IP属地:浙江来自Android客户端12楼2018-08-10 15:53
                        回复
                          留个企鹅交流一下,快一年没弄WG了


                          IP属地:黑龙江13楼2018-08-10 16:03
                          回复
                            这波详细解释了解密。点赞。说实话还真没仔细看过加密解密。只注意到了是8字节一个值。就没管他了。
                            赞赞赞


                            IP属地:四川14楼2018-08-10 16:09
                            回复(1)
                              建议不用直接用 *(T *)的方式读值。遇到非法指针直接异常就崩溃了。而是写个函数先查询下合法性。然后才判断是否读值


                              IP属地:四川15楼2018-08-10 16:11
                              收起回复