|
软件标签: 易语言 编程工具
易语言4.14完美修改版是一款为易语言用户打造的易语言4.14修改版最新版本,这个版本相对于其他版本,更加完美,绿色资源网小编为您准备了最详细的修改过程!喜欢就来瞧一瞧吧!
软件介绍:
易语言降低了广大电脑用户编程的门槛,尤其是根本不懂英文或者英文了解很少的用户,可以通过使用本语言极其快速地进入windows程序编写的大门。易语言汉语编程环境是一个支持基于汉语字、词编程的、全可视化的、跨主流操作系统平台的编程工具环境;拥有简、繁汉语以及英语、日语等多语种版本;能与常用的编程语言互相调用;具有充分利用api,com、dll、ocx组件,各种主流数据库,各种实用程序等多种资源的接口和支撑工具。
修改过程:
修改过程跟 易语言4.13 版本的时候基本相同,不过这次主要总结3个步骤即可到位~
----------------------
159544386.key ? ? ? ?[企业注册版]
159544386 → [09800000 xor 00027442] → 0x09827442(十六进制) [硬件代码计算值]
3a7fef86d9a344bd279538025a6b881ed798010002deea0151b9c722075e0618f6b153acb49b357e402df46bb4169e78e7cd6760544cd4c4419373a6aeea5b2ca46c0cdb3a2cd98e980ef419dbe10ea4f470b097172a44db547d505daf6187b8fcc4153a7fe91beb33be7fc71913c0fd26f7f6fe36b24c824fcfa51f2795ef0294cdc0c2f9917b370a5db5f2d95bc05d328d0ba8d28442c2b451d7ae3e25e0585793f9ba8e4cc40460e58f38a49233145220218feb7371944c5d41184b329739cb70792d6d04823c5af45fe62de7a3f6420ffecf6ead0f8a83d9d21bf6433faba1732b91cf085f0cdd4f0ca305fed4b717b4d1390b25add104578b63d252535be04e362ada6820117e8e274e7d93a0605ead954c3afff3c8f4bade8
----------------------
1.第一步如何找到注册关键位置及修改方法,[企业注册版]key的硬件代码[159544386]计算过程...
//由于我们现在要修改的是 易语言 的硬盘注册方式,所以首先我们查找取硬盘特征关键信息字符 "\.physicaldrive0"
----------------------
ultra string reference, 条目 553
address=004314a6
disassembly=push e.005868b8
text string=\.physicaldrive0
//在 [004314a6] 下硬件断点,然后f9运行看看.
----------------------
00431490 ?/$ ?81ec 54020000 sub esp, 254 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?① 取硬盘硬件码信息
00431496 ?|. ?53 ? ? ? ? ? ?push ebx
00431497 ?|. ?33db ? ? ? ? ?xor ebx, ebx
00431499 ?|. ?56 ? ? ? ? ? ?push esi
0043149a ?|. ?53 ? ? ? ? ? ?push ebx ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; /htemplatefile => null
0043149b ?|. ?53 ? ? ? ? ? ?push ebx ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |attributes => 0
0043149c ?|. ?6a 03 ? ? ? ? push 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |mode = open_existing
0043149e ?|. ?53 ? ? ? ? ? ?push ebx ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |psecurity => null
0043149f ?|. ?6a 03 ? ? ? ? push 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |sharemode = file_share_read|file_share_write
004314a1 ?|. ?68 000000c0 ? push c0000000 ? ? ? ? ? ? ? ? ? ? ? ? ? ?; |access= generic_read|generic_write
004314a6 ?|. ?68 b8685800 ? push e.005868b8 ? ? ? ? ? ? ? ? ? &nb
sp; ? ? ?; |\.physicaldrive0
004314ab ?|. ?ff15 5cc25400 call dword ptr ds:[<&kernel32.createfile>; createfilea
004314b1 ?|. ?8bf0 ? ? ? ? ?mov esi, eax
004314b3 ?|. ?83fe ff ? ? ? cmp esi, -1
004314b6 ?|. ?0f84 c0000000 je e.0043157c
......省略部分代码
00431569 ?|> 56 ? ? ? ? ? ?push esi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; /hobject
0043156a ?|. ?ff15 78c25400 call dword ptr ds:[<&kernel32.closehandl>; closehandle
00431570 ?|. ?5f ? ? ? ? ? ?pop edi
00431571 ?|. ?8bc3 ? ? ? ? ?mov eax, ebx
00431573 ?|. ?5e ? ? ? ? ? ?pop esi
00431574 ?|. ?5b ? ? ? ? ? ?pop ebx
00431575 ?|. ?81c4 54020000 add esp, 254
0043157b ?|. ?c3 ? ? ? ? ? ?retn ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; 这里返回到上一层
----------------------
004315b6 ?|. ?8bd0 ? ? ? ? ?mov edx, eax
004315b8 ?|. ?be 01000000 ? mov esi, 1
004315bd ?|. ?85d2 ? ? ? ? ?test edx, edx
004315bf ?|. ?75 2e ? ? ? ? jnz short e.004315ef
......省略部分代码
004315f5 ?|. /74 0a ? ? ? ? je short e.00431601
004315f7 ?|. |8bca ? ? ? ? ?mov ecx, edx
004315f9 ?|. |f7d9 ? ? ? ? ?neg ecx
004315fb ?|. |1bc9 ? ? ? ? ?sbb ecx, ecx
004315fd ?|. |23ce ? ? ? ? ?and ecx, esi
004315ff ?|. |8908 ? ? ? ? ?mov dword ptr ds:[eax], ecx
00431601 ?|> 8bc2 ? ? ? ? ?mov eax, edx
00431603 ?|. ?5e ? ? ? ? ? ?pop esi
00431604 ?. ?c3 ? ? ? ? ? ?retn ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; 这里返回到上一层
----------------------
......................
00457203 ?|. ?8d4d f8 ? ? ? lea ecx, [local.2]
00457206 ?|. ?51 ? ? ? ? ? ?push ecx
00457207 ?|. ?e8 a4a3fdff ? call e.004315b0 ? ? ? ? ? ? ? ? ? ? ? ? ?; ?① 取硬盘硬件码信息
0045720c ?|. ?83c4 04 ? ? ? add esp, 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?这里出来以后很多花花(⊙o⊙)哦!
0045720f ?|. ?8bf0 ? ? ? ? ?mov esi, eax ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?eax = 取硬盘特征字()
......................
00457215 ?|. ?85f6 ? ? ? ? ?test esi, esi
00457217 ?|. ?75 25 ? ? ? ? jnz short e.0045723e
......................
0045721c ?|. ?ff05 18955900 inc dword ptr ds:[599518]
......................
00457225 ?|. ?833d 18955900>cmp dword ptr ds:[599518], 6
0045722c ?|. ?75 10 ? ? ? ? jnz short e.0045723e
......................
00457239 ?|. ?be 73191511 ? mov esi, 11151973
......................
00457241 ?|. ?85f6 ? ? ? ? ?test esi, esi
00457243 ?|. ?0f84 f8010000 je e.00457441
......................
00457254 ?|. ?ff15 4cc25400 call dword ptr ds:[<&kernel32.gettickcou>; [gettickcount
0045725a ?|. ?a3 d8925900 ? mov dword ptr ds:[5992d8], eax
......................
00457262 ?|. ?a1 1c8f5900 ? mov eax, dword ptr ds:[598f1c]
00457267 ?|. ?85c0 ? ? ? ? ?test eax, eax
00457269 ?|. ?74 29 ? ? ? ? je short e.00457294
......................
0045726e ?|. ?56 ? ? ? ? ? ?push esi
0045726f ?|. ?e8 6cf0ffff ? call e.004562e0
00457274 ?|. ?35 9a3b5400 ? xor eax, 543b9a
00457279 ?|. ?83c4 04 ? ? ? add esp, 4
0045727c ?|. ?a3 70935900 ? mov dword ptr ds:[599370], eax
......................
00457285 ?|. ?8135 70935900>xor dword ptr ds:[599370], 8912fcd
0045728f ?|. ?e9 5a010000jmpe.004573ee
00457294 ?|> ?53 ? ? ? ? ? ?push ebx
00457295 ?|. ?57 ? ? ? ? ? ?push edi
......................
004572a1 ?|. ?68 dc050000 ? push 5dc
004572a6 ?|. ?68 803e0000 ? push 3e80
004572ab ?|. ?68 71020000 ? push 271
004572b0 ?|. ?56 ? ? ? ? ? ?push esi
004572b1 ?|. ?e8 4a4f0800 ? call e.004dc200 ? ? ? ? ? ? ? ? ? ? ? ? ?; ?② 计算硬盘特征信息
004572b6 ?|. ?83c4 10 ? ? ? add esp, 10
004572b9 ?|. ?8945 e0 ? ? ? mov [local.8], eax
......................
004572c7 ?|. ?8bf0 ? ? ? ? ?|mov esi, eax
004572c9 ?|. ?25 ffff0f00 ? |and eax, 0fffff
004572ce ?|. ?c1ee 10 ? ? ? |shr esi, 10
004572d1 ?|. ?81e6 f0ff0000 |and esi, 0fff0
004572d7 ?|. ?33f0 ? ? ? ? ?|xor esi, eax
......................
004572dc ?|. ?68 2c010000 ? |push 12c
004572e1 ?|. ?68 401f0000 ? |push 1f40
004572e6 ?|. ?68 e2040000 ? |push 4e2
004572eb ?|. ?56 ? ? ? ? ? ?|push esi
004572ec ?|. ?e8 0f4f0800 ? |call e.004dc200 ? ? ? ? ? ? ? ? ? ? ? ? ; ?② 计算硬盘特征信息
004572f1 ?|. ?83c4 10 ? ? ? |add esp, 10
004572f4 ?|. ?8945 e4 ? ? ? |mov [local.7], eax
......................
004572fa ?|. ?8bd8 ? ? ? ? ?|mov ebx, eax
004572fc ?|. ?81e3 ff000000 |and ebx, 0ff
......................
00457305 ?|. ?8bc8 ? ? ? ? ?|mov ecx, eax
00457307 ?|. ?81e1 000000ff |and ecx, ff000000
......................
00457311 ?|. ?25 00ff0000 ? |and eax, 0ff00
......................
00457324 ?|. ?ba e44c5900 ? |mov edx, e.00594ce4
00457329 ?|> ?8b7a fc ? ? ? |/mov edi, dword ptr ds:[edx-4]
; ?[edx-4] = ds:[00594ce0]=cc051311
//ds:[00594ce0]此处需要修改内存值,把 cc051311 改成 00000000
//00594ce0 ?00 00 00 00 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?....
//暂时可以先记录下来不进行修改...
0045732c ?|. ?85ff ? ? ? ? ?||test edi, edi
0045732e ?|. ?74 5f ? ? ? ? ||je short e.0045738f ? ? ? ? ? ? ? ? ? ?; ? 必须跳,否则硬盘码计算值则不等于 159544386
......................
00457337 ?|. ?8b7a fc ? ? ? ||mov edi, dword ptr ds:[edx-4]
0045733a ?|. ?33fe ? ? ? ? ?||xor edi, esi
......................
00457340 ?|. ?337a 08 ? ? ? ||xor edi, dword ptr ds:[edx+8]
......................
0045734e ?|. ?333a ? ? ? ? ?||xor edi, dword ptr ds:[edx]
......................
00457353 ?|. ?3b7a 04 ? ? ? ||cmp edi, dword ptr ds:[edx+4]
00457356 ?|. ?74 09 ? ? ? ? ||je short e.00457361
......................
0045735c ?|. ?83c2 10 ? ? ? ||add edx, 10
0045735f ?|.^ eb c8 ? ? ? ? |jmp short e.00457329
......................
00457365 ?|. ?8b75 e0 ? ? ? |mov esi, [local.8]
00457368 ?|. ?68 ac000000 ? |push 0ac
0045736d ?|. ?68 c4090000 ? |push 9c4
00457372 ?|. ?68 a00f0000 ? |push 0fa0
00457377 ?|. ?56 ? ? ? ? ? ?|push esi
00457378 ?|. ?e8 834e0800 ? |call e.004dc200 ? ? ? ? ? ? ? ? ? ? ? ? ; ?② 计算硬盘特征信息
0045737d ?|. ?83c4 10 ? ? ? |add esp, 10
00457380 ?|. ?33f0 ? ? ? ? ?|xor esi, eax
00457382 ?|. ?8975 e0 ? ? ? |mov [local.8], esi
......................
00457388 ?|. ?8bc6 ? ? ? ? ?|mov eax, esi
0045738a ?|.^ e9 2dffffff ? jmp e.004572bc
......................
00457396 ?|. ?33d2 ? ? ? ? ?xor edx, edx
00457398 ?|. ?8a55 e6 ? ? ? mov dl, byte ptr ss:[ebp-1a]
......................
004573c3 ?|. ?33d3 ? ? ? ? ?xor edx, ebx
004573c5 ?|. ?24 00 ? ? ? ? and al, 0
004573c7 ?|. ?c1e2 08 ? ? ? shl edx, 8
004573ca ?|. ?33d0 ? ? ? ? ?xor edx, eax
004573cc ?|. ?c1e9 04 ? ? ? shr ecx, 4
004573cf ?|. ?c1e2 0c ? ? ? shl edx, 0c
004573d2 ?|. ?81e1 0000f00f and ecx, 0ff00000
004573d8 ?|. ?33d1 ? ? ? ? ?xor edx, ecx
004573da ?|. ?0bd6 ? ? ? ? ?or edx, esi
004573dc ?|. ?81f2 5714c508 xor edx, 8c51457
004573e2 ?|. ?8915 70935900 mov dword ptr ds:[599370], edx
......................
004573ec ?|. ?5f ? ? ? ? ? ?pop edi
004573ed ?|. ?5b ? ? ? ? ? ?pop ebx
......................
004573f1 ?|. ?8b15 d8925900 mov edx, dword ptr ds:[5992d8]
004573f7 ?|. ?8b35 70935900 mov esi, dword ptr ds:[599370]<
/p>
004573fd ?|. ?33f2 ? ? ? ? ?xor esi, edx
004573ff ?|. ?8935 70935900 mov dword ptr ds:[599370], esi
......................
00457408 ?|. ?8135 70935900>xor dword ptr ds:[599370], 8c51457
......................
00457416 ?|. ?b9 488a5900 ? mov ecx, e.00598a48
0045741b ?|. ?e8 70460500 ? call e.004aba90 ? ? ? ? ? ? ? ? ? ? ? ? ?; ?③ key文件读取
......................
0045742b ?|. ?a1 c0905900 ? mov eax, dword ptr ds:[5990c0]
00457430 ?|. ?85c0 ? ? ? ? ?test eax, eax
00457432 ?|. ?74 07 ? ? ? ? je short e.0045743b
......................
0045743f ?|. ?eb 1f ? ? ? ? jmp short e.00457460
......................
00457445 ?|. ?a1 f4925900 ? mov eax, dword ptr ds:[5992f4]
0045744a ?|. ?68 40714500 ? push e.00457140 ? ? ? ? ? ? ? ? ? ? ? ? ?; /timerproc = e.00457140
0045744f ?|. ?68 88130000 ? push 1388 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; |timeout = 5000. ms
00457454 ?|. ?6a 70 ? ? ? ? push 70 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; |timerid = 70 (112.)
00457456 ?|. ?8b48 1c ? ? ? mov ecx, dword ptr ds:[eax+1c] ? ? ? ? ? ; |
00457459 ?|. ?51 ? ? ? ? ? ?push ecx ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |hwnd
0045745a ?|. ?ff15 94c65400 call dword ptr ds:[<&user32.settimer>] ? ; settimer
......................
0045746b ?|. ?5e ? ? ? ? ? ?pop esi
0045746c ?|> ?8be5 ? ? ? ? ?mov esp, ebp
0045746e ?|. ?5d ? ? ? ? ? ?pop ebp
0045746f ?. ?c2 1000 ? ? ? retn 10
----------------------
004dc200 ?/$ ?8b4c24 0c ? ? mov ecx, dword ptr ss:[esp+c] ? ? ? ? ? ?; ?② 计算硬盘特征信息
004dc204 ?|. ?55 ? ? ? ? ? ?push ebp
004dc205 ?|. ?8b6c24 14 ? ? mov ebp, dword ptr ss:[esp+14]
004dc209 ?|. ?56 ? ? ? ? ? ?push esi
004dc20a ?|. ?57 ? ? ? ? ? ?push edi
004dc20b ?|. ?8b7c24 14 ? ? mov edi, dword ptr ss:[esp+14]
004dc20f ?|. ?85ed ? ? ? ? ?test ebp, ebp
004dc211 ?|. ?7e 28 ? ? ? ? jle short e.004dc23b
004dc213 ?|. ?8b7424 10 ? ? mov esi, dword ptr ss:[esp+10]
004dc217 ?|. ?53 ? ? ? ? ? ?push ebx
004dc218 ?|. ?8bdd ? ? ? ? ?mov ebx, ebp
004dc21a ?|> ?8bc6 ? ? ? ? ?/mov eax, esi
004dc21c ?|. ?33d2 ? ? ? ? ?|xor edx, edx
004dc21e ?|. ?f7f7 ? ? ? ? ?|div edi
004dc220 ?|. ?8bc6 ? ? ? ? n
bsp;|mov eax, esi
004dc222 ?|. ?0fafd1 ? ? ? ?|imul edx, ecx
004dc225 ?|. ?895424 14 ? ? |mov dword ptr ss:[esp+14], edx
004dc229 ?|. ?33d2 ? ? ? ? ?|xor edx, edx
004dc22b ?|. ?f7f7 ? ? ? ? ?|div edi
004dc22d ?|. ?8b5424 14 ? ? |mov edx, dword ptr ss:[esp+14]
004dc231 ?|. ?03d0 ? ? ? ? ?|add edx, eax
004dc233 ?|. ?4b ? ? ? ? ? ?|dec ebx
004dc234 ?|. ?8bf2 ? ? ? ? ?|mov esi, edx
004dc236 ?|.^ 75 e2 ? ? ? ? jnz short e.004dc21a
004dc238 ?|. ?5b ? ? ? ? ? ?pop ebx
004dc239 ?|. ?eb 04 ? ? ? ? jmp short e.004dc23f
004dc23b ?|> ?8b7424 10 ? ? mov esi, dword ptr ss:[esp+10]
004dc23f ?|> ?c1e1 0a ? ? ? shl ecx, 0a
004dc242 ?|. ?33ce ? ? ? ? ?xor ecx, esi
004dc244 ?|. ?33cf ? ? ? ? ?xor ecx, edi
004dc246 ?|. ?5f ? ? ? ? ? ?pop edi
004dc247 ?|. ?8bc1 ? ? ? ? ?mov eax, ecx
004dc249 ?|. ?5e ? ? ? ? ? ?pop esi
004dc24a ?|. ?c1e0 04 ? ? ? shl eax, 4
004dc24d ?|. ?33c5 ? ? ? ? ?xor eax, ebp
004dc24f ?|. ?5d ? ? ? ? ? ?pop ebp
004dc250 ?|. ?c1e0 14 ? ? ? shl eax, 14
004dc253 ?|. ?33c1 ? ? ? ? ?xor eax, ecx
004dc255 ?. ?c3 ? ? ? ? ? ?retn
//此处需要修改一下返回值,修改如下:
//004dc255 ? . /e9 b6ef0600 ? jmp e.0054b210
//0054b210 ? > 8035 80825900>xor byte ptr ds:[598280], 0ff ? ? ? ? ?; ?标记是否返回计算硬件代码
//0054b217 ? . ?74 05 ? ? ? ? je short e.0054b21e
//0054b219 ? . ?b8 42740200 ? mov eax, 27442 ? ? ? ? ? ? ? ? ? ? ? ? ; ?硬件代码后5位
//0054b21e ? > ?c3 ? ? ? ? ? ?retn
//到此,第一步分析和修改基本完成,保存修改内容后先不要重新载入od.
//用ue或winhex修改[00594ce0-00400000=00194ce0]此处修改内容,把 "11 13 05 cc" 改成 "00 00 00 00"
//修改好以后保存文件,再使用od重新载入!
//此时,[f9]运行后,易语言会出现"系统执行文件被非法修改,请检查病毒并重新安装!"的文件校验错误提示...
----------------------
2.第二步如何定位文件校验关键位置及修改方法...
//因为修改后的主程序在运行时会出现信息框提示,那最简单的方法也就是直接api断点: bp messageboxa
----------------------
004317af ?|. ?53 ? ? ? ? ? ?push ebx ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; /style
004317b0 ?|. ?50 ? ? ? ? ? ?push eax ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |title
004317b1 ?|. ?51 ? ? ? ? ? ?push ecx ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |text
004317b2 ?|. ?57 ? ? ? ? ? ?push edi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |howner
004317b3 ?|. ?ff15 80c65400 call dword ptr ds:[<&user32.messageboxa>>; messageboxa
004317b9 ?|. ?8bf0 ? ? ? ? ?mov esi, eax
0012f00c ? 004317b9 ?/call 到 messageboxa 来自 e.004317b3
0012f010 ? 00000000 ?|howner = null
0012f014 ? 01096ee8 ?|text = "系统执行文件被非法修改,请检查病毒并重新安装!"
0012f018 ? 01096f38 ?|title = "警告:"
0012f01c ? 00000010 ?style = mb_ok|mb_iconhand|mb_applmodal
//断点停下来后我们返回跟踪
----------------------
0045f493 ? > e8 a8bc0700 ? call e.004db140
0045f498 ? . ?83c4 04 ? ? ? add esp, 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?返回到这里后,往上看跳转判断
0045eabf ? . ?8bcb ? ? ? ? ?mov ecx, ebx
0045eac1 ? . ?e8 eaa1ffff ? call e.00458cb0 ? ? ? ? ? ? ? ? ? ? ? ? ?; ?① 文件校验call
0045eac6 ? . ?85c0 ? ? ? ? ?test eax, eax
0045eac8 ? . /75 0a ? ? ? ? jnz short e.0045ead4 ? ? ? ? ? ? ? ? ? ? ; ?文件校验正确则跳
0045eaca ? . ?68 64a75800 ? push e.0058a764
0045eacf ? . ?e9 bf090000 ? jmp e.0045f493
----------------------
00458cb0 ?/$ ?55 ? ? ? ? ? ?push ebp
00458cb1 ?|. ?8bec ? ? ? ? ?mov ebp, esp
00458cb3 ?|. ?6a ff ? ? ? ? push -1
00458cb5 ?|. ?68 38fc5300 ? push e.0053fc38 ? ? ? ? ? ? ? ? ? ? ? ? ?; ?se 处理程序安装
00458cba ?|. ?64:a1 0000000>mov eax, dword ptr fs:[0]
00458cc0 ?|. ?50 ? ? ? ? ? ?push eax
00458cc1 ?|. ?64:8925 00000>mov dword ptr fs:[0], esp
00458cc8 ?|. ?81ec c40f0000 sub esp, 0fc4
00458cce ?|. ?53 ? ? ? ? ? ?push ebx
00458ccf ?|. ?56 ? ? ? ? ? ?push esi
00458cd0 ?|. ?57 ? ? ? ? ? ?push edi
00458cd1 ?|. ?8bf1 ? ? ? ? ?mov esi, ecx
00458cd3 ?|. ?8965 f0 ? ? ? mov [local.4], esp
00458cd6 ?|. ?8975 ec ? ? ? mov [local.5], esi
......................
00458da4 ?|> 3b7c9d d4 ? ? |cmp edi, dword ptr ss:[ebp+ebx*4-2c] ? ?; ? 在此记录 edi 的值及 ss:[ebp+ebx*4-2c] 的值
00458da8 ?|. ?75 11 ? ? ? ? |jnz short e.00458dbb
00458daa ?|. ?8b449d e4 ? ? |mov eax, dword ptr ss:[ebp+ebx*4-1c]
00458dae ?|. ?85c0 ? ? ? ? ?|test eax, eax
00458db0 ?|. ?75 09 ? ? ? ? |jnz short e.00458dbb
00458db2 ?|. ?8b75 ec ? ? ? |mov esi, [local.5]
00458db5 ?|. ?43 ? ? ? ? ? ?|inc ebx
00458db6 ?|.^ e9 6fffffff ? jmp e.00458d2a
----------------------
堆栈 ss:[0012fbc0]=003eda14 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; ?原主程序文件校验值 [1]
edi=000c64fe ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &nb
sp; ? ? ? ? ? ? ? ? ; ?现修改程序文件校验值 [1]
堆栈 ss:[0012fbc4]=0023d5f1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; ?原主程序文件校验值 [2]
edi=0047e5f1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?现修改程序文件校验值 [2]
----------------------
//记录完毕两个校验值以后,关闭od~ 是用ue或winhex工具打开主程序并查找十六进制 "14da3e00" 和 "f1d52300"
//找到以后,直接对应修改为现修改程序文件校验值 "fe640c00" 和 "f1e54700",最好还是把修改地址也记录一下,因为一会还需要用到!
//修改完成后,保存文件,运行主程序看看...o(∩_∩)o哈!没有提示了,而且也成功注册了,第二步就算完成了~
//但先别开心,因为易语言还有一个比较隐蔽的内存校验,如果不修改这个校验的话,所编译出来的程序是不会正常的!
----------------------
3.第三步,定位内存校验关键位置及修改方法...
//以前有些易语言修改版出现编译程序不稳定的情况,就都是由于内存校验这部分在作怪!
----------------------
//用od重新载入 [原版的主程序],然后直接在 oep 处下 "内存访问" 断点...//下完内存断点以后,并我们把之前所有的断点都取消,然后[f9]运行看看~
----------------------
00f29131 ? ?8a68 01 ? ? ? ? mov ch, byte ptr ds:[eax+1] ? ? ? ? ? ? ?; 内存断点在此处停下来了 [dp1.00f29131]
00f29134 ? ?8a50 ff ? ? ? ? mov dl, byte ptr ds:[eax-1]
00f29137 ? ?8a08 ? ? ? ? ? ?mov cl, byte ptr ds:[eax]
00f29139 ? ?83c0 04 ? ? ? ? add eax, 4
00f2913c ? ?c1e1 08 ? ? ? ? shl ecx, 8
00f2913f ? ?0bca ? ? ? ? ? ?or ecx, edx
00f29141 ? ?33d2 ? ? ? ? ? ?xor edx, edx
00f29143 ? ?8a50 fa ? ? ? ? mov dl, byte ptr ds:[eax-6]
00f29146 ? ?83c6 04 ? ? ? ? add esi, 4
00f29149 ? ?c1e1 08 ? ? ? ? shl ecx, 8
00f2914c ? ?0bca ? ? ? ? ? ?or ecx, edx
00f2914e ? ?894e fc ? ? ? ? mov dword ptr ds:[esi-4], ecx
00f29151 ? ?8d0c07 ? ? ? ? ?lea ecx, dword ptr ds:[edi+eax]
00f29154 ? ?3bcd ? ? ? ? ? ?cmp ecx, ebp
00f29156 ?^ 72 d5 ? ? ? ? ? jb short dp1.00f2912d
00f29158 ? ?5f ? ? ? ? ? ? ?pop edi
00f29159 ? ?5e ? ? ? ? ? ? ?pop esi
00f2915a ? ?5d ? ? ? ? ? ? ?pop ebp
00f2915b ? ?c2 0c00 ? ? ? ? retn 0c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; 返回
----------------------
004989dc ?|. ?8b4c24 28 ? ? mov ecx, dword ptr ss:[esp+28]
004989e0 ?|. ?8b5424 24 ? ? mov edx, dword ptr ss:[esp+24]
004989e4 ?|. ?51 ? ? ? ? ? ?push ecx
004989e5 ?|. ?8b4c24 24 ? ? mov ecx, dword ptr ss:[esp+24]
004989e9 ?|. ?52 ? ? ? ? ? ?push edx
004989ea ?|. ?51 ? ? ? ? ? ?push ecx
004989eb ?|. ?ffd0 ? ? ? ? ?call eax ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?call dp1.mgetmd5
004989ed ?|. ?8d4c24 08 ? ? lea ecx, dword ptr ss:[esp+8] ? ? ? ? n
bsp; ?; ?返回到此处
004989f1 ?|. ?c74424 18 fff>mov dword ptr ss:[esp+18], -1
//现在找到了取内存校验值的位置了,往上面下个硬件断点,然后再重新载入 [已修改过的主程序] 运行分析看看...
----------------------
00498940 ?/$ ?6a ff ? ? ? ? push -1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; ?取程序内存数据md5
00498942 ?|. ?68 c83f5400 ? push e.00543fc8 ? ? ? ? ? ? ? ? ? ? ? ? ?; ?se 处理程序安装
00498947 ?|. ?64:a1 0000000>mov eax, dword ptr fs:[0]
0049894d ?|. ?50 ? ? ? ? ? ?push eax
0049894e ?|. ?64:8925 00000>mov dword ptr fs:[0], esp
00498955 ?|. ?83ec 08 ? ? ? sub esp, 8
00498958 ?|. ?56 ? ? ? ? ? ?push esi
00498959 ?|. ?8bf1 ? ? ? ? ?mov esi, ecx
0049895b ?|. ?57 ? ? ? ? ? ?push edi
0049895c ?|. ?68 742c5700 ? push e.00572c74 ? ? ? ? ? ? ? ? ? ? ? ? ?; ?ascii "lib"
00498961 ?|. ?8d86 94080000 lea eax, dword ptr ds:[esi+894]
00498967 ?|. ?8d4c24 10 ? ? lea ecx, dword ptr ss:[esp+10]
0049896b ?|. ?50 ? ? ? ? ? ?push eax
0049896c ?|. ?51 ? ? ? ? ? ?push ecx
0049896d ?|. ?e8 5dfe0700 ? call e.005187cf
00498972 ?|. ?68 d8ab5800 ? push e.0058abd8 ? ? ? ? ? ? ? ? ? ? ? ? ?; ?ascii "dp1.fne"
00498977 ?|. ?8d5424 0c ? ? lea edx, dword ptr ss:[esp+c]
0049897b ?|. ?50 ? ? ? ? ? ?push eax
0049897c ?|. ?52 ? ? ? ? ? ?push edx
0049897d ?|. ?c74424 24 000>mov dword ptr ss:[esp+24], 0
00498985 ?|. ?e8 45fe0700 ? call e.005187cf
0049898a ?|. ?8d4c24 0c ? ? lea ecx, dword ptr ss:[esp+c]
0049898e ?|. ?c64424 18 02 ?mov byte ptr ss:[esp+18], 2
00498993 ?|. ?e8 eefb0700 ? call e.00518586
00498998 ?|. ?8b7c24 2c ? ? mov edi, dword ptr ss:[esp+2c]
0049899c ?|. ?85ff ? ? ? ? ?test edi, edi
0049899e ?|. ?74 07 ? ? ? ? je short e.004989a7
004989a0 ?|. ?8bcf ? ? ? ? ?mov ecx, edi
004989a2 ?|. ?e8 6afb0700 ? call e.00518511
004989a7 ?|> ?8b86 dc090000 mov eax, dword ptr ds:[esi+9dc]
004989ad ?|. ?85c0 ? ? ? ? ?test eax, eax
004989af ?|. ?75 11 ? ? ? ? jnz short e.004989c2
004989b1 ?|. ?8b4424 08 ? ? mov eax, dword ptr ss:[esp+8]
004989b5 ?|. ?50 ? ? ? ? ? ?push eax ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; /filename
004989b6 ?|. ?ff15 2cc45400 call dword ptr ds:[<&kernel32.loadlibrar>; loadlibrarya
004989bc ?|. ?8986 dc090000 mov dword ptr ds:[esi+9dc], eax
004989c2 ?|> ?8bb6 dc090000 mov esi, dword ptr ds:[esi+9dc]
004989c8 ?|. ?85f6 ? ? ? ? ?test esi, esi
004989ca ?|. &nb
sp;74 4a ? ? ? ? je short e.00498a16
004989cc ?|. ?68 90065900 ? push e.00590690 ? ? ? ? ? ? ? ? ? ? ? ? ?; /procnameorordinal = "mgetmd5"
004989d1 ?|. ?56 ? ? ? ? ? ?push esi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; |hmodule
004989d2 ?|. ?ff15 30c45400 call dword ptr ds:[<&kernel32.getprocadd>; getprocaddress
004989d8 ?|. ?85c0 ? ? ? ? ?test eax, eax
004989da ?|. ?74 3a ? ? ? ? je short e.00498a16
004989dc ?|. ?8b4c24 28 ? ? mov ecx, dword ptr ss:[esp+28]
004989e0 ?|. ?8b5424 24 ? ? mov edx, dword ptr ss:[esp+24]
004989e4 ?|. ?51 ? ? ? ? ? ?push ecx
004989e5 ?|. ?8b4c24 24 ? ? mov ecx, dword ptr ss:[esp+24]
004989e9 ?|. ?52 ? ? ? ? ? ?push edx
004989ea ?|. ?51 ? ? ? ? ? ?push ecx
004989eb ?|. ?ffd0 ? ? ? ? ?call eax ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?call dp1.mgetmd5
//当 [esp]=00401000 时注意把所有修改过的代码及断点取消,并把正确的md5值记录下来!
//0012f354 ? 00401000 ?校验起始指针,
//0012f358 ? 0014a20a ?校验数据大小
//0012f35c ? 0012f398 ?ascii "92070940bbb01c83641fcef4758b5a72"
//易语言 4.14 对应正确的md5值 92070940bbb01c83641fcef4758b5a72
004989ed ?|. ?8d4c24 08 ? ? lea ecx, dword ptr ss:[esp+8] ? ? ? ? ? ?; ?返回到此处
004989f1 ?|. ?c74424 18 fff>mov dword ptr ss:[esp+18], -1
004989f9 ?|. ?e8 88fb0700 ? call e.00518586
004989fe ?|. ?5f ? ? ? ? ? ?pop edi
004989ff ?|. ?b8 01000000 ? mov eax, 1
00498a04 ?|. ?5e ? ? ? ? ? ?pop esi
00498a05 ?|. ?8b4c24 08 ? ? mov ecx, dword ptr ss:[esp+8]
00498a09 ?|. ?64:890d 00000>mov dword ptr fs:[0], ecx
00498a10 ?|. ?83c4 14 ? ? ? add esp, 14
00498a13 ?|. ?c2 1000 ? ? ? retn 10
00498a16 ?|> ?85ff ? ? ? ? ?test edi, edi
00498a18 ?|. ?74 32 ? ? ? ? je short e.00498a4c
00498a1a ?|. ?8b5424 08 ? ? mov edx, dword ptr ss:[esp+8]
00498a1e ?|. ?8d4424 2c ? ? lea eax, dword ptr ss:[esp+2c]
00498a22 ?|. ?52 ? ? ? ? ? ?push edx
00498a23 ?|. ?68 7c065900 ? push e.0059067c
00498a28 ?|. ?50 ? ? ? ? ? ?push eax
00498a29 ?|. ?e8 d2620400 ? call e.004ded00
00498a2e ?|. ?83c4 0c ? ? ? add esp, 0c
00498a31 ?|. ?50 ? ? ? ? ? ?push eax
00498a32 ?|. ?8bcf ? ? ? ? ?mov ecx, edi
00498a34 ?|. ?c64424 1c 03 ?mov byte ptr ss:[esp+1c], 3
00498a39 ?|. ?e8 35fc0700 ? call e.00518673
00498a3e ?|. ?8d4c24 2c ? ? lea ecx, dword ptr ss:[esp+2c]
00498a42 ?|. ?c64424 18 02 ?mov byte ptr ss:[esp+18], 2
00498a47 ?|. ?e8 3afb0700 ? call e.00518586
00498a4c &nbs
p;|> ?8d4c24 08 ? ? lea ecx, dword ptr ss:[esp+8]
00498a50 ?|. ?c74424 18 fff>mov dword ptr ss:[esp+18], -1
00498a58 ?|. ?e8 29fb0700 ? call e.00518586
00498a5d ?|. ?8b4c24 10 ? ? mov ecx, dword ptr ss:[esp+10]
00498a61 ?|. ?5f ? ? ? ? ? ?pop edi
00498a62 ?|. ?33c0 ? ? ? ? ?xor eax, eax
00498a64 ?|. ?5e ? ? ? ? ? ?pop esi
00498a65 ?|. ?64:890d 00000>mov dword ptr fs:[0], ecx
00498a6c ?|. ?83c4 14 ? ? ? add esp, 14
00498a6f ?. ?c2 1000 ? ? ? retn 10
//我们就在 [004989eb] 此处进行修改修改吧,o(∩_∩)o~
//记得是修改 [已经修改过] 的那个主程序文件噢...
004989eb ? . /e9 30280b00 ? jmp e_cr_4_1.0054b220
004989f0 ? ? |90 ? ? ? ? ? ?nop
0054b220 ? > ffd0 ? ? ? ? ?call eax
0054b222 ? . ?8d4c24 08 ? ? lea ecx, dword ptr ss:[esp+8]
0054b226 ? . ?3e:817c24 f4 >cmp dword ptr ds:[esp-c], e.00401000 ? ? ; ?入口地址
0054b22f ? . ?75 3e ? ? ? ? jnz short e.0054b26f
0054b231 ? . ?3e:8b7c24 fc ?mov edi, dword ptr ds:[esp-4]
0054b236 ? . ?c707 39323037 mov dword ptr ds:[edi], 37303239
0054b23c ? . ?c747 04 30393>mov dword ptr ds:[edi+4], 30343930
0054b243 ? . ?c747 08 62626>mov dword ptr ds:[edi+8], 30626262
0054b24a ? . ?c747 0c 31633>mov dword ptr ds:[edi+c], 33386331
0054b251 ? . ?c747 10 36343>mov dword ptr ds:[edi+10], 66313436
0054b258 ? . ?c747 14 63656>mov dword ptr ds:[edi+14], 34666563
0054b25f ? . ?c747 18 37353>mov dword ptr ds:[edi+18], 62383537
0054b266 ? . ?c747 1c 35613>mov dword ptr ds:[edi+1c], 32376135
0054b26d ? . ?33ff ? ? ? ? ?xor edi, edi
0054b26f ? >^ e9 7dd7f4ff ? jmp e.004989f1
//修改完毕以后记得保存,不然白做了...
//最后我们还得重复一次 第二步 的文件校验值的修改!
----------------------
堆栈 ss:[0012fbc0]=000c64fe ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; ?原主程序文件校验值 [1]
edi=00135283 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?现修改程序文件校验值 [1]
堆栈 ss:[0012fbc4]=0047e5f1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; ?原主程序文件校验值 [2]
edi=0047e5f1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ; ?现修改程序文件校验值 [1]
----------------------
//到此为止...整个修改过程已经结束了~
//欢迎各位大侠们对此修改进行完美性的测试,也希望能与大家多多交流...
//授人以鱼,不如授之以渔,授人以鱼只救一时之急,授人以渔则可解一生之需。
//此次我就偷懒一下,不把修改好的文件发出来共享了,就只分享一下我的修改过程!
//也希望能让你们有一个亲自动手学习的机会!
--------------------------------------------------------------------------------
【经验总结】
1.修改程序取硬盘特征数值的算法过程,实现欺骗注册;
2.修改程序对自身文件校验的两个值;
3.替换主程序内存校验值,实现欺骗校验取值,并再次修改程序自身文件校验值!
更新内容:
易语言4.14版相对于4.13更新说明:
对易语言核心支持库、编译器、开发环境的更新:
1.修复了打印机对象的自定义纸张尺寸的支持问题
2.修复了打印机对象的打印份数的支持问题
3.修复了滑块条的选择长度不能到最大的问题
对
其它支持库的更新:
1.修改xml解析支持库,解决“xml树.取节点值文本()”返回的文本会失效的bug。
2.修改高级表格支持库,解决在鼠标按下和抬起之间收到时钟周期事件的情况下,无法收到“被单击”事件的bug。
3.修改扩展界面支持库三,解决单击卷帘菜单后导致日期框不能弹出下拉窗口的bug。
4.修改xp风格支持库,解决gdi资源泄露,以及在使用通用组件库六时组合框标题出现重影的bug。
5.修改扩展界面支持库一,解决树形框项目无法通过鼠标点击进入编辑状态的bug。
6.修改高级表格支持库,解决插入行/插入列在未指定行号/列号的情况下插入位置不正确的bug。
7.修改文本语音转换支持库,增加“机读文本.重新创建并初始化()”方法。
8.修改扩展界面支持库三,解决高级选择夹会导致所在窗口的收不到“首次激活”事件的bug,相应地修改了核心库和开发环境。
9.为所有支持库文件统一添加了版本信息。
10.修改应用接口支持库,增强“取快捷方式目标”命令功能,可以获取目标、参数、启始位置、图标、运行方式、快捷键、备注等信息。

|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|