欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

通过逆向工程破解Sublime Text 3

来源:本站整理 作者:佚名 时间:2017-01-10 TAG: 我要投稿

注:本文并不支持盗版行为,本文的目的仅仅在于学习交流,反编译和破解软件在大多数情况下都是非法的!
OS X的原生软件是由Objective-C语言(C语言的超集,并不难以hack掉)编写的,在本文中,我将尽可能地演示在该平台下的逆向工程基础。
目标

我们的目标是阻止Sublime Text时不时提醒购买授权的烦人的弹框(当然,如果你想要使用,那你应该去购买)。我将使用目前的最新版Sbulime Text 3114(OS X 64-bit)进行演示。为了反编译以及打补丁,我将使用Hopper——一款提供类C伪代码的Mach0和ELF可执行程序的反编译器。
必要条件
基础的软件开发经验
基础的汇编知识
基础的C知识
开始入手
第一次打开反汇编后的二进制文件时,看起来有点吓人,这里有成吨的代码,而且还是不易于阅读的那种,因此我们需要寻找一个入手点。字符串是一个很好的入手点,因为它们在二进制文件中以ASCII明文形式存在。
在本次案例中,这是一个很棒的思路,因为我们正在做的就是要组织某个字符串的显示。因此,我们将通过Hopper的内建字符串搜索功能来搜索在弹窗中包含的字符串开始做起。

字符串在0x0000000100480a36中被找到,且只被0x0000000100072ad0用到。如果你跳转到该地址,你会发现自己处于一个asm程序片段中。此程序片段就是我们要找的弹框程序片段,因为该程序片段是唯一用到弹框中字符串的。为了更好地理解该程序片段做了什么,我们将使用Hopper的将asm转为伪代码的内建功能。
int maybe_show_nag_screen()() { 
    if (*(int8_t *)_g_valid_license == 0x0) {
            rax = time_now_milliseconds();
            rbx = rax;
            rax = rax - *maybe_show_nag_screen()::last_show_time;            if (rax >= 0xa4cb80) {
                    *(int32_t *)maybe_show_nag_screen()::count_since_last_nag = *(int32_t *)maybe_show_nag_screen()::count_since_last_nag + 0x1;
                    rax = rand();
                    rax = (rax & 0xf) == 0x0 ? 0x1 : 0x0;
                    rdx = *(int32_t *)maybe_show_nag_screen()::count_since_last_nag;
                    rcx = rdx
                            rax = rax & rcx;
                            COND = rax == 0x0;                            if (!COND) {
                                    *(int32_t *)maybe_show_nag_screen()::count_since_last_nag = 0x0;
                                    *maybe_show_nag_screen()::last_show_time = rbx;
                                    rax = px_show_message_ok_cancel(0x0, "Hello! Thanks for trying out Sublime Text.\n\nThis is an unregistered evaluation version, and although the trial is untimed, a license must be purchased for continued use.\n\nWould you like to purchase a license now?", "This is an unregistered copy", "Purchase");                                    if (rax != 0x0) {
                                            rax = px_open_url("https://www.sublimetext.com/buy");

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载