【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;
}
//以上只是一个简单的例子用于演示,并没有写得太复杂,实际使用中应与自已的代码结合实用,越多越越复杂,越安全。
【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;
}
//以上只是一个简单的例子用于演示,并没有写得太复杂,实际使用中应与自已的代码结合实用,越多越越复杂,越安全。