深思4加密狗问题,懂的朋友麻烦帮帮忙,分少。。。谢谢

dfgdfg火锅53的风格 2011-09-06 03:05:57
我在写S4,在用到它的API的S4Execute时候郁闷到了!先看看我的代码
下面是移植到狗里的代码:

#include "ses_v3.h"
void main()
{ char strOpenFail[50]="open Fail";
char strReadFail[50]="read Fail";
char outBuffer[50];
HANDLE hfile;
BYTE ret=0;
ret=_open(0xa005,&hfile);
if(ret!=SES_SUCCESS)
{
_set_response(sizeof(strOpenFail),strOpenFail);
_exit();
}
ret=_read(hfile,0,50,outBuffer);
if(ret!=SES_SUCCESS)
{
_set_response(sizeof(strReadFail),strReadFail);
_exit();
}
_set_response(sizeof(outBuffer),outBuffer);
_exit();
}

下面是C#里面的S4Execute操作:

private void btnConnectS4_Click(object sender, EventArgs e)
{
S4Open(ref s);
uint ret;
byte[] Pin = { 0x31,0x32, 0x33, 0x34, 0x35,0x36, 0x37, 0x38,
0x31,0x32, 0x33, 0x34, 0x35,0x36, 0x37, 0x38,
0x31,0x32, 0x33, 0x34, 0x35,0x36, 0x37, 0x38};

//verify dev PIN
ret = S4VerifyPin(ref s, Pin, 24, S4_DEV_PIN);
if (ret == 0x00) //SUCCESS 0x00
{
MessageBox.Show("开发级权限验证成功");
}


uint ret1, BytesReturned = 0;
byte[] inBuffer = Encoding.Default.GetBytes("");
byte[] outBuffer = new byte[200];
ret1 = S4Execute(ref s, "d001", inBuffer, (uint)inBuffer.Length, outBuffer, 200, ref BytesReturned);
MessageBox.Show("返回码:" + ret.ToString() + " 返回长度:" + BytesReturned.ToString());
}

我要实现的效果是:
点击PC程序写入文件(已实现,未贴出),然后由于SES才能读取文件,所以把代码植入狗内,运行SES系统函数_read,再把结果_set_response返回给pc,但是我S4Execute是执行成功了的,返回的是0,也就是ret是0,但是BytesReturned也是0(BytesReturned是返回的值的长度)。。。郁闷啊。写入狗内的是对了的,因为我用c来写是可以获取到的,
下面是c里面的代码(IDE:vc6.0)。

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include "sense4.h"

/*bubble sort function removed. Add EliteIV invoking code. */
void call_sense4(char *,char *, int);

/*main procedure*/
void main()
{
char test[50]="";
call_sense4("d001", test, 50);
printf("%s\n",test);
}

void call_sense4(char *fid, unsigned char *buff, int len)
{
SENSE4_CONTEXT ctx = {0};
SENSE4_CONTEXT *pctx = NULL;
unsigned long size = 0;
unsigned long ret = 0;

S4Enum(pctx, &size);
if (size == 0)
{
printf("EliteIV not found!\n");

return;
}

pctx = (SENSE4_CONTEXT *)malloc(size);
if (pctx == NULL)
{
printf("Not enough memory!\n");
return;
}

ret = S4Enum(pctx, &size);
if (ret != S4_SUCCESS)
{
printf("Enumerate EliteIV error!\n");
free(pctx);
return;
}

memcpy(&ctx, pctx, sizeof(SENSE4_CONTEXT));
free(pctx);
pctx = NULL;

ret = S4Open(&ctx);
if (ret != S4_SUCCESS)
{
printf("Open EliteIV failed!\n");
return;
}

ret = S4ChangeDir(&ctx, "\\");
if (ret != S4_SUCCESS)
{
printf("No root directory found!\n");
S4Close(&ctx);
return;
}

ret = S4VerifyPin(&ctx, "12345678", 8, S4_USER_PIN);
if (ret != S4_SUCCESS)
{
printf("Verify user PIN failed!\n");
S4Close(&ctx);
return;
}

ret = S4Execute(&ctx, fid, buff, len, buff, len, &size);
if (ret != S4_SUCCESS)
{
printf("Execute EliteIV exe failed!\n");
S4Close(&ctx);
return;
}

S4Close(&ctx);

return;
}

...全文
433 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我无语了。。。这么多人都不理。。。好现实,分少也不理
  • 打赏
  • 举报
回复
分少也要理理啊~~~
  • 打赏
  • 举报
回复
来位大牛解释哈呀!谢谢了啊

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧