飘云阁安全论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 956|回复: 6

[macOS] 两行代码搞定myBase Desktop Ver735 [macOS + Linux]

  [复制链接]
  • TA的每日心情
    无聊
    2021-5-24 15:55
  • 签到天数: 87 天

    [LV.6]常住居民II

    发表于 2020-12-22 00:01:53 | 显示全部楼层 |阅读模式
    本帖最后由 echowxsy 于 2020-12-22 00:01 编辑

    以 Linux 为例(懒得再加载一次macOS版的了)
    首先把程序拖入 Hopper Disassembler,搜索注册框的提示字符串:
    search string.png
    这里有个小tips:mybase对所有的按钮提示文字进行了混淆,搜license之类的很难定位。
    通过查找引用就能找到注册窗体的代码:
    register.png
    再往上找就能找到注册逻辑,代码如下:
    [Objective-C] 纯文本查看 复制代码
    int sub_5c6ba0(int arg0, int arg1, int arg2, int arg3, int arg4) {    //省略代码
        rax = sub_555bb0(&var_D8, arg0, arg2, arg3, arg4); //唤起注册窗口,获得用户名和code
        if (QDialog::exec() != 0x0) {
                //省略代码
                rax = sub_590eb0(0xb04ae0, &stack[-616], &var_258);//校验
                if (rax != 0x0) {
                  //成功逻辑
                }
                else {
                  //失败逻辑
                }
        }
        rax = QDialog::~QDialog();//提示窗口
        return rax;
    }
    

    现在进入sub_590eb0,看看校验逻辑的实现:
    [Objective-C] 纯文本查看 复制代码
    int sub_590eb0(int arg0, int arg1, int arg2) {
      //省略代码
      //长度判断
      //格式检查
      //新版本的key "1-CA……"
      rax = sub_5762a0(&var_48, rbx, r12);//检测算法
      r13 = 0x1;
      if (rax == 0x0) {
        //旧版本的key "1-15……"
        rax = sub_5762a0(&var_58, rbx, r12);//检测算法
        r13 = rax;
        //旧版处理代码省略
      }
      if (r13 != 0x0) {
        //正确的逻辑省略
        rax = 0x1;
      } else {
        rax = 0x0;
      }
      return rax;
    }
    

    在这里我犯了个小聪明,直接修改返回值为0x1,在注册的时候任意字符会提示成功,但是关于界面还是试用。说明校验的地方不止一处。
    所以我们要更深入一点,再深入一点,进入sub_5762a0里面,查看一下sub_5762a0的引用:
    校验算法.png
    大致浏览了一下,校验都用了这个函数,所以我们对这个动手就可以了。
    asm.png
    在这里我们直接让程序ret并在这之前把eax设置为0x1,修改结果如图:
    修改.png
    这里有个细节,为了保证堆栈平衡,保留了sub rsp, 0x68和add rsp, 0x68,理论上同时去掉这两个应该也没有问题,这块我不是很懂,还需要学习一个。
    到这里,如果你的Hopper像我一样,就可以 File > Produce New Executable... 生成修改后的程序。
    hopper.png
    没有也没关系,我们看十六进制模式:
    修改代码.png
    注意两点:字节值 和 offset
    用这两行代码写修改脚本:
    [Bash shell] 纯文本查看 复制代码
    printf  '\xB8\x01\x00\x00\x00' | dd seek=$((0x1762ac)) conv=notrunc bs=1 of=./myBase
    printf  '\xE9\x5B\x01\x00\x00' | dd seek=$((0x1762b1)) conv=notrunc bs=1 of=./myBase
    printf  '\xC0' | dd seek=$((0x176416)) conv=notrunc bs=1 of=./myBase
    

    啊,为了直观我分成了三段,请不要介意。
    同样,macOS下的修改代码:
    [Bash shell] 纯文本查看 复制代码
    printf  '\xE9\x57\x01\x00\x00\x00' | dd seek=$((0x19b631)) conv=notrunc bs=1 of=/Applications/myBase.app/Contents/MacOS/myBase
    printf  '\xB0\x01' | dd seek=$((0x19b78d)) conv=notrunc bs=1 of=/Applications/myBase.app/Contents/MacOS/myBase
    

    解释一下代码:printf '\xXX' 是生成16进制的数据,seek是文件的offset,of是输出文件
    最终效果:
    成品.png




    评分

    参与人数 7威望 +11 飘云币 +11 收起 理由
    tree_fly + 5 + 5 PYG有你更精彩!
    bluesky10 + 1 + 1 万水千山总是情,给个评分最贴心!
    天玄 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    wgz001 + 1 + 1 原创精品 感谢分享!
    精灵墙 + 1 + 1 PYG有你更精彩!
    不破不立 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    egaokiss + 1 + 1 PYG有你更精彩!

    查看全部评分

  • TA的每日心情
    奋斗
    9 小时前
  • 签到天数: 1577 天

    [LV.Master]伴坛终老

    发表于 2020-12-22 08:19:41 | 显示全部楼层
    感谢分享,您辛苦了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 1262 天

    [LV.10]以坛为家III

    发表于 2020-12-22 09:21:12 | 显示全部楼层
    Hopper 是亮点
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 697 天

    [LV.9]以坛为家II

    发表于 2020-12-22 10:10:48 | 显示全部楼层
    半夜发帖。支持支持。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 184 天

    [LV.7]常住居民III

    发表于 2020-12-22 16:09:16 | 显示全部楼层
    看完之后虎躯一震茅塞顿开,感谢楼主
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    前天 21:33
  • 签到天数: 437 天

    [LV.9]以坛为家II

    发表于 2020-12-22 21:44:08 | 显示全部楼层
    大表哥优秀 虽然看不懂 但是我会默默支持 的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2021-3-4 18:03:24 | 显示全部楼层
    Hopper 是亮点
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 快速注册

    本版积分规则

    关闭

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

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