吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1300|回复: 0
收起左侧

[其他转载] VB逆向中字符串处理

[复制链接]
DQQQQQ 发表于 2021-2-5 15:43
最近在学习逆向。但是调试crackme中的VB代码时候,最烦的人就是VB字符串,因为地址不是直接指向。所以调试时候很麻烦。
调试过程中,突然想分析VB字符串在内存中布局。我一开始猜测是不是,VB字符串内存布局按照:   4byte的字符串长度+4byte位置用途 + 字符串地址指针
因为我C++用的多一点,就是按照c++ string来猜测的。
我调试到了第31个,cracking4all中,有突然发现为啥进去的数字,出来的字符串。
和自己一开始对字符串的内存布局不匹配,然后我跟进去VB的函数里面调试了一下。突然发现吧在比较 前两个字节,而且比较的数字还比较特别。
貌似是COM中,常用的VARIANT. 然后我仔细调试了,发现果然是。发个帖,记录一下自己调试心得.


其中VARTYPE 值如下

typedef enum  {     VT_EMPTY           = 0,     VT_NULL            = 1,     VT_I2              = 2,     VT_I4              = 3,     VT_BOOL            = 11,     VT_VARIANT         = 12,     VT_I1              = 16,     VT_UI1             = 17,     VT_UI2             = 18,     VT_UI4             = 19,     VT_I8              = 20,     VT_UI8             = 21,     VT_LPWSTR          = 31,     VT_BLOB            = 65,     VT_CLSID           = 72,       VT_VECTOR          = 0x1000, } VARENUM;
下面是VARIANT的定义:
typedef struct tagVARIANT {  union {    struct {      VARTYPE vt;      WORD    wReserved1;      WORD    wReserved2;      WORD    wReserved3;      union {        LONGLONG     llVal;        LONG         lVal;        BYTE         bVal;        SHORT        iVal;        FLOAT        fltVal;        DOUBLE       dblVal;        VARIANT_BOOL boolVal;        VARIANT_BOOL __OBSOLETE__VARIANT_BOOL;        SCODE        scode;        CY           cyVal;        DATE         date;        BSTR         bstrVal;        IUnknown     *punkVal;        IDispatch    *pdispVal;        SAFEARRAY    *parray;        BYTE         *pbVal;        SHORT        *piVal;        LONG         *plVal;        LONGLONG     *pllVal;        FLOAT        *pfltVal;        DOUBLE       *pdblVal;        VARIANT_BOOL *pboolVal;        VARIANT_BOOL *__OBSOLETE__VARIANT_PBOOL;        SCODE        *pscode;        CY           *pcyVal;        DATE         *pdate;        BSTR         *pbstrVal;        IUnknown     **ppunkVal;        IDispatch    **ppdispVal;        SAFEARRAY    **pparray;        VARIANT      *pvarVal;        PVOID        byref;        CHAR         cVal;        USHORT       uiVal;        ULONG        ulVal;        ULONGLONG    ullVal;        INT          intVal;        UINT         uintVal;        DECIMAL      *pdecVal;        CHAR         *pcVal;        USHORT       *puiVal;        ULONG        *pulVal;        ULONGLONG    *pullVal;        INT          *pintVal;        UINT         *puintVal;        struct {          PVOID       pvRecord;          IRecordInfo *pRecInfo;        } __VARIANT_NAME_4;      } __VARIANT_NAME_3;    } __VARIANT_NAME_2;    DECIMAL decVal;  } __VARIANT_NAME_1;} VARIANT;

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表