软件标签: 易语言 编程工具

易语言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 ; |\\.\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 5A010000 jmp e.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]

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 |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 ; 现修改程序文件校验值 [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] ; 返回到此处

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 |. 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 |> 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.修改应用接口支持库,增强“取快捷方式目标”命令功能,可以获取目标、参数、启始位置、图标、运行方式、快捷键、备注等信息。

下载地址

远程下载