zaas 发表于 2010-5-30 18:12:00

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

【软件介绍】:
土方工程量计算软件HTCAD是一套基于AutoCAD平台上开发的土方工程量计算绘图软件,针对各种复杂地形情况,软件可采用方格网法/断面法计算土石方量。软件具有良好的交互性,界面友好,贴近设计人员的设计思路,能够在最短的时间内精确计算出土石方量。适用于工业设计院总图专业,规划设计、园林设计中的土石方计算,农业工程中的农田规整改造、房地产公司的土方计算等领域。
功能介绍:
地形的输入输出及处理
可以接受不同测量单位制作的不同格式的高程数据文本文件,系统具有适应未知格式图形的机制;
【心路历程】以前用过3.6版,能用的破解版版本好像只有3.6版及之前版本了。看到新版本,抱着一丝希望下载回来看看。
实践证明,偷鸡不成。。。
【分析过程】
1.安装限制
软件安装需要输入授权码。虽然可以免费申请,但是要填写一堆表格。还是自己动手好。OD载入setup.exe,下messagebox断点,很容易找到关键

算法还挺复杂。一个试用版弄这么复杂,没人性。虽然是明码,还不如爆掉。
004054D3|.8B4424 14   mov   eax, dword ptr
004054D7|.8B4C24 1C   mov   ecx, dword ptr
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
004054F0|.8BCE          mov   ecx, esi
004054F2|.E8 4FC50000   call    <jmp.&MFC42.#5981_CWnd::SetFocus>

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

照旧下Messagebox断点,来到:

07E7AEC6    E8 45130D00   call    <jmp.&ACAD.acedGetPoint>                           ; 选择计算选项
07E7AECB    8B5424 64       mov   edx, dword ptr
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
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
07E7AEFE    8B42 FC         mov   eax, dword ptr
07E7AF01    B9 01000000   mov   ecx, 1
。。。。。。。。
07E7B037    E8 CE110D00   call    <jmp.&ACAD.acDocManagerPtr>
07E7B03C    8B10            mov   edx, dword ptr
07E7B03E    8BC8            mov   ecx, eax
07E7B040    FF92 80000000   call    dword ptr
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
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                               ; 须计算的方格数
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
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
07E7B217    8B5C24 50       mov   ebx, dword ptr
07E7B21B    EB 03         jmp   short 07E7B220
07E7B21D    8D49 00         lea   ecx, dword ptr                                  ; ///////////////以下为循环体
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
07E7B238    8B34BA          mov   esi, dword ptr
07E7B23B    8D4424 50       lea   eax, dword ptr
07E7B23F    50            push    eax
07E7B240    8D4C24 3C       lea   ecx, dword ptr
07E7B244    51            push    ecx
07E7B245    56            push    esi
07E7B246    E8 35D70A00   call    07F28980
07E7B24B    8B4424 44       mov   eax, dword ptr                               ; 竖向的方格数
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                               ; 横向的方格数
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
07E7B296    52            push    edx
07E7B297    8D4424 6C       lea   eax, dword ptr
07E7B29B    50            push    eax
07E7B29C    56            push    esi
07E7B29D    E8 1ED10A00   call    07F283C0
07E7B2A2    DD4424 4C       fld   qword ptr
07E7B2A6    DC4424 74       fadd    qword ptr
07E7B2AA    8B4C24 24       mov   ecx, dword ptr
07E7B2AE    51            push    ecx
07E7B2AF    55            push    ebp
07E7B2B0    DD5C24 54       fstp    qword ptr
07E7B2B4    53            push    ebx
07E7B2B5    DD4424 50       fld   qword ptr
07E7B2B9    56            push    esi
07E7B2BA    DC8424 8C000000 fadd    qword ptr
07E7B2C1    DD5C24 54       fstp    qword ptr
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                               ; 总方格数
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
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就不弹对话框了。


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

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

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

shzlk999 发表于 2010-5-30 18:48:43

貌似遇到同行了 顶一下

Striver 发表于 2017-4-8 18:25:55

急需HTCAD破解版啊
页: [1]
查看完整版本: 某土方工程量计算软件限制分析(抱希望进来的一定会失望,慎入)