SkySafari函数破解

IDA反汇编:libskychart.so

目录参数——
StarClusterNumber(char const*)
MessierNumber(char const*)
CaldwellNumber(char const*)
NGCNumber(char const*)
ICNumber(char const*)
LBNNumber(char const*)
BarnardNumber(char const*)
LDNNumber(char const*)
PKNumber(char const*)
PNGNumber(char const*)
UGCNumber(char const*)
UGCANumber(char const*)
PGCNumber(char const*)
MCGNumber(char const*)
CGCGNumber(char const*)
ESONumber(char const*)
ESOLVNumber(char const*)
IRASNumber(char const*)
ArpNumber(char const*)
AbellNumber(char const*)
HicksonNumber(char const*)
VVNumber(char const*)
MarkarianNumber(char const*)
ArakelianNumber(char const*)
QuasarNumber(char const*)
DoubleStarNumber(char const*)

AllenNumber(char const*)
BlancoNumber(char const*)
CederbladNumber(char const*)
DarkNebulaNumber(int,char const*)
TerzanNumber(char const*)
NebulaNumber(char const*)
BayerLetterToNumber(char const*,int)
BayerSymbolToNumber(char const*)
VariableStarLetterToNumber(char )
ConstellNumber(char )
BayerNumber(char const
)
VariableStarNumber(char const
)
FlamsteedNumber(char const*)
HRNumber(char const*)
HDNumber(char const*)
SAONumber(char const*)
BDNumber(char const*)
CoDNumber(char const*)
CPDNumber(char const*)
GSCNumber(char const*)
GSCIINumber(char const*,uint )
HIPNumber(char const
)
TYCNumber(char const*)
LuytenNumber(char const*)
LPNumber(char const*)
LTTNumber(char const*)
LHSNumber(char const*)
GiclasNumber(char const*)
GJNumber(char const*)
ADSNumber(char const*)
WDSNumber(char const*)

signed int __fastcall StringToDeepSkyCatalogNumbers
(const char *a1, int a2, unsigned int *a3, int a4)
{
  int v4; // r6
  const char *v5; // r9
  signed int v6; // r4
  const char *v7; // r2
  int v8; // r3
  int v9; // t1
  int v10; // r3
  int v11; // r3
  bool v12; // zf
  int v13; // r3
  bool v14; // r10
  signed int v15; // r12
  signed int v16; // r3
  signed int v17; // r5
  int v18; // r3
  int v19; // r10
  _BOOL4 v20; // r3
  _BOOL4 v21; // r10
  _BOOL4 v22; // r3
  bool v24; // zf
  bool v25; // nf
  unsigned __int8 v26; // vf
  unsigned int v27; // r0
  unsigned int v28; // r0
  unsigned int v29; // r0
  unsigned int v30; // r0
  unsigned int v31; // r0
  unsigned int v32; // r0
  unsigned int v33; // r0
  unsigned int v34; // r0
  int v35; // r4
  unsigned int v36; // r3
  bool v37; // cf
  bool v38; // zf
  int v39; // r3
  unsigned int v40; // r0
  unsigned int v41; // r0
  unsigned int v42; // r0
  unsigned int v43; // r0
  unsigned int v44; // r0
  unsigned int v45; // r0
  unsigned int v46; // r0
  unsigned int v47; // r0
  unsigned int v48; // r0
  unsigned int v49; // r0
  unsigned int v50; // r0
  unsigned int v51; // r0
  unsigned int v52; // r0
  unsigned int v53; // r0
  unsigned int v54; // r0
  unsigned int v55; // r0
  unsigned int v56; // r0
  unsigned int v57; // r0
  unsigned int v58; // r0
  unsigned int v59; // r0
  unsigned int v60; // r0
  unsigned int v61; // r0
  unsigned int v62; // r0
  unsigned int v63; // r0
  signed int v64; // [sp+0h] [bp-144h]
  signed int v65; // [sp+4h] [bp-140h]
  unsigned int v66; // [sp+Ch] [bp-138h]
  unsigned int *v67; // [sp+10h] [bp-134h]
  char s; // [sp+1Ch] [bp-128h]
  char v69[36]; // [sp+120h] [bp-24h]

  v66 = a2;
  v4 = a4;
  v67 = a3;
  v5 = a1;
  memset(&s, 0, 0x100u);
  strlcpy(&s, v5, 256);
  v6 = *(unsigned __int8 *)v5;
  if ( *v5 )
  {
    if ( (unsigned int)(v6 - 48) <= 9 )
    {
      v10 = -1;
      v6 = 0;
    }
    else
    {
      v7 = v5;
      v6 = 0;
      do
      {
        v9 = *((unsigned __int8 *)v7++ + 1);
        v8 = v9;
        ++v6;
      }
      while ( v9 && (unsigned int)(v8 - 48) > 9 );
      v10 = v6 - 1;
    }
  }
  else
  {
    v10 = -1;
  }
  v11 = v5[v10];
  v12 = v11 == 43;
  if ( v11 != 43 )
    v12 = v11 == 45;
  if ( v12 )
    --v6;
  if ( v6 > 0 )
  {
    v13 = (int)&v5[v6];
    if ( v5[v6 - 1] == 32 )
    {
      while ( --v6 )
      {
        if ( *(_BYTE *)(--v13 - 1) != 32 )
          goto LABEL_44;
      }
      v14 = 0;
      s = 0;
      goto LABEL_17;
    }
  }
LABEL_44:
  v14 = v6 > 1;
  v26 = 0;
  v24 = v4 == 0;
  v25 = v4 < 0;
  if ( v4 > 0 )
  {
    v26 = __OFSUB__(v6, 1);
    v24 = v6 == 1;
    v25 = v6 - 1 < 0;
  }
  v69[v6 - 260] = 0;
  if ( (unsigned __int8)(v25 ^ v26) | v24 || StringCompareProc(&s, "Messier", v6, dword_6EF208) )
  {
LABEL_17:
    v15 = 0;
    v16 = 1;
    v17 = 0;
    goto LABEL_18;
  }
  v27 = MessierNumber(&v5[v6]);
  if ( !v27 )
  {
    v15 = 0;
    v65 = 1;
    v17 = 0;
    goto LABEL_175;
  }
  v15 = 4;
  v16 = 2;
  v17 = 1;
  *v67 = v27;
LABEL_18:
  if ( v17 >= v4 )
    goto LABEL_19;
  v65 = v16;
LABEL_175:
  v64 = v15;
  if ( !StringCompareProc(&s, "M", 0, dword_6EF208) )
  {
    v62 = MessierNumber(&v5[v6]);
    if ( v62 )
    {
      v17 = v65;
      *(unsigned int *)((char *)v67 + v64) = v62;
    }
  }
LABEL_19:
  if ( v17 < v4 )
    v18 = v14;
  else
    v18 = 0;
  if ( !v18 || StringCompareProc(&s, "Caldwell", v6, dword_6EF208) )
  {
    if ( v17 >= v4 )
      goto LABEL_24;
  }
  else
  {
    v42 = CaldwellNumber(&v5[v6]);
    if ( v42 )
    {
      v67[v17++] = v42;
      if ( v17 >= v4 )
        goto LABEL_24;
    }
  }
  if ( !StringCompareProc(&s, "C", 0, dword_6EF208) )
  {
    v43 = CaldwellNumber(&v5[v6]);
    if ( !v43 )
      goto LABEL_104;
    v67[v17++] = v43;
  }
  if ( v17 >= v4 )
    goto LABEL_24;
LABEL_104:
  if ( !StringCompareProc(&s, "NGC", 0, dword_6EF208) )
  {
    v44 = NGCNumber(&v5[v6]);
    if ( !v44 )
      goto LABEL_108;
    v67[v17++] = v44;
  }
  if ( v17 >= v4 )
    goto LABEL_24;
LABEL_108:
  if ( StringCompareProc(&s, "IC", 0, dword_6EF208) )
    goto LABEL_111;
  v45 = ICNumber(&v5[v6]);
  if ( v45 )
  {
    v67[v17++] = v45;
LABEL_111:
    if ( v17 >= v4 )
      goto LABEL_24;
  }
  if ( !StringCompareProc(&s, "LBN", 0, dword_6EF208) )
  {
    v46 = LBNNumber(&v5[v6]);
    if ( v46 )
      v67[v17++] = v46;
  }
LABEL_24:
  if ( v17 < v4 )
    v19 = v14;
  else
    v19 = 0;
  if ( !v19 || StringCompareProc(&s, "Barnard", v6, dword_6EF208) )
  {
    if ( v17 >= v4 )
      goto LABEL_29;
  }
  else
  {
    v49 = BarnardNumber(&v5[v6]);
    if ( v49 )
    {
      v67[v17++] = v49;
      if ( v17 >= v4 )
        goto LABEL_29;
    }
  }
  if ( !StringCompareProc(&s, "B", 0, dword_6EF208) )
  {
    v50 = BarnardNumber(&v5[v6]);
    if ( !v50 )
      goto LABEL_130;
    v67[v17++] = v50;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_130:
  if ( !StringCompareProc(&s, "LDN", 0, dword_6EF208) )
  {
    v51 = LDNNumber(&v5[v6]);
    if ( !v51 )
      goto LABEL_134;
    v67[v17++] = v51;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_134:
  if ( !StringCompareProc(&s, "PNG", 0, dword_6EF208) )
  {
    v52 = PNGNumber(&v5[v6]);
    if ( !v52 )
      goto LABEL_138;
    v67[v17++] = v52;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_138:
  if ( !StringCompareProc(&s, "PN G", 0, dword_6EF208) )
  {
    v53 = PNGNumber(&v5[v6]);
    if ( !v53 )
      goto LABEL_142;
    v67[v17++] = v53;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_142:
  if ( !StringCompareProc(&s, "PK", 0, dword_6EF208) )
  {
    v54 = PKNumber(&v5[v6]);
    if ( !v54 )
      goto LABEL_146;
    v67[v17++] = v54;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_146:
  if ( !StringCompareProc(&s, "UGC", 0, dword_6EF208) )
  {
    v55 = UGCNumber(&v5[v6]);
    if ( !v55 )
      goto LABEL_150;
    v67[v17++] = v55;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_150:
  if ( !StringCompareProc(&s, "UGCA", 0, dword_6EF208) )
  {
    v56 = UGCANumber(&v5[v6]);
    if ( !v56 )
      goto LABEL_154;
    v67[v17++] = v56;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_154:
  if ( !StringCompareProc(&s, "PGC", 0, dword_6EF208) )
  {
    v57 = PGCNumber(&v5[v6]);
    if ( !v57 )
      goto LABEL_158;
    v67[v17++] = v57;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_158:
  if ( !StringCompareProc(&s, "Arp", 0, dword_6EF208) )
  {
    v58 = ArpNumber(&v5[v6]);
    if ( !v58 )
      goto LABEL_162;
    v67[v17++] = v58;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_162:
  if ( !StringCompareProc(&s, "Abell", 0, dword_6EF208) )
  {
    v59 = AbellNumber(&v5[v6]);
    if ( !v59 )
      goto LABEL_166;
    v67[v17++] = v59;
  }
  if ( v17 >= v4 )
    goto LABEL_29;
LABEL_166:
  if ( StringCompareProc(&s, "Hickson", 0, dword_6EF208) )
    goto LABEL_169;
  v60 = HicksonNumber(&v5[v6]);
  if ( v60 )
  {
    v67[v17++] = v60;
LABEL_169:
    if ( v17 >= v4 )
      goto LABEL_29;
  }
  if ( !StringCompareProc(&s, "HCG", 0, dword_6EF208) )
  {
    v61 = HicksonNumber(&v5[v6]);
    if ( v61 )
      v67[v17++] = v61;
  }
LABEL_29:
  if ( v17 < v4 )
    v20 = v6 > 2;
  else
    v20 = 0;
  if ( !v20 || StringCompareProc(&s, "Markarian", v6, dword_6EF208) )
  {
    if ( v17 >= v4 )
      goto LABEL_34;
  }
  else
  {
    v47 = MarkarianNumber(&v5[v6]);
    if ( v47 )
    {
      v67[v17++] = v47;
      if ( v17 >= v4 )
        goto LABEL_34;
    }
  }
  if ( !StringCompareProc(&s, "Mk", 0, dword_6EF208) )
  {
    v48 = MarkarianNumber(&v5[v6]);
    if ( v48 )
      v67[v17++] = v48;
  }
LABEL_34:
  if ( v17 < v4 )
    v21 = v6 > 2;
  else
    v21 = 0;
  if ( !v21 || StringCompareProc(&s, "Velyaminov-Vorontosov", v6, dword_6EF208) )
  {
    if ( v17 >= v4 )
      goto LABEL_39;
  }
  else
  {
    v40 = VVNumber(&v5[v6]);
    if ( v40 )
    {
      v67[v17++] = v40;
      if ( v17 >= v4 )
        goto LABEL_39;
    }
  }
  if ( !StringCompareProc(&s, "VV", 0, dword_6EF208) )
  {
    v41 = VVNumber(&v5[v6]);
    if ( v41 )
      v67[v17++] = v41;
  }
LABEL_39:
  v22 = v17 < v4;
  if ( v6 <= 4 )
    v22 = 0;
  if ( !v22 || StringCompareProc(&s, "Arakelian", v6, dword_6EF208) )
  {
    if ( v17 >= v4 )
      return v17;
  }
  else
  {
    v28 = ArakelianNumber(&v5[v6]);
    if ( v28 )
    {
      v67[v17++] = v28;
      if ( v17 >= v4 )
        return v17;
    }
  }
  if ( !StringCompareProc(&s, "Arak", 0, dword_6EF208) )
  {
    v29 = ArakelianNumber(&v5[v6]);
    if ( !v29 )
      goto LABEL_57;
    v67[v17++] = v29;
  }
  if ( v17 >= v4 )
    return v17;
LABEL_57:
  if ( !StringCompareProc(&s, "IRAS", 0, dword_6EF208) )
  {
    v30 = IRASNumber(&v5[v6]);
    if ( !v30 )
      goto LABEL_61;
    v67[v17++] = v30;
  }
  if ( v17 >= v4 )
    return v17;
LABEL_61:
  if ( !StringCompareProc(&s, "ESO-LV", 0, dword_6EF208) )
  {
    v31 = ESOLVNumber(&v5[v6]);
    if ( !v31 )
      goto LABEL_65;
    v67[v17++] = v31;
  }
  if ( v17 >= v4 )
    return v17;
LABEL_65:
  if ( !StringCompareProc(&s, "ESO", 0, dword_6EF208) )
  {
    v32 = ESONumber(&v5[v6]);
    if ( !v32 )
      goto LABEL_69;
    v67[v17++] = v32;
  }
  if ( v17 >= v4 )
    return v17;
LABEL_69:
  if ( !StringCompareProc(&s, "CGCG", 0, dword_6EF208) )
  {
    v33 = CGCGNumber(&v5[v6]);
    if ( !v33 )
      goto LABEL_73;
    v67[v17++] = v33;
  }
  if ( v17 >= v4 )
    return v17;
LABEL_73:
  if ( !StringCompareProc(&s, "MCG", 0, dword_6EF208) )
  {
    v34 = MCGNumber(&v5[v6]);
    if ( !v34 )
      goto LABEL_77;
    v67[v17++] = v34;
  }
  if ( v17 >= v4 )
    return v17;
LABEL_77:
  if ( StringCompareProc(v5, "3C", 2, dword_6EF208) )
    goto LABEL_78;
  v63 = QuasarNumber(v5 + 2);
  if ( v63 )
  {
    v67[v17++] = v63;
LABEL_78:
    if ( v17 >= v4 )
      return v17;
  }
  v35 = 1 - v66;
  v36 = v66 - 10;
  if ( v66 > 1 )
    v35 = 0;
  v37 = 1;
  v38 = v66 == 0;
  if ( v66 )
  {
    v37 = v36 >= 2;
    v38 = v36 == 2;
  }
  if ( !v38 && v37 || (v17 += StarClusterNumbers(v5, &v67[v17], v4 - v17), v4 > v17) )
  {
    if ( v66 - 13 <= 2 )
      v39 = v35 | 1;
    else
      v39 = v35;
    if ( v39 )
      v17 += NebulaNumbers(v5, &v67[v17], v4 - v17);
  }
  return v17;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值