加密与逆向的那些事

加密与逆向的那些事

起源

有几个程序员不是被游戏外挂和酷炫的黑客技术所吸引入行的呢?(你非要说高薪?那你还能来看这篇文章?)算法

修改器二三事

从初中我才有第一台电脑,那个时候仍是windows95系统连互联网尚未普及,那个时候还只有一些单机小游戏,最火的也就是红色警惕。个人第一款大型单机游戏是西山居的《剑侠情缘外传月影传说》,当时使用4张cd光盘安装(我也不知道是否是正版)。游戏打通关以后就想着有没有别的玩法,在搜索的时候就发现了修改器这个东西,当时比较流行的说法叫金手指。一开始是用别人作好的修改器,到后来就本身用金山游戏本身制做修改器。从那时起就以为作修改器远比游戏自己有意思。windows

修改器进阶

后来网游兴起,手里的金山游侠忽然就不香了,虽然能改本地显示可是数据自己没有改变,因而新的技术出现了,CE修改器。接触到CE修改器后才知道原来还有基址和偏移量这种东西,有些游戏取得仍是客户端的数据可是和显示的数据不是用的同一个内存地址,经过CE找到基址和偏移量就能改一些设计不严密的网游。可是毕竟网游的重要数据全在服务端,手中的CE还没发光发热而后又不香了。而后新的技术又出现了!修改游戏封包,经过伪造客户端数据来欺骗服务器。然而没有不少时间去学习这种技术了,由于上高中要努力学习(英雄联盟出现了!这游戏真香)。安全

逆向二三事

高中起知道一些研究破解的论坛(这里就不点名了),起初是为了一些"好用"的软件去逛这些地方,后来就翻了翻一些技术文章,全是看不懂的,相似:脱壳,断点,爆破,关键跳。。。这些汉字我都认识就是组到一块儿不知道什么东西。因而就泡在这些知识的海洋里潜水,毕竟要以学业为重(打英雄联盟)!直到大学才正式去研究这些东西,它叫逆向。服务器

逆向干货

学习逆向必定要为了学习而不是要作违法的事!!!
因此这里只有思路没有具体操做网络

逆向目的有两个:学习

  1. 找到软件的受权点(关键跳)破解软件受权
  2. 分析算法
    大部分状况下是找关键跳进行爆破(跳过受权判断)。分析算法通常是要作注册机或者有多个关键跳再就是暗桩太多,作安全方面的大手子是分析程序的行为从而找到应对办法。

逆向分为动态和静态,动态就是将程序启动起来进行逆向,静态是直接分析程序指令(汇编语言)分析算法。编码

动态分析逆向:加密

  1. 查壳
  2. 弱壳直接脱强壳带壳破:
    1. 如今软件通常都用vmp之类的强壳,这种壳脱完以后修复也极其困难,因此新手小白之类的强壳不要想着脱。
    2. 弱壳通常都有脱壳脚本,直接用就能够(我没研究过壳,因此我都是带壳破)
  3. 找关键跳
  4. 爆破或分析算法
  5. 有暗桩的要修复暗桩

静态分析逆向:操作系统

  1. 查壳
  2. 脱壳(说了我不熟悉这方面了)
  3. 静态分析器加载库或者执行程序解出汇编码
  4. 找到要分析的方法
  5. 根据汇编码分析逻辑

动态分析VS静态分析

动态分析有个先天的优点,能够在运行时自动脱壳,因此动态分析是首选。  
静态分析通常是跨平台没法进行动态分析或者很是困难,好比Android和IOS的动态库。  
动态分析广泛用于windows操做系统软件逆向(你非要跟我杠Kali?那你赢了)  
静态分析我暂时只用在分析不一样平台的动态库

研究加密的起源

大学毕业以后放弃本行工做(工地搬砖)转行加入程序员大军(网上搬砖),起先从事游戏行业,如今从事物联网行业。  
在游戏行业一般要借鉴别人家的资源,而别人家的资源一般是加密过,好比cocos经常使用的xxtea加密。这种加密属于算法公开而隐藏秘钥的方式,只要获取到秘钥就能够解开资源,须要增长破解难度。  
如今的工做是物联网平台开发,给客户的都是可执行程序,因此须要进行软件受权,就须要研究多种加密算法。

加密干货

接下来就软件受权和个人逆向经验来简单分析下各类加密方式。

不管是软件受权仍是互联网传输,对于用户一方来讲消息都是透明的。互联网传输本就是服务器与用户之间通讯,不管发出消息仍是接收消息用户都是能够监听到,即便采用非对称加密方式也只是防止第三方窃取。软件受权就比较难监听,可是毕竟是软件读取受权信息而后再解释称软件能用的配置,只要监视软件内部就能够获取到受权消息,只不过期间成本大小。因此不管哪一种状况用户均可以获取到消息,那只能让获取的难度增大,时间成本增长。

加密方式:

  1. 对称加密(算法公开隐藏秘钥):
    1. xxtea:这个算法是我在cocos游戏引擎那里知道的加密方式,是基于全文内容的一种加密方式。(2019-11-27如今仍是处于不知道秘钥没法解的状态)
    2. AES:最经常使用的对称加密算法,一套秘钥进行加密解密
    3. 异或运算:最简单的对称加密算法,可是能够很灵活的变种,好比对一组秘钥循环异或
    4. 自定义码表:凯撒码表,将原字符用其余字符替换
    5. 动态码表:密码随时间或条件动态改变
    6. base64:这没什么好说的吧
  2. 非对称加密:
    非对称加密在互联网上能够防止第三方窃取,而在软件受权上只能用做验证,由于不管是公钥仍是私钥都是能够在软件内部获取其中一个,并且最终信息都是要被解密,因此失去了非对称加密的特性。

    1. RSA:引用百度百科的其中一句“只要其钥匙的长度足够长,用RSA加密的信息其实是不能被解破的。”惋惜在软件受权里全部信息都是要被解密的。
    2. 椭圆曲线加密算法(ECC):引用网络一句“210位ECC加密安全性至关于2048位RSA加密。”
    3. 国密算法:SM1,SM2,SM3,SM4
  3. 自定义算法:
    能够根据已有算法进行改动来建立本身的加密算法

受权方式:

  1. 受权文件:
    程序直接读取受权文件进行配置解析
  2. 网络受权:
    经过网络请求来下发受权信息,好处是能够动态更改受权,缺点是无网络环境下没法受权。下发受权信息后行为和受权文件方式相同

以上提到的加密算法和受权方式是我所遇到的和比较常见的,其余的一些算法不是已经失去加密性质再就是我还没遇到。(杠精退散)

重要性 不高 的软件受权加密建议:2种以上对称加密加一种非对称加密。非对称加密验签,对称加密解密,能加壳就加壳最好能加花指令和添加无用指令。(你说运行速度慢了?那必定是你选的加密方式有问题)

重要性 高 的软件受权加密建议:去买专业作安全的商业产品吧

结语

加密和逆向一直是矛与盾的关系,加密算法一直在改进,逆向的方法也在改进。安全这方面我也只是个小白,只是分享下工做总结和以往的心得。但不管是作什么都不要损害别人的利益,不要触犯国家的法律,想要提升逆向水平在各个论坛都有教程和一些专门用来练习破解的Creakeme。

相关文章
相关标签/搜索