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

macOS软件逆向练习 - CrackMe#1

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

    今天无意在油管上看到了tree_fly大神写的Hopper系列的视频,正好自己也在学习,就实践一把。

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

    一、试用

    打开软件,要求输入用户名和序列号,点击注册后提示结果。这里随便输入一些字符。

    二、分析软件

    通常在分析的时候,关键词搜索是最为常用的一种方法。对于这款简单的CrackMe,所有的字符串都是一目了然的,我们在Hoppoer的中string label中查看一下,不难发现用户名和序列号等关键词。

    这里从序列号入手,点击serial定位到string地点(绿色区域表示为string)。然后右键查看引用,来到数据区后,继续查看引用,最终定位到procedure块。

    在这里我们明显看到第三个最为可疑(注册验证),跟进去看。

    来到这里之后,可以简单的看一下反编译的伪代码。

    判断不为空的时候走到else逻辑中,然后有个校验方法validateSerial,通过校验就提示注册成功,反之提示Error。

    在labels中搜索validateSerial,查看Level1 validateSerial:forName:的内容,这里就是校验的具体“算法”了。

    了解了程序的逻辑,接下来就是实践crack的时候了。

    三、暴力修改

    首先采用暴力的手段修改,为了验证这块的逻辑,先调试一下。

    前面定位到了validateSerial:forName,我们在开头push处和结尾ret处分别设置断点,然后调试一下程序。

    等待加载读取完毕后,输入用户名和密码,然后点击注册按钮。就可以看到程序断在了开头的push处。

    接着,点击继续运行,能看到这里的EAX值为0(即false)。

    手动将EAX值改为1,再次点击继续执行。就可以看到程序提示注册成功了。

    到这里,就验证了关键的逻辑。那么其实下面的修改其实也非常容易的,我们让这个方法直接返回1就好了。直接将开头的eax赋值为1,然后return。

    保存为新的可执行文件,替换掉原来的Challenge #1。再次运行,可以发现不用输入用户名和序列号就能直接提示注册成功了。

    四、分析算法破解

    之前我们预览过Level1 validateSerial:forName校验的算法。由于第一次接触该语言,因此特意查了下,发现substringWithRange:这里应该是个range。但可能是Hopper的一点反编译问题,不过没关系,可以祭出IDA。

    打开IDA,等待加载完毕,然后找到Level1 validateSerial:forName:,按fn+F5查看伪代码。

    到这里逻辑就很清晰了,因为没有学习过OC这门语言,只能按照IDA的伪代码写了一个渣渣出来。运行了下John_Hao对应的序列号是66486240。

    打开程序验证一下,完美。

    至此,macOS旅行的第一个CrackMe的分析就结束了。

    关注微信订阅号获取更多

    相关文章

      网友评论

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

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