- UID
- 59317
注册时间2009-1-28
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 无聊 2024-1-15 22:57 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
【软件介绍】:
土方工程量计算软件HTCAD是一套基于AutoCAD平台上开发的土方工程量计算绘图软件,针对各种复杂地形情况,软件可采用方格网法/断面法计算土石方量。软件具有良好的交互性,界面友好,贴近设计人员的设计思路,能够在最短的时间内精确计算出土石方量。适用于工业设计院总图专业,规划设计、园林设计中的土石方计算,农业工程中的农田规整改造、房地产公司的土方计算等领域。
功能介绍:
地形的输入输出及处理
可以接受不同测量单位制作的不同格式的高程数据文本文件,系统具有适应未知格式图形的机制;
【心路历程】以前用过3.6版,能用的破解版版本好像只有3.6版及之前版本了。看到新版本,抱着一丝希望下载回来看看。
实践证明,偷鸡不成。。。
【分析过程】
1.安装限制
软件安装需要输入授权码。虽然可以免费申请,但是要填写一堆表格。还是自己动手好。OD载入setup.exe,下messagebox断点,很容易找到关键
算法还挺复杂。一个试用版弄这么复杂,没人性。虽然是明码,还不如爆掉。
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,继续运行;
计算方格土方时,如果方格过多,会弹出对话框
照旧下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就不弹对话框了。
沾沾自喜中,试用其他功能。
比如:汇总土方量
输入栏直接来了句:
试用版不提供该功能!
不死心。
想到输出状态栏的方法是:
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什么的吧~~ |
|