首页
社区
课程
招聘
[求助]破解rockey5加密狗遇到的难题
发表于: 2004-12-18 21:37 10633

[求助]破解rockey5加密狗遇到的难题

2004-12-18 21:37
10633
程序运行需要狗里面的数据,直接爆破exe没有作用,因为它需要狗里面的数据,所以我就自己写了dic32.dll来代替它原来的,结果是可以运行了,开始出了一点小bug,就是我没有模拟完全,因为我的dll里面没有完全模拟它原来的函数.

现在有两种方案:
1.继续完全把dll写完~或许可以成功.我实在没有耐心一个一个去模拟,这个程序比较变态,每一个操作都去操作加密狗.
2.硬件克隆,但是我不知道它的超级密码~~~~~~

请问大家有什么看法??

// dic32.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "dic32.h"
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
    switch (ul_reason_for_call)
        {
                case DLL_PROCESS_ATTACH:
                case DLL_THREAD_ATTACH:
                case DLL_THREAD_DETACH:
                case DLL_PROCESS_DETACH:
                        break;
    }
    return TRUE;
}

int WINAPI DIC_Find()
{
        return 2;
}

int WINAPI DIC_Open(int hic, char* reader_name)
{
       
        return 0;
       
}
typedef struct
{
        char volume[16];
        char atr[15];
} DICST_CardInfo;
typedef struct
{
        WORD RunID;
        WORD ParaSize;
        BYTE Para[1];        // 大小为 ParaSize
} DICST_Before_Run_Data;
typedef struct
{
        WORD ResultSize;
        BYTE Result[1]; // 大小为 ResultSize
} DICST_After_Run_Data;
typedef struct
{
        WORD                fileid;                        // 文件 ID
        BYTE                filecla;                // 文件类别
        BYTE                fileatrpri;                // 文件属性 & 文件安全级
        WORD                filesize;                // 文件大小
        char                filename[17];        // 文件名
} DICST_File;
int WINAPI DIC_Command(int hic, int cmd, void* cmddata)
{
        if (cmd == 0x02000000)
        {
                DICST_CardInfo* p = (DICST_CardInfo*)cmddata;
                memset(p,0,31);
                memcpy(p->volume,"Hugeland",8);
                memcpy(p->atr,"Hugeland GDS",12);
                p->atr[13] = 0x01;
                p->atr[14] = (char)0xe0;
                return 0;
        }
        if (cmd == 0x03000000)
        {
        DICST_After_Run_Data *prun =(DICST_After_Run_Data *)cmddata;
        prun->ResultSize = 2;
        prun->Result[0] = (BYTE)0x90;
        prun->Result[1] =0;
        return 0;
        }
        if (cmd == 0x100a400)
        {
                return 0;       
        }
        if (cmd == 0x0d000)
        {
                return 0;
        }
        if (cmd == 0x0b000)//readfile
        {
       
                char* pread  = (char*)cmddata;                               
                /*        if (*pread == 0 && *(pread+2) == 0x14 )
                {
                        memset(pread,0,53);
                        *pread = 0x32;
                        memcpy(pread+2,"01234567890123456789012345678901234567890123456789",50);
                       
                }
                if (*pread == 0x32 && *(pread+2) == 0x32 )
                {
                        memset(pread,0,53);
                        *pread = 0x32;
                        memcpy(pread+2,"QSQWQSQ_QS[]_][EGEKMEGEKMOWU[]UWU[]_][UW_ACAGACAOA",50);
                       
                }
                        if (*pread == 0x64 && *(pread+2) == 0x32 )
                {*/
                        memset(pread,0,53);
                        *pread = 0x32;
                        memcpy(pread+2,"JHJDB@BDJH@^\\^X^\\^P^VTVPVTLN@NFDF@FDFXVT\\ZXZ\\RPR\\Z",50);
                       
        //        }
       
       
                return 0;
        }
        return 0;
}
int WINAPI DIC_Get(void* xdata, int p1, int p2, char* buffer)
{
        if (p2 == 0x80000000 && p1 == 0x80010000)
        {
                memset(buffer,0,15);
                memcpy(buffer,"Hugeland GDS",12);
                buffer[13] =0x01;
                buffer[14] =(char)0xe0;
                return 12;
        }
        if (p2 == 0 && p1 == 0x80190000)
        {
                buffer[0] = (char)0x90;
                buffer[1] =0;
                return 2;
        }
        if (p2 == 0 && p1 == 0x80180000)
        {
                memset(buffer,0,51);
                char* pdata = (char*)xdata;
                memcpy(buffer,pdata+2,50);
                return 0;
        }
        if (p2 ==2 && p1 ==0)
        {
                return 0x90;
        }

        return 0;
}
int WINAPI DIC_Set(void* xdata, int p1, int p2, int p3, char* buffer)
{

                if (buffer == "Gene"&& p3 == 0 &&p2 == 4 && p1 == 0)
                {
                        return 0;
                }
                if (buffer == "rate"&& p3 == 0 &&p2 == 4 && p1 == 0)
                {
                        return 0;
                }

        return 0;
}

int WINAPI DIC_Close(int hic)
{
        return 0;
}

顺便说一下,我的这个dll没有完全模拟,但是程序可以运行,里面的功能也正常,就是暂停没有了.

我也用rockey的集成开发工具看了一下狗,里面有3个文件,一个是可执行的,另外是数据文件.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (13)
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
另外,好像我不能"验证超级密码"了,应该是错误的最大次数够了,不知道怎么修改它的超级密码~~~~
2004-12-18 21:53
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3


出现这个提示是不是超级用户密码被锁了?

可是程序还能使用阿,我要是想硬件复制这个加密狗下一步怎么办?
那个6002的文件我看不了~~~~~
2004-12-18 21:55
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
这是原来有狗的运行界面,这是我点击了运行以后的.注意暂停的按钮是可用的~~~~


这是我的驱动的~~~~点击了运行之后暂停没了!!!!!
我晕~~~可是分析的数据一模一样,就是功能没了
2004-12-18 22:00
0
雪    币: 463
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
直接带狗调试,比较下你的DLL文件,在运行时可能还有验证没有模拟

或是直接带狗调试暂停的地方,然后看看相关的返回值或计算等
2004-12-19 00:13
0
雪    币: 238
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
智能卡亚,可以把程序的一部分放在卡里面执行,咱们的调施工具都不能进入调试,无法获得程序,光看返回值应该是不行的!
2004-12-19 23:03
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
现在是暂停也有了,就是再次暂停的时候又不见了,跟踪发觉有狗的时候是11,而我的是08,我在我的驱动里面收工修改为11也不管用,看来那些按钮一定还跟别的变量有关!,而我还没有找到这个变量!
2004-12-20 10:28
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
最初由 qdcrack 发布
智能卡亚,可以把程序的一部分放在卡里面执行,咱们的调施工具都不能进入调试,无法获得程序,光看返回值应该是不行的!


我有80%的把握肯定狗里面的执行代码已经被我crack掉了,否则分析数据不会正常的!回放也不会正常的,Layer3解码也不会正确的
2004-12-20 10:34
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
大家为什么都没有兴趣来讨论呢?呵呵,这可是学习的好途径阿
2004-12-20 10:36
0
雪    币: 205
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
程序开发时已经把程序有关的运算函数,相当于 一个CALL,一个子函数
你除非猜出这个CALL里的运算过程,所以你就看到 每次返回值都在变,因为
程序的参数不一样,结果也不一样
2004-12-20 11:37
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
对头,他每次调用以前都会DIC_Set一次,然后DIC_Command一次,最后DIC_Get一次所以我根据这个每次传入的不同来猜测最后的返回.

幸好我已经花时间整理出来这张表:

           EAX   读取数据的顺序   CWD  顺序   
打开文件:
11     123   0

打开文件对话框
11     123   10
回放
11    123    11
再次点击回放
11   123     11
三次点击回放
11  123      11
暂停
10  11       12
再次暂停
10  12       11     
11  321      11    (这里返回了2次,就是根据不同的值来设置按钮的状态)
三次暂停
10  11       12
停止
10  12       12
2004-12-20 12:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
牛,真牛。比我厉害多了,帮不了你。
我也经常破优化软件的。
2004-12-31 13:02
0
雪    币: 220
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
ROCKY 5没有玩过,不知道他是什么原理
不过我认为你既然自己写dll了,就还是这条道在走远一点,可能就完全成功了;另外我觉得你的dll写的有点过于简单了,可能吧狗考虑的不够全面。
2004-12-31 13:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我也在研究楼上的软件,我也没有弄出来,希望能和楼主交流。我的QQ是 466639605
2006-12-24 23:56
0
游客
登录 | 注册 方可回帖
返回
//