飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3892|回复: 2

[原创] 某土方工程量计算软件限制分析(抱希望进来的一定会失望,慎入)

[复制链接]
  • TA的每日心情
    无聊
    2024-1-15 22:57
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-5-30 18:12:00 | 显示全部楼层 |阅读模式
    【软件介绍】:
    土方工程量计算软件HTCAD是一套基于AutoCAD平台上开发的土方工程量计算绘图软件,针对各种复杂地形情况,软件可采用方格网法/断面法计算土石方量。软件具有良好的交互性,界面友好,贴近设计人员的设计思路,能够在最短的时间内精确计算出土石方量。适用于工业设计院总图专业,规划设计、园林设计中的土石方计算,农业工程中的农田规整改造、房地产公司的土方计算等领域。
    功能介绍:
    地形的输入输出及处理
    可以接受不同测量单位制作的不同格式的高程数据文本文件,系统具有适应未知格式图形的机制;
    【心路历程】以前用过3.6版,能用的破解版版本好像只有3.6版及之前版本了。看到新版本,抱着一丝希望下载回来看看。
    实践证明,偷鸡不成。。。
    【分析过程】
    1.安装限制
    软件安装需要输入授权码。虽然可以免费申请,但是要填写一堆表格。还是自己动手好。OD载入setup.exe,下messagebox断点,很容易找到关键
    Snap1.gif
    算法还挺复杂。一个试用版弄这么复杂,没人性。虽然是明码,还不如爆掉。
    004054D3  |.  8B4424 14     mov     eax, dword ptr [esp+14]
    004054D7  |.  8B4C24 1C     mov     ecx, dword ptr [esp+1C]
    004054DB  |.  50            push    eax                              ; /真码
    004054DC  |.  51            push    ecx                              ; |假码
    004054DD  |.  FF15 90544100 call    dword ptr [<&MSVCRT._mbscmp>]    ; \_mbscmp
    004054E3  |.  83C4 08       add     esp, 8
    004054E6  |.  85C0          test    eax, eax
    004054E8      74 49         je      short 00405533                   ;  关键跳,改jmp
    004054EA  |.  8DB7 04070000 lea     esi, dword ptr [edi+704]
    004054F0  |.  8BCE          mov     ecx, esi
    004054F2  |.  E8 4FC50000   call    <jmp.&MFC42.#5981_CWnd::SetFocus>

    2.软件的主功能是计算土方量,先看这个。
    OD附加到AutoCAD,继续运行;
    计算方格土方时,如果方格过多,会弹出对话框
    Snap2.gif
    照旧下Messagebox断点,来到:

    07E7AEC6    E8 45130D00     call    <jmp.&ACAD.acedGetPoint>                             ; 选择计算选项
    07E7AECB    8B5424 64       mov     edx, dword ptr [esp+64]
    07E7AECF    83C4 1C         add     esp, 1C
    07E7AED2    52              push    edx
    07E7AED3    51              push    ecx
    07E7AED4    8BCC            mov     ecx, esp
    07E7AED6    896424 28       mov     dword ptr [esp+28], esp
    07E7AEDA    68 1039F607     push    07F63910                                             ; ASCII "OSMODE"
    07E7AEDF    8BF0            mov     esi, eax
    07E7AEE1    E8 5A91FCFF     call    07E44040
    07E7AEE6    E8 6D160D00     call    <jmp.&HTCADArxBase.ArxSystemVar::Arx_setSysVar>
    07E7AEEB    83C4 08         add     esp, 8
    07E7AEEE    81FE 73ECFFFF   cmp     esi, -138D
    07E7AEF4    0F85 51010000   jnz     07E7B04B                                             ; 是否计算方法2
    07E7AEFA    8B5424 14       mov     edx, dword ptr [esp+14]
    07E7AEFE    8B42 FC         mov     eax, dword ptr [edx-4]
    07E7AF01    B9 01000000     mov     ecx, 1
    。。。。。。。。
    07E7B037    E8 CE110D00     call    <jmp.&ACAD.acDocManagerPtr>
    07E7B03C    8B10            mov     edx, dword ptr [eax]
    07E7B03E    8BC8            mov     ecx, eax
    07E7B040    FF92 80000000   call    dword ptr [edx+80]
    07E7B046  ^ E9 2DFEFFFF     jmp     07E7AE78
    07E7B04B    81FE EC130000   cmp     esi, 13EC                                            ; 是否计算方法1
    07E7B051    0F85 0F010000   jnz     07E7B166                                             ; 没有选择的话结束
    。。。。。。。。。
    07E7B1E0    E8 31130D00     call    <jmp.&HTCADArxBase.ArxEntity::Arx_EraseEntity>
    07E7B1E5    8B4424 64       mov     eax, dword ptr [esp+64]
    07E7B1E9    83C4 04         add     esp, 4
    07E7B1EC    46              inc     esi
    07E7B1ED    3BF0            cmp     esi, eax
    07E7B1EF  ^ 7C E7           jl      short 07E7B1D8
    07E7B1F1    8B4C24 2C       mov     ecx, dword ptr [esp+2C]                              ; 须计算的方格数
    07E7B1F5    51              push    ecx
    07E7B1F6    6A 00           push    0
    07E7B1F8    68 B44CF607     push    07F64CB4
    07E7B1FD    E8 F60F0D00     call    <jmp.&ACAD.acedSetStatusBarProgressMeter>
    07E7B202    8B4424 38       mov     eax, dword ptr [esp+38]
    07E7B206    83C4 0C         add     esp, 0C
    07E7B209    33FF            xor     edi, edi
    07E7B20B    85C0            test    eax, eax
    07E7B20D    0F8E E4000000   jle     07E7B2F7                                             ; 小于等于0就不用算了
    07E7B213    8B6C24 54       mov     ebp, dword ptr [esp+54]
    07E7B217    8B5C24 50       mov     ebx, dword ptr [esp+50]
    07E7B21B    EB 03           jmp     short 07E7B220
    07E7B21D    8D49 00         lea     ecx, dword ptr [ecx]                                 ; ///////////////以下为循环体
    07E7B220    E8 D90F0D00     call    <jmp.&ACAD.acedUsrBrk>                               ; 用户是否按ESC结束计算了
    07E7B225    83F8 01         cmp     eax, 1
    07E7B228    0F84 C9000000   je      07E7B2F7                                             ; 按了就结束计算
    07E7B22E    57              push    edi
    07E7B22F    E8 BE0F0D00     call    <jmp.&ACAD.acedSetStatusBarProgressMeterPos>
    07E7B234    8B5424 28       mov     edx, dword ptr [esp+28]
    07E7B238    8B34BA          mov     esi, dword ptr [edx+edi*4]
    07E7B23B    8D4424 50       lea     eax, dword ptr [esp+50]
    07E7B23F    50              push    eax
    07E7B240    8D4C24 3C       lea     ecx, dword ptr [esp+3C]
    07E7B244    51              push    ecx
    07E7B245    56              push    esi
    07E7B246    E8 35D70A00     call    07F28980
    07E7B24B    8B4424 44       mov     eax, dword ptr [esp+44]                              ; 竖向的方格数
    07E7B24F    99              cdq
    07E7B250    B9 03000000     mov     ecx, 3
    07E7B255    F7F9            idiv    ecx                                                  ; 除以3,即每三行计算一次
    07E7B257    83C4 10         add     esp, 10
    07E7B25A    85D2            test    edx, edx
    07E7B25C    0F85 88000000   jnz     07E7B2EA
    07E7B262    8B4424 4C       mov     eax, dword ptr [esp+4C]                              ; 横向的方格数
    07E7B266    99              cdq
    07E7B267    B9 05000000     mov     ecx, 5
    07E7B26C    F7F9            idiv    ecx                                                  ; 除以5,即每5行计算一次
    07E7B26E    85D2            test    edx, edx
    07E7B270    75 78           jnz     short 07E7B2EA
    07E7B272    56              push    esi
    07E7B273    E8 689AFEFF     call    07E64CE0
    07E7B278    83C4 04         add     esp, 4
    07E7B27B    85C0            test    eax, eax
    07E7B27D    74 6B           je      short 07E7B2EA
    07E7B27F    56              push    esi
    07E7B280    E8 C7120D00     call    <jmp.&HTCADArxBase.ArxEntity::Arx_HightAllEnt>
    07E7B285    56              push    esi
    07E7B286    E8 55E5FFFF     call    07E797E0
    07E7B28B    83C4 08         add     esp, 8
    07E7B28E    85C0            test    eax, eax
    07E7B290    74 3D           je      short 07E7B2CF
    07E7B292    8D5424 70       lea     edx, dword ptr [esp+70]
    07E7B296    52              push    edx
    07E7B297    8D4424 6C       lea     eax, dword ptr [esp+6C]
    07E7B29B    50              push    eax
    07E7B29C    56              push    esi
    07E7B29D    E8 1ED10A00     call    07F283C0
    07E7B2A2    DD4424 4C       fld     qword ptr [esp+4C]
    07E7B2A6    DC4424 74       fadd    qword ptr [esp+74]
    07E7B2AA    8B4C24 24       mov     ecx, dword ptr [esp+24]
    07E7B2AE    51              push    ecx
    07E7B2AF    55              push    ebp
    07E7B2B0    DD5C24 54       fstp    qword ptr [esp+54]
    07E7B2B4    53              push    ebx
    07E7B2B5    DD4424 50       fld     qword ptr [esp+50]
    07E7B2B9    56              push    esi
    07E7B2BA    DC8424 8C000000 fadd    qword ptr [esp+8C]
    07E7B2C1    DD5C24 54       fstp    qword ptr [esp+54]
    07E7B2C5    E8 E6090200     call    07E9BCB0
    07E7B2CA    83C4 1C         add     esp, 1C
    07E7B2CD    EB 0D           jmp     short 07E7B2DC
    07E7B2CF    68 A84CF607     push    07F64CA8
    07E7B2D4    E8 B50C0D00     call    <jmp.&acdb16.acutPrintf>
    07E7B2D9    83C4 04         add     esp, 4
    07E7B2DC    56              push    esi
    07E7B2DD    E8 D6120D00     call    <jmp.&HTCADArxBase.ArxEntity::Arx_UnHightAllEnt>
    07E7B2E2    83C4 04         add     esp, 4
    07E7B2E5    E8 14120D00     call    <jmp.&HTCADArxBase.ArxDraw::Arx_RefreshDisplay>
    07E7B2EA    8B4424 2C       mov     eax, dword ptr [esp+2C]                              ; 总方格数
    07E7B2EE    47              inc     edi                                                  ; 计数器+1
    07E7B2EF    3BF8            cmp     edi, eax                                             ; 算完了吗
    07E7B2F1  ^ 0F8C 29FFFFFF   jl      07E7B220                                             ; //////////////////////////////////
    07E7B2F7    E8 F00E0D00     call    <jmp.&ACAD.acedRestoreStatusBar>                     ; 状态栏
    07E7B2FC    68 944CF607     push    07F64C94
    07E7B301    E8 880C0D00     call    <jmp.&acdb16.acutPrintf>                             ; 显示内容
    07E7B306    8B15 481DF907   mov     edx, dword ptr [7F91D48]
    07E7B30C    68 784CF607     push    07F64C78                                             ; ASCII "oinvt876ykghihujda0tqhla"
    07E7B311    52              push    edx                                                  ; 经典比较call
    07E7B312    FF15 802AF607   call    dword ptr [<&MSVCR70._mbscmp>]                       ; MSVCR70._mbscmp
    07E7B318    83C4 0C         add     esp, 0C
    07E7B31B    85C0            test    eax, eax
    07E7B31D    75 14           jnz     short 07E7B333                                       ; 不等则跳,相等则出messagebox
    07E7B31F    50              push    eax
    07E7B320    68 644CF607     push    07F64C64
    07E7B325    68 104CF607     push    07F64C10
    07E7B32A    50              push    eax
    07E7B32B    FF15 B02CF607   call    dword ptr [<&USER32.MessageBoxA>]                    ; USER32.MessageBoxA
    07E7B331    EB 21           jmp     short 07E7B354

    这个方法很简单实现了不完整的输出结果,呵呵。。。好办。让被除数等于1,自然就每格都要计算了哈。。。
    修改:
    07E7B250    B9 03000000     mov     ecx, 1
    07E7B267    B9 05000000     mov     ecx, 1
    ecx赋值为1即可。
    再试的话就全部方格都计算了。
    修改07E7B31D    75 14           jnz     short 07E7B333  为JMP就不弹对话框了。
    Snap3.gif

    沾沾自喜中,试用其他功能。
    比如:汇总土方量
    输入栏直接来了句:
    试用版不提供该功能!
    不死心。
    想到输出状态栏的方法是:
    07E7B301    E8 880C0D00     call    <jmp.&acdb16.acutPrintf>  
    搜索之,搜索字符串也行,来到:
    00A414D0    55              push    ebp
    。。。。。
    00A41521    33C0            xor     eax, eax
    00A41523    8945 DC         mov     dword ptr [ebp-24], eax
    00A41526    8945 FC         mov     dword ptr [ebp-4], eax
    00A41529    FFD1            call    ecx                                                  ; 试用版不提供该功能!
    00A4152B    C745 FC FFFFFFF>mov     dword ptr [ebp-4], -1
    00A41532    EB 3F           jmp     short 00A41573
    00A41534    8B45 EC         mov     eax, dword ptr [ebp-14]
    00A41537    8945 DC         mov     dword ptr [ebp-24], eax
    00A4153A    8B4D DC         mov     ecx, dword ptr [ebp-24]
    00A4153D    51              push    ecx
    00A4153E    E8 DDF2FFFF     call    00A40820
    00A41543    C3              retn
    00A41544    8B65 E8         mov     esp, dword ptr [ebp-18]
    00A41547    8B15 18FAAE00   mov     edx, dword ptr [<&acdb16.s_pServices>]               ; acdb16.s_pServices
    00A4154D    8B0A            mov     ecx, dword ptr [edx]
    00A4154F    8B75 E0         mov     esi, dword ptr [ebp-20]
    。。。。。。
    00A4156F    EB 02           jmp     short 00A41573
    00A41571    FFD1            call    ecx                                                  ; printf 试用版不提供该功能!
    00A41573    8B46 08         mov     eax, dword ptr [esi+8]
    00A41576    F6C4 08         test    ah, 8
    00A41579    75 08           jnz     short 00A41583
    00A4157B    25 FFFBFFFF     and     eax, FFFFFBFF
    00A41580    8946 08         mov     dword ptr [esi+8], eax
    。。。。。。
    00A415D7    5D              pop     ebp
    00A415D8    C2 0400         retn    4

    一看这个过程这么短,俺的心拔凉拔凉的。。。。看来作者已经删除了相关函数功能。

    不过,最主要的功能方格计算已经可以用了。如果有人愿意用lisp自己统计一下当然也很简单(俺可不会)
    嘿嘿。。没戏了,继续用俺的3.6版吧。。。或者换hy啊tz什么的吧~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-5-30 18:48:43 | 显示全部楼层
    貌似遇到同行了 顶一下
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2024-3-26 11:03
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2017-4-8 18:25:55 | 显示全部楼层
    急需HTCAD破解版啊
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表