美文网首页
macOS软件逆向练习 - CrackMe#2

macOS软件逆向练习 - CrackMe#2

作者: h080294 | 来源:发表于2018-09-13 11:17 被阅读33次

    今天继续跟着tree_fly大神写的Hopper系列的视频,学习第二章节的内容。

    CrackMe样本是在 http://reverse.put.as/crackmes/ 上下载的,本文练习使用的是MSJ2009#2.zip
    (SHA1(MSJ2009#2.zip)= 47685aab5f43c064e4b24903f868df1100461ed7)

    一、试用

    打开软件,要求输入用户名、邮箱和序列号。

    二、分析软件

    跟上一篇文章类似,通过关键词或关键方法,我们来到verifyRegistration

    首先判断了字符串是否为空,不为空进入下一个isValid判断

    这里截取了字符串的index 4和index 9的值并和0x2d比较。通过查表发现0x2d是一个短横线,那么就是字符串的第5位和第10位需要是“-”符号。

    那么这里取的是哪个字符串可以通过调试看一看。

    三、反调试

    当我们在进行调试的发现,调试起不来,因此程序存在反调试的代码。从入口开始看,最后发现在main中有ptrace检测,这是一个很常见的反调试方法。

    来到汇编代码,把这一行nop掉即可。

    之后运行调试,可以发现程序已经能被成功调试了。

    四、动态调试

    继续分析上面的isValid函数,前面我们不清楚获取的是哪个字符串的值,因此在这里下个断点,运行调试。

    输入一些内容进去,然后点击注册。

    看一下具体的eax值,调试窗口中输入po $eax

    这里的eax值跟我们输入的序列号是一致的,也就是说序列号的第5位和第10位需要是“-”,即格式为xxxx-xxxx-xxxx。

    五、校验算法

    pass掉上面后,我们来到最终的校验逻辑的地方。

    首先是判断arg_8的长度为0xe(14位),arg_10的长度大于3。改变一下序列号的输入内容,加上“-”符号。

    接下来还是用调试的方法,先下断点,然后查看到arg_8是序列号的值,因此也就确定了序列号为14位。(上面输入时不小心蒙对位数了)

    点击这个按钮可以直接运行至当前选中的行

    还是老方法,查看arg_10为邮箱的值,也就是邮箱的长度需要大于3。

    接下来看第一个循环,逻辑上并不复杂,我们尝试通过调试获取到该值-v24。

    第一串值为:1264

    同理看第二个循环,能得到第二串的值:6416

    最后我们可以看到,分别判断了var_24, var_38, var_34的值。这里的substringWithRange仍然是有点问题,需要到IDA里查看。但我们直接通过调试的方法获得。

    调试后,获取到的第三串值为:6434

    所以最终得到的序列号为1264-6416-6434,带入原程序试验一下。

    关注微信订阅号获取更多

    相关文章

      网友评论

          本文标题:macOS软件逆向练习 - CrackMe#2

          本文链接:https://www.haomeiwen.com/subject/qfrbgftx.html