欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

去FLEXLM/NET ECC标志,强行12位SIGN验证

去FLEXLM/NET ECC标志,强行12位SIGN验证

#define LM_PUBKEYS    3
#define LM_MAXPUBKEYSIZ    40
#define LM_MAXSIGNS    4   /* SIGN=, SIGN2=, SIGN3=, SIGN4= */
#define LM_MAX_BEH_VER    4 
typedef struct _pubkeyinfo 
  {
    int pubkeysize[LM_PUBKEYS];
    unsigned char pubkey[LM_PUBKEYS][LM_MAXPUBKEYSIZ];
    int (*pubkey_fptr)();
    int strength;
    int sign_level;
  } LM_VENDORCODE_PUBKEYINFO;
typedef struct _vendorcode 
  {
    short type;     
    unsigned long data[2];
    unsigned long keys[4];
    short flexlm_version;
    short flexlm_revision;
    char flexlm_patch[2];
    char behavior_ver[LM_MAX_BEH_VER + 1];
    unsigned long trlkeys[2];
    int signs;
    int strength;
    int sign_level;
    LM_VENDORCODE_PUBKEYINFO pubkeyinfo[LM_MAXSIGNS];
  } VENDORCODE;
....................
static unsigned int l_2078index = 16; //0x10, 静态存储
....................
Static int l_n36_buf
  (
    char *buf;
    VENDORCODE *v;
    unsigned int l_buf_13;
    unsigned char *l_ctr_17;
    unsigned int l_8indexes;
    unsigned int *l_18index;
    char *buf2
  );
{
   ......................
  //第一处Flag的位置
  if (l_18index) *l_18index = 1; 
   .............................
  //第二处Flag的位置
  if (l_4counters == 0) v->pubkeyinfo[0].pubkeysize[0] += (l_2078index << 0); 
   ................................
}
对应如下近似代码(每个程序有差别):
第一处Flag的位置
cmp     [ebp+arg_14], 0
jz      short loc_xxxx
mov     eax, [ebp+arg_14]
mov     dword ptr [eax], 1 //有的程序为2
第二处Flag的位置
cmp     ds:?l_4counters@?1??l_counters_1@@9@9, 0 ; `l_counters_1'::`2'::l_4counters
jnz     short loc_xxxx
mov     eax, [ebp+Dst]
mov     ecx, [eax+3Ch]
add     ecx, _l_2078index //找到静态存储位置:0x10-->0x00
mov     edx, [ebp+Dst]
mov     [edx+3Ch], ecx

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功