0

    【原创】music studio pc版由爆破、追码、到注册机的编写

    2023.07.23 | admin | 170次围观

    仅供学术交流研究使用,不得用于非法、商业用途!!

    请支持正版,购买正版以获得新版更新及更好地服务。

    二、软件相关信息

    软件名:sofeh music studio 4551

    软件官网:

    软件类型:win

    软件大小:74.7MB

    下载地址:

    注册方式:请求码(机器码生成),本地注册

    分析方式:动态

    使用软件:吾爱专版 OD(OllyDbg)(下载见爱盘)

    分析人员:涛之雨

    分析环境:WinXp

    鸣谢:感谢@KaQqi大佬抽出宝贵时间进行指导。

    安卓APP版本

    请移步本人的另一篇文章

    Google Play的一款专业电子琴。ORG 2020 汉化 &&破解版

    (出处:吾爱破解论坛)

    三、查壳

    额。。我先说一下吧。。有能力的朋友也可以试验一下脱壳。。。

    KaQqi大佬说,这个软件是:新版enigma的壳。。。我还搞不定。。

    查壳完毕易语言机器码注册机,继续。

    四、分析软件注册流程

    不管破解什么,如何破解,都是至少要对软件注册的流程十分熟悉,

    如果不了解流程就去尝试破解,有可能会误入歧途,然后最终导致放弃。

    流程如图1所示

    Help-Activate the Professional freatures-输入注册码-判断是否成功-错误代码

    (图1)

    五、I D A载入

    因为是加密压缩壳,所以没有分析出什么有效信息,故不附图了,该做的流程还是要有的,以防万一有什么发现。

    六、OD载入

    因为没有检测调试器,可以直接拖入OD调试,或是附加调试。

    这里推荐附加的方法,因为是虚拟壳,直接载入有时有可能会出问题。这里我们附加到调试器。

    如图2所示:右上角文件-附加-选择【music studio】进程-确定。

    (图2)

    因为是附加调试会暂停在系统领空,先按图4所示:

    点运行程序(F9)让程序跑起来,

    点E(快捷键:Alt+E【Modules】,)显示模块列表

    双击Music Studio.exe软件主模块,

    (图3)

    (一)、找关键跳转1、查看代码

    进入软件,发现软件内机器码全部都是00(图4中所示)应该是虚拟化后释放了

    (图4)

    2、搜索字符串

    回到软件的内存里,如图5所示:右键-转到-表达式(快捷键:Ctrl+G)【Goto】-输入00401000

    (图5)

    (注:winxp软件的基址一般都是401000,如果是win7及以上版本的系统则不一定。需要自行点M(快捷键:Alt+M)[memory]查看内存,获取基址。详细教程可以看论坛的教程或是到搜索引擎进行搜索)

    如图6所示,进行右键-中文搜索引擎-智能搜索的操作。

    (图6)

    根据四、分析软件注册流程的结果,需要找到弹窗的call

    由弹窗的信息,可以尝试搜索关键词Error,activation,code,wrong等以定位弹窗的call,从而向上查找关键跳转。

    注:搜索关键词的时候可以稍微减少一点,以防关键词被拆分。

    如图7所示,本人搜索的就是activation,有且仅有一处。上下字符串的内容也是符合该处其他内容的,因此可以初步判断,该处即为弹窗的内容。

    (图7)

    (二)、尝试爆破

    双击改行(或是选中该行后按Enter键),查看该处代码。

    1、分析、猜测

    如图8

    (图8)

    该段代码比较长,因此可以猜测此处上方有判断语句,

    向下观察,发现有一处jmp指令,再次猜测上方有个跳转,可以实现跳过该段错误提示的弹窗。

    向上观察,发现有一处jnz指令,鼠标点击改行指令,根据左侧的引导线箭头可知,恰好跳过了错误弹窗的一段内容。

    猜测该处为关键跳转。

    2、验证猜想

    经过分析,猜测如图12中005D81C2处为判断是否注册成功的关键跳转。

    如图9所示:选中改行-右键-断点-切换(快捷键:F2)在该处下一个断点

    (图9)

    如图10所示,再次重复注册操作,可以看到再点击Activate后,软件断在了下断点改行,并且左上角显示暂停字样。

    (图10)

    断点行左侧引导线为灰色,证明跳转不成立,双击右侧寄存器窗口的控制符Z以使该跳转成立。

    更改后易语言机器码注册机,效果如图11,引导线变为红色,即跳转成立。点击如图15所示左上角运行按钮(快捷键:F9)。

    (图11)

    运行后发现成功!

    结果如图12所示。

    (图12)

    再次运行该软件,发现存在如图13所示的问题:

    软件依旧为试用版,未解锁专业版

    软件注册按钮没有消失(官网说注册成功后Activate按钮会消失)

    (图13)

    因此破解到此尚未成功。

    (三)、尝试追码1、定位关键call

    回到刚才下断点的地址,

    注:如果没有找到可以

    1:按上文【误解】的内容跳转到指定地址。)

    2:点击菜单下侧B按钮(快捷键:Alt+B)【Break】

    向上查看关键比较代码

    如图14,关键跳转上方的三个call都很可疑,均需要分析。

    (图14)

    3、单步步过,猜测call的作用

    如图15,一路按F8单步步过(图中右侧绿色箭头所示按钮;白色箭头所示为:单步步入),不跟入call内部,先猜测每个call的作用,然后重点分析怀疑对象,以提高效率和成功率。

    (图15)

    跟到如图16所示的地方,刚刚经过一个call,通过分析、查看下侧信息窗口、右侧寄存器窗口及堆栈窗口返回的数值,可以猜测005D81A6处call是得到假码的call,继续分析下面两个call可以猜测出下面第二个call判断注册是否成功,而根据返回的al标志符的值,判断是否注册成功。

    (图16)

    4、跟进关键call

    因此需要着重跟进该处call进行分析

    如图17所示,在该处call下断点,重复注册操作,进程在该处断下,按F7单步跟入,追踪真码。

    (图17)

    如图18所示,发现在上下移动代码行后,EIP所在行出现了错误。

    此处因为本人理解出错,感谢H大纠正。

    这是编译器编译出的数据,od可以按ctrl+A分析

    (图18)

    或是像本人一样手动改为00或90

    分析完,代码如图19所示,因为篇幅原因,下面的两个call已经分析过了,依然是单步步过下几行。

    (图19)

    分析如下图20。至此,真码已经出炉了。在寄存器的EAX和EDX中,已经把真码告诉我们了。。。

    (图20)

    5、测试追出的真码

    如图28所示,虽然已经确认了是真的注册码,但测试一下还是要令人愉悦的23333。

    至此可以利用论坛的其他教程写出内存注册机了。(善用论坛搜索功能)

    (图21)

    (四)、注册码算法分析1、取消已有的注册码授权

    要分析算法,首先要取消刚刚注册码,方法如下,任选其一即可:

    1) 再次打开注册窗口,改动注册码,按回车键;

    2) 如图22所示,在软件根目录下,注册成功后会新生成一个Activation注册文件,以文本方式打开该文件,即可发现请求码和注册码。删掉该文件即可。

    注:软件需要重新打开才会生效

    (图22)

    2、跟进关键call

    之前追码追到的算法关键call地址,如图23所示,我的电脑是004DFE68,观察下面的代码,发现OD识别出了字符-,结合上面的je跳转判断,再联系到注册码的结构,应该是在此处进行连接的,但是前面没有4个call,因此可能是循环。

    (图23)

    依然是单步步过每一个call,分析、猜测每一个call可能的含义。如图31所示,第一此到达该je的时候为跳转状态(没有连接符-),注意到后面的jnz前的判断代码:

    inc esi
    cmp esi,0x4

    即:如果esi不大于4则跳转到上面(循环)。

    (图24)

    单步步过下面四个call以猜测每个call的含义。

    本段详细含义见图25。

    (图25)

    到此厘清了软件注册码生成结构和流程:

    判断是否需要加上"-"
    连接字符串
    生成四位数(整数)
    转换为字符串
    如果不满四位,转到1
            生成了四段,则退出循环

    接下来就是一个找到如图25中004DFEAD的call对应的生成算法了。

    3、跟进生成四位数的call

    如图26所示,单步步入该函数,依旧是花指令,去之!去后效果如图27所示。

    (图26)

    (图27)

    如图28,单步步过到第一个call处,寄存器eax出现请求码,是传入该call的参数。

    (图28)

    如图29,再次步过该call下一行eax变为00000047(H),即71(D),联系传入的注册码,发现是注册码的位数(注:每台计算机的请求码位数不统一)。

    (图29)

    继续分析代码。分析的截图如图30、图31所示。点击可查看大图

    (图30)

    (图31)

    七、注册机的实现易语言实现

    咳咳大佬误笑。。

    完整代码就不贴了,以防被大佬笑话。。。上图吧。

    全工程代码:见图32、图33。

    (图32)

    (图33)

    实验结果:如图34所示,算法无误,成功!

    (图34)

    C语言实现

    咳咳qt,mfc都不懂。。。刚开始学习。。

    那就用控制台打印一个界面吧。。

    C语言精简版

    第一版注册机。。。要手动输入请求码,生成的注册码也不方便取出。

    代码的截图及运行截图如图35、图36所示:

    (图35)

    (图36)

    #include 
    #include
    #include

    int getSignCode ( long myCode )
    {
        int mySignedCode[4]= {27,16,47,34},i=0,retSignCode[4];

        for ( ; i<4; i++ )
        {
            long a,b;
            a = myCode;

            while ( 1 )
            {
                b = a * 16 / mySignedCode[i];

                if ( b <= 9999 )
                    break;
                a = a /2;
            }
            retSignCode[i]=b;
            printf ( "%ld",b);
            if(i!=3)    printf("-");
        }

        return *retSignCode;
    }
    int main()
    {
        char code[90];
        long codeSum=0;
        int i;
        printf ( "请输入您的请求码!\n" );
        scanf ( "%s",code );
        //strcpy ( code,"459111219222217181919201718181927282329343637-121525877-7161211-8126676" );//我的注册码
        printf ( "\n" );
        for ( i=0; i<strlen ( code )+1; i++ )
            codeSum+=code[i]* ( i+1 );
        printf ( "\n请求码算出的校验值为%ld\n\n",codeSum );
        getSignCode ( codeSum );
        return 0;
    }

    c语言 (相对)完整版

    在上一段代码的基础上加上了读取剪贴板、写入剪贴板的功能,

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论