您的位置:首页精文荟萃破解文章 → 12 (7千字) 算法分析

12 (7千字) 算法分析

时间:2004/10/15 0:53:00来源:本站整理作者:蓝点我要评论(0)

 

 


软件名称:美萍网管大师 V7.7  解压后为1,253KB
下载地点:http://www.mpsoft.com
撰 稿 人: 井  风
时    间: 2002-04-18
破解工具:Soft-ice 4.05  Trw2000 1.22  BW2000 0.2 Unaspack 1.0.9.1
解题难度:[专  业]      ##[学  士]##      [硕  士]      [博  士]

前    言:

        很多网友要求破解,这是最新版本。
                       
过    程:

    (一)制作破解版方法:

    1、用Unaspack去壳;

    2、用HEX编辑器将:00475CFC JNZ 00475D05 改成永远不跳;

    3、一切OK!
    
    (二)找出注册码方法:

    1、用Unaspack去壳;

    2、此软件检测TRW2000的方法是依据检查TRW2000文件是否在硬盘上来判断的,所以要先用HIEW
      等十六进制软件将SCON.EXE所有“trw”字符串改成“20 20 20”,即三个格,不然的话它一
      检测到TRW就会调用EXITWINDOWSEX函数关机;

    3、下断点:BPX MESSAGEBOXA,可以拦截试用期还剩N天的对话框;

    4、分析代码如下:
0167:004C0904  MOV      EAX,[004D5678]
0167:004C0909  CALL    004C2360
0167:004C090E  MOV      EAX,EBX
0167:004C0910  CALL    004BA428
0167:004C0915  XOR      EAX,EAX
0167:004C0917  MOV      [004CD4C0],EAX
0167:004C091C  CALL    00475C48    <==明显这个调用就是验证核心处,重点跟踪分析此调用
0167:004C0921  TEST    EAX,EAX        <==返加值如果非零就可以跳过后面提醒框
0167:004C0923  JNZ      NEAR 004C09AE    <==
0167:004C0929  MOV      EAX,[004CD4B8]
0167:004C092E  SUB      EAX,BYTE +0F
0167:004C0931  CMP      EAX,[004F3010]
0167:004C0937  JNL      004C09AE    <==比较试用天数,不管它,关键是找到核心验证外,向上……
0167:004C0939  PUSH    BYTE +40
0167:004C093B  LEA      EAX,[EBP-18]
0167:004C093E  MOV      ECX,[004CD644]
0167:004C0944  MOV      EDX,[004CD508]
0167:004C094A  CALL    00403C78
0167:004C094F  MOV      EAX,[EBP-18]
0167:004C0952  CALL    00403DF0
0167:004C0957  PUSH    EAX
0167:004C0958  PUSH    DWORD [004CD638]
0167:004C095E  LEA      EDX,[EBP-24]
0167:004C0961  MOV      EAX,[004CD4B8]
0167:004C0966  INC      EAX
0167:004C0967  SUB      EAX,[004F3010]
0167:004C096D  CALL    00407890
0167:004C0972  PUSH    DWORD [EBP-24]
0167:004C0975  PUSH    DWORD [004CD63C]
0167:004C097B  PUSH    DWORD [004CD640]
0167:004C0981  PUSH    DWORD 004C0A7C
0167:004C0986  PUSH    DWORD 004C0A88
0167:004C098B  LEA      EAX,[EBP-1C]
0167:004C098E  MOV      EDX,06
0167:004C0993  CALL    00403CEC
0167:004C0998  MOV      EAX,[EBP-1C]
0167:004C099B  CALL    00403DF0
0167:004C09A0  PUSH    EAX
0167:004C09A1  MOV      EAX,EBX
0167:004C09A3  CALL    004269C0
0167:004C09A8  PUSH    EAX
0167:004C09A9  CALL    `USER32!MessageBoxA`    <==试用期提醒对话框,向上分析如何跳过?
0167:004C09AE  MOV      DL,01
0167:004C09B0  MOV      EAX,[EBX+0210]
0167:004C09B6  CALL    00456930

    5、深入跟踪0167:004C091C  CALL 00475C48    
    ·
    ·
    ·
0167:00475C8E  CALL    00476AF0
0167:00475C93  CMP      EBX,EAX
0167:00475C95  MOV      EDX,[004CDAA0]
0167:00475C9B  MOV      EDX,[EDX]
0167:00475C9D  MOV      EAX,[004CDB94]
0167:00475CA2  MOV      EAX,[EAX]        <==EAX的值是你输入的注册码
0167:00475CA4  CALL    00403EB8        <==子程序调用,记为*2*
0167:00475CA9  MOV      EDX,[004CDD04]        <==
0167:00475CAF  MOV      [EDX],EAX        <==将调用返回值移入4CDD04指向的地址
0167:00475CB1  MOV      EAX,[004CDD04]        <==4CDD04指向的地址移入EAX
0167:00475CB6  CMP      DWORD [EAX],BYTE +00    <==4CDD04指向的地址值与0比较
0167:00475CB9  JNZ      00475CC6        <==**此处应跳**
0167:00475CBB  MOV      EAX,[004CDD04]
0167:00475CC0  MOV      DWORD [EAX],1B        <==向4CDD04指向的内存移入1B
0167:00475CC6  MOV      EAX,[004CDB94]
0167:00475CCB  MOV      EAX,[EAX]
0167:00475CCD  CALL    00403C2C        <==返加你输入注册码的长度
0167:00475CD2  CMP      EAX,BYTE +05        <==检测你输入注册码是否为5位,--
0167:00475CD5  JNZ      00475CED        <==不是5位则跳走。
0167:00475CD7  MOV      EDX,[004CDAA0]
0167:00475CDD  MOV      EDX,[EDX]
0167:00475CDF  MOV      EAX,[004CDB94]
0167:00475CE4  MOV      EAX,[EAX]        <==EAX值是你输入的注册码
0167:00475CE6  CALL    00403EB8        <==子程序调用,记为*2*
0167:00475CEB  TEST    EAX,EAX
0167:00475CED  MOV      EAX,[004CD8A8]        <==内存中4cd8a8指向地址的值移--
0167:00475CF2  MOV      EAX,[EAX]        <==到EAX
0167:00475CF4  MOV      EDX,[004CDD04]        <==
0167:00475CFA  CMP      EAX,[EDX]        <==用内存4CDD04指向地址的值与EAX比较,记为*1*
0167:00475CFC  JNZ      00475D05        <==**此处应不跳**
0167:00475CFE  MOV      EBX,01            <==移入注册标志
0167:00475D03  JMP      SHORT 00475D07
0167:00475D05  XOR      EBX,EBX
0167:00475D07  XOR      EAX,EAX
0167:00475D09  POP      EDX
0167:00475D0A  POP      ECX
0167:00475D0B  POP      ECX
0167:00475D0C  MOV      [FS:EAX],EDX
0167:00475D0F  PUSH    DWORD 00475D24
0167:00475D14  LEA      EAX,[EBP-04]
0167:00475D17  CALL    004039B0
0167:00475D1C  RET   
0167:00475D1D  JMP      004033D0
0167:00475D22  JMP      SHORT 00475D14
0167:00475D24  MOV      EAX,EBX
0167:00475D26  POP      EBX
0167:00475D27  POP      ECX
0167:00475D28  POP      EBP
0167:00475D29  RET 

    通过以上代码分析,结合动态跟踪可知,只要*1*处比较等于零就OK了(制作破解版就是将这个
    比较后的JNZ改成永远不跳),*1*处所比较的值就是分别由*2*两次调用产生的,只要两次调都返回
    “A”值就成功了。继续进行第六步分析,以夺取最后胜利——“找注册码”;

    6、革命尚未成功,壮士还需努力!!,继续深入*2*CALL,分析代码如下:

0167:00403EB8    TEST    EAX,EAX
0167:00403EBA    JZ      00403EFC
0167:00403EBC    TEST    EDX,EDX
0167:00403EBE    JZ      00403EF1
0167:00403EC0  PUSH    EBX
0167:00403EC1  PUSH    ESI
0167:00403EC2  PUSH    EDI
0167:00403EC3  MOV      ESI,EAX
0167:00403EC5  MOV      EDI,EDX        <==EDI指向的串是根据你机器码产生的,记为*3*
0167:00403EC7  MOV      ECX,[EDI-04]    <==串长度入ECX
0167:00403ECA  PUSH    EDI
0167:00403ECB  MOV      EDX,[ESI-04]    <==你输入的码长度入EDX
0167:00403ECE  DEC      EDX        <== -1
0167:00403ECF  JS      00403EEC
0167:00403ED1  MOV      AL,[ESI]    <==S/N的第一位到AL
0167:00403ED3  INC      ESI        <==ESI指向第二位
0167:00403ED4  SUB      ECX,EDX        <==串长度-(输入码长度-1)
0167:00403ED6  JNG      00403EEC    <==不大于跳,不能跳
0167:00403ED8  REPNE SCASB        <==搜索第一字符在串中位置
0167:00403EDA  JNZ      00403EEC    <==不等于0跳,不能跳
0167:00403EDC  MOV      EBX,ECX
0167:00403EDE  PUSH    ESI
0167:00403EDF  PUSH    EDI
0167:00403EE0  MOV      ECX,EDX
0167:00403EE2  REPE CMPSB        <==比较剩下四位字符是否相同
0167:00403EE4  POP      EDI
0167:00403EE5  POP      ESI
0167:00403EE6  JZ      00403EF4    <==跳走,进一步找出你输入注册码在串中所处位置
0167:00403EE8  MOV      ECX,EBX
0167:00403EEA  JMP      SHORT 00403ED8
0167:00403EEC    POP      EDX
0167:00403EED    XOR      EAX,EAX
0167:00403EEF    JMP      SHORT 00403EF9
0167:00403EF1    XOR      EAX,EAX
0167:00403EF3    RET   
0167:00403EF4  POP      EDX
0167:00403EF5  MOV      EAX,EDI
0167:00403EF7  SUB      EAX,EDX        <==这行就是产生返回值,实际上它就是你输入的注册码在
                      串中的位置,此程序要求是10(十六进制是A)。
0167:00403EF9    POP      EDI
0167:00403EFA    POP      ESI
0167:00403EFB    POP      EBX
0167:00403EFC    RET   

    其实这段代码你不一定要看懂,实际上它就是找出你所输入注册码在根据你机器码产生的串中
    的位置。


小  结:

    这个程序要找出注册码还真要仔细分析才能得出:

        我的序例号:1319019
        *3*处串为:882628364 30494 47244625
        那么从10起的5位数字就是注册码:30494

后  记:

        有疑问请与我联系:hz.cy@163.net


附  则:
    斗地主V4.0 Build378破解:UPX脱壳,将4A8274处四个字节改成B0 01 90 90 就成注册版。

 

    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程