/* * llatob(vp,p,base) * converts p to binary result in vp, rtn 1 on success */ int llatob(u_quad_t *vp, char *p, int base) { if (base == 0) p = _getbase (p, &base); return _atob(vp, p, base); }
/* * atob(vp,p,base) * converts p to binary result in vp, rtn 1 on success */ int atob(uint32_t *vp, char *p, int base) { uint32_t v; if (base == 0) p = _getbase (p, &base); if (_atob (&v, p, base)) { *vp = v; return (1); } return (0); }
/* * atob(vp,p,base) * converts p to binary result in vp, rtn 1 on success */ int atob(u_int32_t *vp, char *p, int base) { #ifdef HAVE_QUAD u_quad_t v; #else u_long v; #endif if (base == 0) p = _getbase (p, &base); if (_atob (&v, p, base)) { *vp = v; return (1); } return (0); }
BYTE* dataparser(LPCWSTR pStr,DWORD dwStrLen,MALLOC_FUNC pMalloc,DWORD* pdwDataLength) { if (pStr[0]==L'\0') return NULL; if (_1stcontain2nd(pStr,L"int:")) { pStr+=4; BYTE* pRet=(BYTE*)pMalloc(4); *((DWORD*)pRet)=DWORD(_readnum(10,pStr)); if (pdwDataLength!=NULL) *pdwDataLength=4; return pRet; } else if (_1stcontain2nd(pStr,L"dword")) { pStr+=5; int base=_getbase(pStr); if (*pStr!=':') return NULL; pStr++; BYTE* pRet=(BYTE*)pMalloc(4); *((DWORD*)pRet)=DWORD(_readnum(base,pStr)); if (pdwDataLength!=NULL) *pdwDataLength=4; return pRet; } else if (_1stcontain2nd(pStr,L"word")) { pStr+=4; int base=_getbase(pStr); if (*pStr!=':') return NULL; pStr++; BYTE* pRet=(BYTE*)pMalloc(2); *((WORD*)pRet)=WORD(_readnum(base,pStr)); if (pdwDataLength!=NULL) *pdwDataLength=2; return pRet; } else if (_1stcontain2nd(pStr,L"byte")) { pStr+=4; int base=_getbase(pStr); if (*pStr!=':') return NULL; pStr++; BYTE* pRet=(BYTE*)pMalloc(2); *pRet=BYTE(_readnum(base,pStr)); if (pdwDataLength!=NULL) *pdwDataLength=1; return pRet; } else if (_1stcontain2nd(pStr,L"hex:") || _1stcontain2nd(pStr,L"bin:")) { pStr+=4; int i=0; // Calculating reqiured size for (LPCWSTR pStr2=pStr;*pStr2!='\0';i++) { if (!((*pStr2>='0' && *pStr2<='9') || (*pStr2>='a' && *pStr2<='f') || (*pStr2>='A' && *pStr2<='F'))) break; pStr2++; if ((*pStr2>='0' && *pStr2<='9') || (*pStr2>='a' && *pStr2<='f') || (*pStr2>='A' && *pStr2<='F')) pStr2++; for (;*pStr2==' ';pStr2++); } if (i==0) return NULL; BYTE* pRet=(BYTE*)pMalloc(max(i,2)); for (i=0;*pStr!='\0';i++) { if (*pStr>='0' && *pStr<='9') pRet[i]=*pStr-'0'; else if (*pStr>='a' && *pStr<='f') pRet[i]=*pStr-'a'+0xa; else if (*pStr>='A' && *pStr<='F') pRet[i]=*pStr-'A'+0xa; else break; pStr++; if (*pStr>='0' && *pStr<='9') { pRet[i]<<=4; pRet[i]+=*pStr-'0'; pStr++; } else if (*pStr>='a' && *pStr<='f') { pRet[i]<<=4; pRet[i]+=*pStr-'a'+0xa; pStr++; } else if (*pStr>='A' && *pStr<='F') { pRet[i]<<=4; pRet[i]+=*pStr-'A'+0xa; pStr++; } for (;*pStr==' ';pStr++); } if (pdwDataLength!=NULL) *pdwDataLength=i; return pRet; } else if (_1stcontain2nd(pStr,L"str:")) { dwStrLen-=4; pStr+=4; if (int(dwStrLen)<=0) return NULL; WCHAR* pUnicode; int len=_readstringW(pUnicode,pStr,dwStrLen,malloc); // Get Length len=WideCharToMultiByte(CP_ACP,0,pUnicode,len,NULL,0,NULL,NULL); char* pRet=(char*)pMalloc(len+1); len=WideCharToMultiByte(CP_ACP,0,pUnicode,len,pRet,len+1,NULL,NULL); free(pUnicode); if (pdwDataLength!=NULL) *pdwDataLength=len; return (BYTE*)pRet; } else if (_1stcontain2nd(pStr,L"oem:")) { dwStrLen-=4; pStr+=4; if (int(dwStrLen)<=0) return NULL; WCHAR* pUnicode; int len=_readstringW(pUnicode,pStr,dwStrLen,malloc); // Get Length len=WideCharToMultiByte(CP_OEMCP,0,pUnicode,len,NULL,0,NULL,NULL); char* pRet=(char*)pMalloc(len+1); len=WideCharToMultiByte(CP_OEMCP,0,pUnicode,len,pRet,len+1,NULL,NULL); free(pUnicode); if (pdwDataLength!=NULL) *pdwDataLength=len; return (BYTE*)pRet; } else if (_1stcontain2nd(pStr,L"wstr:") || _1stcontain2nd(pStr,L"uni:") || _1stcontain2nd(pStr,L"utf16:")) { for (pStr+=3,dwStrLen-=3;*pStr!=':';pStr++,dwStrLen--); pStr++;dwStrLen--; if (int(dwStrLen)<=0) return NULL; WCHAR* pRet; int len=_readstringW(pRet,pStr,dwStrLen,pMalloc); if (pdwDataLength!=NULL) *pdwDataLength=len*2; return (BYTE*)pRet; } else if (_1stcontain2nd(pStr,L"utf8:")) { dwStrLen-=5; pStr+=5; if (int(dwStrLen)<=0) return NULL; WCHAR* pUnicode; int len=_readstringW(pUnicode,pStr,dwStrLen,malloc); // Get Length char* pRet=(char*)pMalloc((len+1)*2); len=WideCharToMultiByte(CP_UTF8,0,pUnicode,len,pRet,(len+1)*2,NULL,NULL); free(pUnicode); if (pdwDataLength!=NULL) *pdwDataLength=len; return (BYTE*)pRet; } else if (_1stcontain2nd(pStr,L"utf7:")) { dwStrLen-=5; pStr+=5; if (int(dwStrLen)<=0) return NULL; WCHAR* pUnicode; int len=_readstringW(pUnicode,pStr,dwStrLen,malloc); // Get Length char* pRet=(char*)pMalloc((len+1)*5); len=WideCharToMultiByte(CP_UTF7,0,pUnicode,len,pRet,(len+1)*5,NULL,NULL); free(pUnicode); if (pdwDataLength!=NULL) *pdwDataLength=len; return (BYTE*)pRet; } else { if (int(dwStrLen)<=0) return NULL; if (pdwDataLength!=NULL) *pdwDataLength=dwStrLen; int nAllocLen=LenWtoA(pStr,dwStrLen); char* pNew=(char*)pMalloc(nAllocLen+1); MemCopyWtoA(pNew,nAllocLen+1,pStr,dwStrLen); pNew[nAllocLen]='\0'; return (BYTE*)pNew; } }