某土方工程量计算软件限制分析(抱希望进来的一定会失望,慎入)
【软件介绍】:土方工程量计算软件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什么的吧~~ 貌似遇到同行了 顶一下 急需HTCAD破解版啊
页:
[1]