首页
社区
课程
招聘
[求助]如何防止软件被修改跳转被破解
发表于: 2006-12-29 22:24 5370

[求助]如何防止软件被修改跳转被破解

2006-12-29 22:24
5370
再好的加密算法也没用,破解者不用管你的算法,修改跳转就被破解了,各位有什么好方法对付修改跳转破解?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
crc效验看看
2006-12-29 22:30
0
雪    币: 207
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
建议楼主搜索一下,以前讨论关于过爆破是不是万能的这个话题。
2006-12-29 22:35
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
让注册码与软件的关键部分 变量 函数发生关系就行了

没有正确的注册码得到的根本不是可以用的程序

就象winrar的密码那样
2006-12-29 22:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
注册码与软件功能本来是没关系的,这样把它们强拉上的关系可靠吗?或者说发生怎样的关系才会可靠不被破解者识破?RAR的密码是加密解密用的“种子”,它的密码本来就与软件功能有关。
2006-12-29 22:49
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
发生关系之后在没有得到一个正确的注册码的情况下时根本无法破解

RAR密码只有一个 所以他是不可破的
2006-12-29 22:56
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
7
简单的来说,在关键代码做效验. 一个简单的例子
int addr[4];

unsigned char important[100] = "........";

bool valid_key( char * key)
{
   bool ret == strcmp(key, "abcdefg");
   __asm
   {
       call dummy
dummy:
       pop ecx
       mov dword ptr[addr], ecx
    }
    return ret;
}

bool runner()
{
    char key[255];
    gets(key);
    if (!valid_key(key)) exit(1);
    decode(important_data, key);
    printf("valid key\n");

   __asm
   {
       call dummy
dummy:
       pop ecx
       mov dword ptr[addr+4], ecx
    }

    //在别的地方执行这个. 可以放远点
    bool crcok = crc(valid_key, addr, "xxxx")  &&
                 crc(runner, addr+1, "yyyy")
    if (bool)
    {
        __asm push eax
    }
}

利用key做变换代码并不安全. 因为你最终user_name, machine_code, sn 等都要变算出一个固定值. 其实也是可以暴
破解(前提是只要知道一个有效的序列号, 就好比你知道了rar的
密码一样)
2006-12-30 21:34
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
嵌入虚拟机执行伪代码最安全.
如果实在不行, 可以考虑做两个功能函数, 一个是试用函数, 一个是正式函数, 未注册调用的是试用函数, 注册的通过key计算出正式函数的地址即可.
这样做的难处在于你必须设计出一个key函数, 不正确的返回0, 正确的返回正式函数的地址和试用函数地址的差值.
2006-12-31 10:55
0
游客
登录 | 注册 方可回帖
返回
//