5个步骤则实现真正的完美破解易语言主程序...
第一次写破解文章, 写得不好别见怪...
----------------------
159544386.key [企业注册版]
159544386 → 0x09827442(十六进制)
09800000
00027442 → 硬件代码计算值
3A7FEF86D9A344BD279538025A6B881ED798010002DEEA0151B9C722075E0618F6B153ACB49B357E402DF46BB4169E78E7CD6760544CD4C4419373A6AEEA5B2CA46C0CDB3A2CD98E980EF419DBE10EA4F470B097172A44DB547D505DAF6187B8FCC4153A7FE91BEB33BE7FC71913C0FD26F7F6FE36B24C824FCFA51F2795EF0294CDC0C2F9917B370A5DB5F2D95BC05D328D0BA8D28442C2B451D7AE3E25E0585793F9BA8E4CC40460E58F38A49233145220218FEB7371944C5D41184B329739CB70792D6D04823C5AF45FE62DE7A3F6420FFECF6EAD0F8A83D9D21BF6433FABA1732B91CF085F0CDD4F0CA305FED4B717B4D1390B25ADD104578B63D252535BE04E362ADA6820117E8E274E7D93A0605EAD954C3AFFF3C8F4BADE8
----------------------
151435326.key [专业注册版]
151435326 → 0x0906B83E(十六进制)
09000000
0006B83E → 硬件代码计算值
7D8FE15E87E6FC5A7E8432678170D818D79801000138B001B7A795107368674E3311BE3351873AC4403F63902A98DB75F94CA0FF0178C02999C46E4E1CB45173F6A2766015B730EC1164572D01A56EA846E4EE5917480B0ABFD80D04B2352F155A427520D9C5D500B193F79E032A430825E58E393B5CEE3C67F43B6313B3061B60FE9614BD12083E0FD1CA2653036C53658CE090886455C534A0BD439B5C8362214E9CD409F37915BC0ED51F2A8B3A48B5E2E6D1E12234C58B18E0D66D1CAD8C750A49F666DB682990AC6E2BE768532E535A277178000EBF06C788BE40EDE2E25802558F193E1E83CAC3933C08361A83C2616CE5186E512360AE7C18AD54C99B468609E26FE857CF9AD6434E1E64DA7EDDDEE3E65E3A7CCC4CE81A
----------------------
194958212.key [专业注册版]
194958212 → 0x0B9ED384(十六进制)
0B900000
000ED384 → 硬件代码计算值
E07DF3182ABAFF3BC8A9BC320E51F56FD798010000126F00C6CBA216CA3E5F5CC66713D0747C4A1B1AFAB00E118717BD1CA6D76A5F3E731D0B0000A39D446622A327523EE2CB35DFCE3EB03604432A16730DEDB99BA2A1B49AE270CC8DC14830825D82507B9A13FCC7C42AD5A13D7087D68CE6AEF78CBC1268ADAB64F45231F42BAA1859DD1D8301B02379D188CF814A1C0C90E68935F172FAECEE671A47B7B98EC8A9174488B2E39878FE3B45F7D7AF26150998534FAE40C847EB8C133F422E96128D079FD3B0F46E6D08DEE909E019CA59AEDA706D036778B2B77BFA58439D5106730AA9C8A83C1335F2EDC8D87475ACA2BCE193DFED29F92ECABC1875E1D4C8E581377F0C489A61D87000354CC5D299F48B908E0F087AE2A52C3
----------------------
1.[企业注册版]KEY的硬件代码[159544386]计算过程...
004DC1F0 $ 8B4C24 0C MOV ECX, DWORD PTR SS:[ESP+C] ; 硬件代码计算入口
004DC1F4 . 55 PUSH EBP
004DC1F5 . 8B6C24 14 MOV EBP, DWORD PTR SS:[ESP+14]
004DC1F9 . 56 PUSH ESI
004DC1FA . 57 PUSH EDI
004DC1FB . 8B7C24 14 MOV EDI, DWORD PTR SS:[ESP+14]
004DC1FF . 85ED TEST EBP, EBP
004DC201 . 7E 28 JLE SHORT e.004DC22B
......省略部分代码
04DC23D . 33C5 XOR EAX, EBP
004DC23F . 5D POP EBP
004DC240 . C1E0 14 SHL EAX, 14
004DC243 . 33C1 XOR EAX, ECX
004DC245 . C3 RETN ; EAX返回硬件代码后5位
通过跳转实现返回需要修改的硬件代码计算值
004DC245 . /E9 86EF0600 JMP 0054B1D0 ; ←破解后
0054B1D0 > \8035 CAB15400>XOR BYTE PTR DS:[54B1CA], 0FF ; 标记是否返回计算硬件代码
0054B1D7 . 74 05 JE SHORT 0054B1DE
0054B1D9 . B8 42740200 MOV EAX, 27442 ; 硬件代码后5位
0054B1DE > C3 RETN
//破解硬件代码计算
----------------------
2.因为上面的[159544386.key]早就被易语言公司封掉了,所以必须找到解封ID的计算代码
0040991B 8B55 D0 MOV EDX, DWORD PTR SS:[EBP-30]
0040991E 81F2 77C62D63 XOR EDX, 632DC677
00409924 8955 D0 MOV DWORD PTR SS:[EBP-30], EDX
00409927 8B85 10FFFFFF MOV EAX, DWORD PTR SS:[EBP-F0]
0040992D 35 50B3AD89 XOR EAX, 89ADB350 ; 原计算值
0040991B 8B55 D0 MOV EDX, DWORD PTR SS:[EBP-30]
0040991E 81F2 77C62D63 XOR EDX, 632DC677
00409924 8955 D0 MOV DWORD PTR SS:[EBP-30], EDX
00409927 8B85 10FFFFFF MOV EAX, DWORD PTR SS:[EBP-F0]
0040992D 35 55B3AD89 XOR EAX, 89ADB355 ; 解封硬件代码
00409932 8945 EC MOV DWORD PTR SS:[EBP-14], EAX
//解封硬件代码计算[1]
----------------------
3.此处是最主要的解封ID计算值,如果不修改的话,是永远不能使用[159544386.key]进行注册的
00594CE0 1113 ; ←破解前
00594CE2 05CC
00594CE0 0000 ; ←破解后
00594CE2 0000
//解封硬件代码计算[2]
----------------------
4.一直以来,很多人都说易语言主程序没办法完美破解,是因为吴涛在主程序内做了很多暗桩...
其实这些暗桩的最终来源都在于内存[00401000]-[0054B1CA]内的可执行代码的MD5校验值
如果这个MD5校验值对不上的话,到后面就会出现很多随机的暗桩错误了.
004989CC |. 8B4C24 28 MOV ECX, DWORD PTR SS:[ESP+28]
004989D0 |. 8B5424 24 MOV EDX, DWORD PTR SS:[ESP+24]
004989D4 |. 51 PUSH ECX ; [*MD5校验取值地址]
004989D5 |. 8B4C24 24 MOV ECX, DWORD PTR SS:[ESP+24]
004989D9 |. 52 PUSH EDX
004989DA |. 51 PUSH ECX
004989DB |. FFD0 CALL EAX ; dp1.MGetMD5
004989DD |. 8D4C24 08 LEA ECX, DWORD PTR SS:[ESP+8]
004989E1 |. C74424 18 FFF>MOV DWORD PTR SS:[ESP+18], -1
直接使用跳转检测计算的MD5字符串是否正确并进行修改.
该值也算比较牛的...只要下一个断点就会改变计算值的了,所以在计算的时候要把所有断点都取消.
004989DB . /E9 00280B00 JMP e.0054B1E0
004989E0 |90 NOP
0054B1E0 > \50 PUSH EAX
0054B1E1 . 8B4424 0C MOV EAX, DWORD PTR SS:[ESP+C]
0054B1E5 A3 3CB25400 MOV DWORD PTR DS:[54B23C], EAX
0054B1EA . 58 POP EAX
0054B1EB . FFD0 CALL EAX
0054B1ED . 50 PUSH EAX
0054B1EE A1 3CB25400 MOV EAX, DWORD PTR DS:[54B23C]
0054B1F3 8138 66646266 CMP DWORD PTR DS:[EAX], 66626466 ; 此处[66626466]为修改后主程序的内存MD5前4位
0054B1F9 . 75 37 JNZ SHORT e.0054B232
0054B1FB . C700 31393031 MOV DWORD PTR DS:[EAX], 31303931
0054B201 . C740 04 64616>MOV DWORD PTR DS:[EAX+4], 36616164
0054B208 . C740 08 64616>MOV DWORD PTR DS:[EAX+8], 65666164
0054B20F . C740 0C 38346>MOV DWORD PTR DS:[EAX+C], 61663438
0054B216 . C740 10 61326>MOV DWORD PTR DS:[EAX+10], 35633261
0054B21D . C740 14 61656>MOV DWORD PTR DS:[EAX+14], 34646561
0054B224 . C740 18 39373>MOV DWORD PTR DS:[EAX+18], 31323739
0054B22B . C740 1C 64613>MOV DWORD PTR DS:[EAX+1C], 62366164
0054B232 > 58 POP EAX
0054B233 . 8D4C24 08 LEA ECX, DWORD PTR SS:[ESP+8]
0054B237 .^ E9 A5D7F4FF JMP e.004989E1
1901daa6dafe84faa2c5aed49721da6b [*正确内存校验值]
//内存校验
----------------------
5.最后就是解决易语言主程序的文件自校验值了
00458D95 8B82 48090000 MOV EAX, DWORD PTR DS:[EDX+948]
00458D9B 8D8A 48090000 LEA ECX, DWORD PTR DS:[EDX+948]
00458DA1 FF50 28 CALL DWORD PTR DS:[EAX+28]
00458DA4 3B7C9D D4 CMP EDI, DWORD PTR SS:[EBP+EBX*4-2C] ; *此处EDI值为现时计算文件校验值
在[00458DA4]处直接下硬件断点,此处会断下2次,记录下EDI里的值,再对应修改则完成.
DS:[00588CBC]=0019C9AE
004D184E
0x0188CBC ; ←文件校验地址[1]
//文件校验
DS:[00588CC0]=000347B1
006777B1
0x0188CC0 ; ←文件校验地址[2]
//文件校验
----------------------
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)