通过在D8中调用系统API函数实现程序流程的加密

浏览: 作者: 来源: 时间:2020-11-20 分类:解决方案
1我们可以从侧面说明这个问题,我们知道,我们的所有的程序都要调用API,且所有API的调用都可以被拦截程序捕获,那如果真的只靠通过捕获API的调用对程序进行破解,那就只需要API拦截工具就够了,而不需要什么反编译工具了

【A】为什么要调用API进行加密

         原因一、因为有部分的程序并没有复杂的数学或逻辑运算

         原因二、程序中的数学运算对运行效率有较高的要求。

         以上两个原因导致只能在加密锁中运行简单的运算,存在容易被破解的风险。


【B】API的调用最终还是在程序中调用,其调用可以被轻易捕获,为什么还要使用调用API函数来进行加密?

        1、程序实际是由运算及流程两部分组成,是构成程序中最主要的两部分。

        2、用户通常只注重于运算的加密,忽略了流程的加密。

        3、在加密锁的调用API的目的就是为了实现流程加密


【C】什么是流程加密?

         1、流程加密是指在加密锁的代码中存在条件语法,循环语法等,从而让破解者无法知道何时调用某一API函数或什么条件下传递什么样的参数给API,从而达到加密的目的。

         2、简单地说就是根据不同的条件调用不同的API或传入不同的参数,从而实现流程加密。


【D】再问API的调用最终还是在程序中调用,其调用可以被轻易捕获,这样真的安全吗?

       1、我们可以从侧面说明这个问题,我们知道,我们所有的程序都要调用API,且所有API的调用都可以被拦截程序捕获,那如果真的只靠通过捕获API的调用对程序进行破解,那就只需要API拦截工具就够了,而不需要什么反编译工具了。

      2、在锁中进行API调用,能极大地打乱原来在程序中运行的流程,部分流程在程序中消失了,必须通过加密锁才能流程正确运行。从而达到防止破解的目的。


【E】调用API是指系统的API吗?还是可以是其它DLL或程序中自己写的函数?

      可以是系统API,控件

      也可以是其它DLL函数或控件函数

      亦可以是程序中本身的函数或代码片段。


【E】举例如下:

   bool mytese(int a,int b ,string c)

 {

     string path;byte buf[1000];

      int c=callmyApi("getvalue",........)//调用程序中的函数

     if( c>5 || c==-1)

     {

           path=callmyapi("getsystempath",.........)//调用系统API,取系统目录

           path=path+"123.dll"

      }

      else

     {

          path=path+"123_new.dll"

     }

     int handle=callmyapi("createfile",path,.........)//调用建立文件函数

    if(int!=-1)//如果成功

   {

        if(a>b/2 || b>0)

      {

         buf[1]=a;

       }

      else

     {

       buf[1]=2*a;

      }

        buf[2]=len(c);

     bool r=callmyapi("writefile",handle,buf,...........)//写入BUF数据到文件中

     callmyapi("closehandle:,handle,.......)//关闭文件。

     return r;

   }

    return false;

 }

//以上只是一个简单的例子用于演示,并没有写得太复杂,实际使用中应与自已的代码结合实用,越多越越复杂,越安全。