飘云阁(PYG官方)

 找回密码
 加入论坛

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 285|回复: 3

[macOS] 国庆献礼---Mac上最强大的防火墙HandsOff!静态分析笔记

[复制链接]
  • TA的每日心情
    开心
    昨天 01:13
  • 签到天数: 107 天

    [LV.6]常住居民II

    发表于 2019-10-1 19:29:32 | 显示全部楼层 |阅读模式
    本帖最后由 zyjsuper 于 2019-10-1 19:35 编辑

    这款软件之前也分析过,但一直都没有得到想要的结果,本文也是仓促成文,没有经过验证,希望测试过的朋友给个回复。有错误之处望见谅。
    破解使用到的工具为Hopper Disassember v4,IDA和radare不方便修改签名,Mac上觉得Hopper最好用。
    1. 打开HandsOff!会提示Demo版具备和完整版本同样都功能,只是每隔四个小时关闭5分钟,如图所示:



    2. HandsOff!打开4个小时以后,会提示"Demo has ended..."
    搜索此字符串,发现出现在文件"/Library/Handsoff/HandsOffAgent.app/Contents/MacOS/HandsOffAgent"中。
    如图所示位置,将"je"改成"jmp",即可跳过"Demo has ended..."


    3. 再使用一段时间之后,软件又会出现另外一个提示:"Your evaluation time for Hands Off! has expired......",修改如图所示,即可跳过判断。


    4. 用IDA找到疑似算法部分的代码如下,小菜目前只会爆破,望大神赐教。
    [Asm] 纯文本查看 复制代码
    __int64 __fastcall sub_100009973(__int64 a1, __int64 a2, void *a3, void *a4)
    {
      void *v4; // rbx
      void *v5; // r15
      __int64 v6; // r12
      __int64 v7; // r14
      void *v8; // rax
      void *v9; // rax
      void *v10; // r13
      void *v11; // rax
      void *v12; // r13
      char *v13; // rax
      void *v14; // r14
      void *v15; // rax
      void *v16; // r14
      const char *v17; // rax
      __int64 v18; // r14
      unsigned int v19; // eax
      __int64 v20; // r12
      __int128 v22; // [rsp+20h] [rbp-40h]
     
      v4 = a4;
      v5 = a3;
      v6 = a2;
      v7 = a1;
      if ( a3 )
      {
        if ( a4 )
        {
          if ( (unsigned __int8)objc_msgSend(a4, "isEqual:", CFSTR("User-Agent")) )
          {
            v8 = objc_msgSend(
                   &OBJC_CLASS___NSDictionary,
                   "dictionaryWithContentsOfFile:",
                   CFSTR("/Library/Handsoff/Preferences.plist"));
            if ( v8 )
            {
              v9 = objc_msgSend(v8, "objectForKey:", CFSTR("a_serials"));
              if ( v9 )
              {
                v10 = v9;
                if ( objc_msgSend(v9, "count") )
                {
                  v11 = objc_msgSend(v10, "objectAtIndex:", 0LL);
                  v12 = v11;
                  v13 = (char *)objc_msgSend(v11, "rangeOfString:", CFSTR("HDOF1-"));    //序列号以HDOF1-,HDOF2-,HDOF3-,HDOF4-开头
                  if ( v13 != (char *)0x7FFFFFFFFFFFFFFFLL
                    || (v13 = (char *)objc_msgSend(v12, "rangeOfString:", CFSTR("HDOF2-")),
                        v13 != (char *)0x7FFFFFFFFFFFFFFFLL)
                    || (v13 = (char *)objc_msgSend(v12, "rangeOfString:", CFSTR("HDOF3-")),
                        v13 != (char *)0x7FFFFFFFFFFFFFFFLL)
                    || (v13 = (char *)objc_msgSend(v12, "rangeOfString:", CFSTR("HDOF4-")),
                        v13 != (char *)0x7FFFFFFFFFFFFFFFLL) )
                  {
                    v14 = objc_msgSend(v12, "substringFromIndex:", v13 + 6);              //从序列号第六位开始取字符串值赋值给v14
                    v15 = objc_msgSend(&OBJC_CLASS___NSCharacterSet, "whitespaceCharacterSet");  
                    v16 = objc_msgSend(v14, "stringByTrimmingCharactersInSet:", v15);     //去掉字符串中除数字以外的字符赋值给v16
                    if ( objc_msgSend(v16, "length") )                                    //取v16的长度
                    {
                      v17 = (const char *)objc_msgSend(v16, "UTF8String");                //将v16的unicode值赋值给v17
                      v18 = (__int64)v17;                                                 //将v17转换成整形
                      v22 = 0LL;              
                      v19 = strlen(v17);                                                 //取v17的长度
                      CC_MD5(v18, v19, (__int64)&v22);                                   //CC_MD5(v18,v19,0)
                      v5 = objc_msgSend(&OBJC_CLASS___NSMutableString, "stringWithString:", v5);   
                      objc_msgSend(v5, "appendString:", CFSTR(" ["));
                      v20 = 0LL;
                      do
                        objc_msgSend(v5, "appendFormat:", CFSTR("%02X"), *((unsigned __int8 *)&v22 + v20++));
                      while ( v20 != 16 );
                      objc_msgSend(v5, "appendString:", CFSTR("]"));
                      v6 = a2;
                    }
                  }
                  v7 = a1;
                }
              }
            }
          }
        }
      }
      qword_100055570(v7, v6, v5, v4);
      return __stack_chk_guard;
    }


    在祖国母亲70华诞之际,祝国家繁荣富强,国泰民安。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?加入论坛

    x

    评分

    参与人数 1威望 +1 飘云币 +1 收起 理由
    飞天 + 1 + 1 PYG有你更精彩!

    查看全部评分

  • TA的每日心情
    开心
    昨天 06:32
  • 签到天数: 941 天

    [LV.10]以坛为家III

    发表于 2019-10-2 08:47:41 | 显示全部楼层
    支持分享过程,留个脚印。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 09:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    发表于 2019-10-2 10:13:52 | 显示全部楼层
    支持分享过程,感谢大神无私奉献
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 147 天

    [LV.7]常住居民III

    发表于 2019-10-2 12:28:01 | 显示全部楼层
    溜溜溜~~  感谢分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入论坛

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

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