📄 _smb.c
字号:
if (f2)
fdata (data + 2, f2, MIN (data + 2 + SVAL (data, 0), maxbuf));
else print_data (data + 2, MIN (SVAL(data,0), PTR_DIFF(maxbuf, data+2)));
}
static void print_sesssetup (uchar *words, uchar *data, uchar *buf, uchar *maxbuf)
{
int wcnt = CVAL (words, 0);
uchar *f1 = NULL, *f2 = NULL;
if (request)
{
if (wcnt == 10)
f1 = "Com2=[w]\nOff2=[d]\nBufSize=[d]\nMpxMax=[d]\nVcNum=[d]\n"
"SessionKey=[W]\nPassLen=[d]\nCryptLen=[d]\nCryptOff=[d]\n"
"Pass&Name=\n";
else f1 = "Com2=[B]\nRes1=[B]\nOff2=[d]\nMaxBuffer=[d]\nMaxMpx=[d]\n"
"VcNumber=[d]\nSessionKey=[W]\nCaseInsensitivePasswordLength=[d]\n"
"CaseSensitivePasswordLength=[d]\nRes=[W]\nCapabilities=[W]\n"
"Pass1&Pass2&Account&Domain&OS&LanMan=\n";
}
else
{
if (CVAL (words, 0) == 3)
{
f1 = "Com2=[w]\nOff2=[d]\nAction=[w]\n";
}
else if (CVAL (words, 0) == 13)
{
f1 = "Com2=[B]\nRes=[B]\nOff2=[d]\nAction=[w]\n";
f2 = "NativeOS=[S]\nNativeLanMan=[S]\nPrimaryDomain=[S]\n";
}
}
if (f1)
fdata (words + 1, f1, MIN (words + 1 + CVAL(words,0) * 2, maxbuf));
else print_data (words + 1, MIN (CVAL (words,0)*2, PTR_DIFF(maxbuf, words+1)));
if (f2)
fdata (data + 2, f2, MIN (data + 2 + SVAL (data, 0), maxbuf));
else print_data (data + 2, MIN (SVAL (data,0), PTR_DIFF(maxbuf, data+2)));
}
static struct smbfns smb_fns[] = {
{-1, "SMBunknown", 0, DEFDESCRIPT},
{SMBtcon, "SMBtcon", 0,
{NULL, "Path=[Z]\nPassword=[Z]\nDevice=[Z]\n",
"MaxXmit=[d]\nTreeId=[d]\n", NULL,
NULL}},
{SMBtdis, "SMBtdis", 0, DEFDESCRIPT},
{SMBexit, "SMBexit", 0, DEFDESCRIPT},
{SMBioctl, "SMBioctl", 0, DEFDESCRIPT},
{SMBecho, "SMBecho", 0,
{"ReverbCount=[d]\n", NULL,
"SequenceNum=[d]\n", NULL,
NULL}},
{SMBulogoffX, "SMBulogoffX", FLG_CHAIN, DEFDESCRIPT},
{SMBgetatr, "SMBgetatr", 0,
{NULL, "Path=[Z]\n",
"Attribute=[A]\nTime=[T2]Size=[D]\nRes=([w,w,w,w,w])\n", NULL,
NULL}},
{SMBsetatr, "SMBsetatr", 0,
{"Attribute=[A]\nTime=[T2]Res=([w,w,w,w,w])\n", "Path=[Z]\n",
NULL, NULL, NULL}},
{SMBchkpth, "SMBchkpth", 0,
{NULL, "Path=[Z]\n", NULL, NULL, NULL}},
{SMBsearch, "SMBsearch", 0,
{"Count=[d]\nAttrib=[A]\n", "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\n",
"Count=[d]\n", "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", NULL}},
{SMBopen, "SMBopen", 0,
{"Mode=[w]\nAttribute=[A]\n", "Path=[Z]\n",
"Handle=[d]\nOAttrib=[A]\nTime=[T2]Size=[D]\nAccess=[w]\n", NULL,
NULL}},
{SMBcreate, "SMBcreate", 0,
{"Attrib=[A]\nTime=[T2]", "Path=[Z]\n",
"Handle=[d]\n", NULL,
NULL}},
{SMBmknew, "SMBmknew", 0,
{"Attrib=[A]\nTime=[T2]", "Path=[Z]\n",
"Handle=[d]\n", NULL,
NULL}},
{SMBunlink, "SMBunlink", 0,
{"Attrib=[A]\n", "Path=[Z]\n", NULL, NULL, NULL}},
{SMBread, "SMBread", 0,
{"Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL,
"Count=[d]\nRes=([w,w,w,w])\n", NULL, NULL}},
{SMBwrite, "SMBwrite", 0,
{"Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL,
"Count=[d]\n", NULL, NULL}},
{SMBclose, "SMBclose", 0,
{"Handle=[d]\nTime=[T2]", NULL, NULL, NULL, NULL}},
{SMBmkdir, "SMBmkdir", 0,
{NULL, "Path=[Z]\n", NULL, NULL, NULL}},
{SMBrmdir, "SMBrmdir", 0,
{NULL, "Path=[Z]\n", NULL, NULL, NULL}},
{SMBdskattr, "SMBdskattr", 0,
{NULL, NULL,
"TotalUnits=[d]\nBlocksPerUnit=[d]\nBlockSize=[d]\nFreeUnits=[d]\nMedia=[w]\n",
NULL, NULL}},
{SMBmv, "SMBmv", 0,
{"Attrib=[A]\n", "OldPath=[Z]\nNewPath=[Z]\n", NULL, NULL, NULL}},
/* this is a Pathworks specific call, allowing the changing of the root path
*/
{pSETDIR, "SMBsetdir", 0,
{NULL, "Path=[Z]\n", NULL, NULL, NULL}},
{SMBlseek, "SMBlseek", 0,
{"Handle=[d]\nMode=[w]\nOffset=[D]\n", "Offset=[D]\n", NULL, NULL}},
{SMBflush, "SMBflush", 0,
{"Handle=[d]\n", NULL, NULL, NULL, NULL}},
{SMBsplopen, "SMBsplopen", 0,
{"SetupLen=[d]\nMode=[w]\n", "Ident=[Z]\n", "Handle=[d]\n", NULL, NULL}},
{SMBsplclose, "SMBsplclose", 0,
{"Handle=[d]\n", NULL, NULL, NULL, NULL}},
{SMBsplretq, "SMBsplretq", 0,
{"MaxCount=[d]\nStartIndex=[d]\n", NULL,
"Count=[d]\nIndex=[d]\n",
"*Time=[T2]Status=[B]\nJobID=[d]\nSize=[D]\nRes=[B]Name=[s16]\n",
NULL}},
{SMBsplwr, "SMBsplwr", 0,
{"Handle=[d]\n", NULL, NULL, NULL, NULL}},
{SMBlock, "SMBlock", 0,
{"Handle=[d]\nCount=[D]\nOffset=[D]\n", NULL, NULL, NULL, NULL}},
{SMBunlock, "SMBunlock", 0,
{"Handle=[d]\nCount=[D]\nOffset=[D]\n", NULL, NULL, NULL, NULL}},
/* CORE+ PROTOCOL FOLLOWS
*/
{SMBreadbraw, "SMBreadbraw", 0,
{"Handle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nRes=[d]\n",
NULL, NULL, NULL, NULL}},
{SMBwritebraw, "SMBwritebraw", 0,
{"Handle=[d]\nTotalCount=[d]\nRes=[w]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nRes2=[W]\n|DataSize=[d]\nDataOff=[d]\n",
NULL, "WriteRawAck", NULL, NULL}},
{SMBwritec, "SMBwritec", 0,
{NULL, NULL, "Count=[d]\n", NULL, NULL}},
{SMBwriteclose, "SMBwriteclose", 0,
{"Handle=[d]\nCount=[d]\nOffset=[D]\nTime=[T2]Res=([w,w,w,w,w,w])", NULL,
"Count=[d]\n", NULL, NULL}},
{SMBlockread, "SMBlockread", 0,
{"Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL,
"Count=[d]\nRes=([w,w,w,w])\n", NULL, NULL}},
{SMBwriteunlock, "SMBwriteunlock", 0,
{"Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL,
"Count=[d]\n", NULL, NULL}},
{SMBreadBmpx, "SMBreadBmpx", 0,
{"Handle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nRes=[w]\n",
NULL,
"Offset=[D]\nTotCount=[d]\nRemaining=[d]\nRes=([w,w])\nDataSize=[d]\nDataOff=[d]\n",
NULL, NULL}},
{SMBwriteBmpx, "SMBwriteBmpx", 0,
{"Handle=[d]\nTotCount=[d]\nRes=[w]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nRes2=[W]\nDataSize=[d]\nDataOff=[d]\n",
NULL,
"Remaining=[d]\n", NULL, NULL}},
{SMBwriteBs, "SMBwriteBs", 0,
{"Handle=[d]\nTotCount=[d]\nOffset=[D]\nRes=[W]\nDataSize=[d]\nDataOff=[d]\n", NULL,
"Count=[d]\n", NULL, NULL}},
{SMBsetattrE, "SMBsetattrE", 0,
{"Handle=[d]\nCreationTime=[T2]AccessTime=[T2]ModifyTime=[T2]", NULL,
NULL, NULL, NULL}},
{SMBgetattrE, "SMBgetattrE", 0,
{"Handle=[d]\n", NULL,
"CreationTime=[T2]AccessTime=[T2]ModifyTime=[T2]Size=[D]\nAllocSize=[D]\nAttribute=[A]\n", NULL, NULL}},
{SMBtranss, "SMBtranss", 0, DEFDESCRIPT},
{SMBioctls, "SMBioctls", 0, DEFDESCRIPT},
{SMBcopy, "SMBcopy", 0,
{"TreeID2=[d]\nOFun=[w]\nFlags=[w]\n", "Path=[S]\nNewPath=[S]\n",
"CopyCount=[d]\n", "|ErrStr=[S]\n", NULL}},
{SMBmove, "SMBmove", 0,
{"TreeID2=[d]\nOFun=[w]\nFlags=[w]\n", "Path=[S]\nNewPath=[S]\n",
"MoveCount=[d]\n", "|ErrStr=[S]\n", NULL}},
{SMBopenX, "SMBopenX", FLG_CHAIN,
{"Com2=[w]\nOff2=[d]\nFlags=[w]\nMode=[w]\nSearchAttrib=[A]\nAttrib=[A]\nTime=[T2]OFun=[w]\nSize=[D]\nTimeOut=[D]\nRes=[W]\n", "Path=[S]\n",
"Com2=[w]\nOff2=[d]\nHandle=[d]\nAttrib=[A]\nTime=[T2]Size=[D]\nAccess=[w]\nType=[w]\nState=[w]\nAction=[w]\nFileID=[W]\nRes=[w]\n", NULL, NULL}},
{SMBreadX, "SMBreadX", FLG_CHAIN,
{"Com2=[w]\nOff2=[d]\nHandle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nCountLeft=[d]\n", NULL,
"Com2=[w]\nOff2=[d]\nRemaining=[d]\nRes=[W]\nDataSize=[d]\nDataOff=[d]\nRes=([w,w,w,w])\n", NULL, NULL}},
{SMBwriteX, "SMBwriteX", FLG_CHAIN,
{"Com2=[w]\nOff2=[d]\nHandle=[d]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nCountLeft=[d]\nRes=[w]\nDataSize=[d]\nDataOff=[d]\n", NULL,
"Com2=[w]\nOff2=[d]\nCount=[d]\nRemaining=[d]\nRes=[W]\n", NULL, NULL}},
{SMBlockingX, "SMBlockingX", FLG_CHAIN,
{"Com2=[w]\nOff2=[d]\nHandle=[d]\nLockType=[w]\nTimeOut=[D]\nUnlockCount=[d]\nLockCount=[d]\n",
"*Process=[d]\nOffset=[D]\nLength=[D]\n",
"Com2=[w]\nOff2=[d]\n"}},
{SMBffirst, "SMBffirst", 0,
{"Count=[d]\nAttrib=[A]\n", "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n",
"Count=[d]\n", "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", NULL}},
{SMBfunique, "SMBfunique", 0,
{"Count=[d]\nAttrib=[A]\n", "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n",
"Count=[d]\n", "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", NULL}},
{SMBfclose, "SMBfclose", 0,
{"Count=[d]\nAttrib=[A]\n", "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n",
"Count=[d]\n", "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", NULL}},
{SMBfindnclose, "SMBfindnclose", 0,
{"Handle=[d]\n", NULL, NULL, NULL, NULL}},
{SMBfindclose, "SMBfindclose", 0,
{"Handle=[d]\n", NULL, NULL, NULL, NULL}},
{SMBsends, "SMBsends", 0,
{NULL, "Source=[Z]\nDest=[Z]\n", NULL, NULL, NULL}},
{SMBsendstrt, "SMBsendstrt", 0,
{NULL, "Source=[Z]\nDest=[Z]\n", "GroupID=[d]\n", NULL, NULL}},
{SMBsendend, "SMBsendend", 0,
{"GroupID=[d]\n", NULL, NULL, NULL, NULL}},
{SMBsendtxt, "SMBsendtxt", 0,
{"GroupID=[d]\n", NULL, NULL, NULL, NULL}},
{SMBsendb, "SMBsendb", 0,
{NULL, "Source=[Z]\nDest=[Z]\n", NULL, NULL, NULL}},
{SMBfwdname, "SMBfwdname", 0, DEFDESCRIPT},
{SMBcancelf, "SMBcancelf", 0, DEFDESCRIPT},
{SMBgetmac, "SMBgetmac", 0, DEFDESCRIPT},
{SMBnegprot, "SMBnegprot", 0,
{NULL, NULL, NULL, NULL, print_negprot}},
{SMBsesssetupX, "SMBsesssetupX", FLG_CHAIN,
{NULL, NULL, NULL, NULL, print_sesssetup}},
{SMBtconX, "SMBtconX", FLG_CHAIN,
{"Com2=[w]\nOff2=[d]\nFlags=[w]\nPassLen=[d]\nPasswd&Path&Device=\n", NULL,
"Com2=[w]\nOff2=[d]\n", "ServiceType=[S]\n", NULL}},
{SMBtrans2, "SMBtrans2", 0,
{NULL, NULL, NULL, NULL, print_trans2}},
{SMBtranss2, "SMBtranss2", 0, DEFDESCRIPT},
{SMBctemp, "SMBctemp", 0, DEFDESCRIPT},
{SMBreadBs, "SMBreadBs", 0, DEFDESCRIPT},
{SMBtrans, "SMBtrans", 0,
{NULL, NULL, NULL, NULL, print_trans}},
{-1, NULL, 0, DEFDESCRIPT}};
/*
* print a SMB message
*/
static void print_smb (uchar *buf, uchar *maxbuf)
{
struct smbfns *fn;
int command;
uchar *words, *data;
char *fmt_smbheader = "[P4]SMB Command = [B]\n"
"Error class = [BP1]\n"
"Error code = [d]\n"
"Flags1 = [B]\n"
"Flags2 = [B][P13]\n"
"Tree ID = [d]\n"
"Proc ID = [d]\n"
"UID = [d]\n"
"MID = [d]\n"
"Word Count = [b]\n";
request = (CVAL (buf, 9) & 0x80) ? 0 : 1;
command = CVAL (buf, 4);
fn = smbfind (command, smb_fns);
PRINTF ("\nSMB PACKET: %s (%s)\n", fn->name, request ? "REQUEST" : "REPLY");
/* print out the header
*/
fdata (buf, fmt_smbheader, buf + 33);
if (CVAL (buf, 5))
{
int class = CVAL (buf, 5);
int num = SVAL (buf, 7);
PRINTF ("SMBError = %s\n", smb_errstr(class, num));
}
words = buf + 32;
data = words + 1 + CVAL (words, 0) * 2;
while (words && data)
{
char *f1, *f2;
int wct = CVAL (words, 0);
if (request)
{
f1 = fn->descript.req_f1;
f2 = fn->descript.req_f2;
}
else
{
f1 = fn->descript.rep_f1;
f2 = fn->descript.rep_f2;
}
if (fn->descript.fn)
{
fn->descript.fn (words, data, buf, maxbuf);
}
else
{
if (f1)
{
PUTS ("smbvwv[]=\n");
fdata (words + 1, f1, words + 1 + wct * 2);
}
else if (wct)
{
int i,v;
PUTS ("smbvwv[]=\n");
for (i = 0; i < wct; i++)
{
v = SVAL (words + 1, 2 * i);
PRINTF ("smb_vwv[%d]=%d (0x%X)\n", i, v, v);
}
}
if (f2)
{
PUTS ("smbbuf[]=\n");
fdata (data + 2, f2, maxbuf);
}
else
{
int bcc = SVAL (data, 0);
PRINTF ("smb_bcc=%d\n", bcc);
if (bcc > 0)
{
PUTS ("smb_buf[]=\n");
print_data (data + 2, MIN (bcc, PTR_DIFF (maxbuf, data + 2)));
}
}
}
if ((fn->flags & FLG_CHAIN) && CVAL(words,0) && SVAL(words,1) != 0xFF)
{
command = SVAL (words, 1);
words = buf + SVAL (words, 3);
data = words + 1 + CVAL (words, 0) * 2;
fn = smbfind (command, smb_fns);
PRINTF ("\nSMB PACKET: %s (%s) (CHAINED)\n",
fn->name, request ? "REQUEST" : "REPLY");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -