由于版权问题不会提供任何涉及程序的名字以及下载。一切只为研究学习,切忌。
我的第一个破解软件。比较简单,没有壳。验证采用本地注册码验证加网络验证。虽说是网络验证,但是感觉只是个空壳子,没有任何实质。也许是我没有深入分析注册码验证及verifycode码得生成经过的原因。总之,一半注册机,一半爆破。磕磕绊绊。
程序为了防止爆破,在程序开始运行阶段调用了MapFileAndCheckSum函数来检测exe或dll文件是否被篡改。这个也是我在爆破之后程序不能运行才察觉到的。
注册机只能通过本地验证,而网络验证部分用了爆破。其实两部分都可以爆破实现,只不过MapFileAndCheckSum函数发现的比较晚而已。
注册机本想用逆算法来实现。写到一半发现自己被自己搞得越来越乱套。
0041E359 . 68 40EA4800 PUSH ****.0048EA40 ; ASCII "C:\Program Files\**********.exe"
0041E35E . 897D D4 MOV DWORD PTR SS:[EBP-2C],EDI
0041E361 . 895D D8 MOV DWORD PTR SS:[EBP-28],EBX
0041E364 . FF15 FCD74600 CALL DWORD PTR DS:[<&imagehlp.MapFileAnd>; imagehlp.MapFileAndCheckSumA //这里检测了文件是否被修改。。。。
0041E36A . 85C0 TEST EAX,EAX
0041E36C . 75 0C JNZ SHORT ****.0041E37A
0041E36E . 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C]
0041E371 . 3B45 D8 CMP EAX,DWORD PTR SS:[EBP-28]
0041E374 . 0F85 81030000 JNZ ****.0041E6FB //如果程序被修改,这里会跳走 所以 这里需要nop掉 *关键爆破点1
0041E37A > 68 6C3E4700 PUSH ****.00473E6C ; ASCII ""
0041E37F . 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
0041E382 . E8 604BFEFF CALL ****.00402EE7
0041E387 . FF75 E0 PUSH DWORD PTR SS:[EBP-20] ; /MutexName
0041E38A . 895D FC MOV DWORD PTR SS:[EBP-4],EBX ; |
0041E38D . 53 PUSH EBX ; |Inheritable
0041E38E . 57 PUSH EDI ; |Access
0041E38F . FF15 2CD44600 CALL DWORD PTR DS:[<&KERNEL32.OpenMutexA>; \OpenMutexA
以下部分是网络验证(?)部分,成功验证则生成注册表键值。所以根据目标要生成注册表这一原则,尽量让程序往目标跳。
0042B1F5 > \FF75 DC PUSH DWORD PTR SS:[EBP-24]
0042B1F8 . E8 46620200 CALL ****.00451443
0042B1FD . 83F8 1E CMP EAX,1E
0042B200 . 59 POP ECX
0042B201 . 7D 77 JGE SHORT ****.0042B27A ; 这里需要跳1
0042B203 . 83F8 02 CMP EAX,2
0042B206 . 75 21 JNZ SHORT ****.0042B229
0042B208 . 51 PUSH ECX
0042B209 . 8BCC MOV ECX,ESP
0042B20B . 8965 F0 MOV DWORD PTR SS:[EBP-10],ESP
0042B20E . 68 24534700 PUSH ****.00475324
0042B213 . E8 CF7CFDFF CALL ****.00402EE7
0042B218 . 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
0042B21B . 50 PUSH EAX
0042B21C . E8 EFEEFFFF CALL ****.0042A110
0042B221 . 59 POP ECX
0042B222 . 59 POP ECX
0042B223 . C645 FC 0A MOV BYTE PTR SS:[EBP-4],0A
0042B227 .^ EB 9D JMP SHORT ****.0042B1C6
0042B229 > 3BC7 CMP EAX,EDI
0042B22B . 74 29 JE SHORT ****.0042B256
0042B22D . 83F8 14 CMP EAX,14
0042B230 . 74 24 JE SHORT ****.0042B256
0042B232 . 51 PUSH ECX
0042B233 . 8BCC MOV ECX,ESP
0042B235 . 8965 F0 MOV DWORD PTR SS:[EBP-10],ESP
0042B238 . 68 E4524700 PUSH ****.004752E4
0042B23D . E8 A57CFDFF CALL ****.00402EE7
0042B242 . 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
0042B245 . 50 PUSH EAX
0042B246 . E8 C5EEFFFF CALL ****.0042A110
0042B24B . 59 POP ECX
0042B24C . 59 POP ECX
0042B24D . C645 FC 0C MOV BYTE PTR SS:[EBP-4],0C
0042B251 .^ E9 70FFFFFF JMP ****.0042B1C6
0042B256 > 51 PUSH ECX
0042B257 . 8BCC MOV ECX,ESP
0042B259 . 8965 F0 MOV DWORD PTR SS:[EBP-10],ESP
0042B25C . 68 0C534700 PUSH ****.0047530C
0042B261 . E8 817CFDFF CALL ****.00402EE7
0042B266 . 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
0042B269 . 50 PUSH EAX
0042B26A . E8 A1EEFFFF CALL ****.0042A110
0042B26F . 59 POP ECX
0042B270 . 59 POP ECX
0042B271 . C645 FC 0B MOV BYTE PTR SS:[EBP-4],0B
0042B275 .^ E9 4CFFFFFF JMP ****.0042B1C6
0042B27A > 8B4D E4 MOV ECX,DWORD PTR SS:[EBP-1C] ; 跳到这里1
0042B27D . 8BD1 MOV EDX,ECX
0042B27F . 6BD2 0D IMUL EDX,EDX,0D
0042B282 . 81EA 2E160000 SUB EDX,162E
0042B288 . 3BD0 CMP EDX,EAX
0042B28A . 74 46 JE SHORT ****.0042B2D2 ; 这里必须跳2
0042B28C . 51 PUSH ECX
0042B28D . 8BCC MOV ECX,ESP
0042B28F . 8965 F0 MOV DWORD PTR SS:[EBP-10],ESP
0042B292 . 68 E4524700 PUSH ****.004752E4
0042B297 . E8 4B7CFDFF CALL ****.00402EE7
0042B29C . 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
0042B29F . 50 PUSH EAX
0042B2A0 . E8 6BEEFFFF CALL ****.0042A110
0042B2A5 . 59 POP ECX
0042B2A6 . 59 POP ECX
0042B2A7 . FF30 PUSH DWORD PTR DS:[EAX] ; /Arg1
0042B2A9 . 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
0042B2AC . C645 FC 0D MOV BYTE PTR SS:[EBP-4],0D ; |
0042B2B0 . E8 2A1F0000 CALL ****.0042D1DF ; \****.0042D1DF
0042B2B5 . 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0042B2B8 . 83C1 F0 ADD ECX,-10
0042B2BB . C645 FC 07 MOV BYTE PTR SS:[EBP-4],7
0042B2BF . E8 DF5DFDFF CALL ****.004010A3
0042B2C4 . 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0042B2C7 . 57 PUSH EDI ; /Arg1
0042B2C8 . E8 F61F0000 CALL ****.0042D2C3 ; \****.0042D2C3
0042B2CD . E9 B8020000 JMP ****.0042B58A
0042B2D2 > 6BC9 0B IMUL ECX,ECX,0B ; 2跳到这里,防止程序执行上一条语句jmp跳走
0042B2D5 . 81F1 07060000 XOR ECX,607
0042B2DB . 8BC1 MOV EAX,ECX
0042B2DD . 894D EC MOV DWORD PTR SS:[EBP-14],ECX
0042B2E0 . B9 10270000 MOV ECX,2710
0042B2E5 . 3BC1 CMP EAX,ECX
0042B2E7 . 7D 0A JGE SHORT ****.0042B2F3
0042B2E9 > 6BC0 0A IMUL EAX,EAX,0A
0042B2EC . 3BC1 CMP EAX,ECX
0042B2EE .^ 7C F9 JL SHORT ****.0042B2E9
0042B2F0 . 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
0042B2F3 > 3D A0860100 CMP EAX,186A0
0042B2F8 . 7C 15 JL SHORT ****.0042B30F
0042B2FA . EB 03 JMP SHORT ****.0042B2FF
0042B2FC > 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
0042B2FF > 6A 0A PUSH 0A
0042B301 . 99 CDQ
0042B302 . 59 POP ECX
0042B303 . F7F9 IDIV ECX
0042B305 . 3D A0860100 CMP EAX,186A0
0042B30A . 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
0042B30D .^ 7D ED JGE SHORT ****.0042B2FC
0042B30F > 893D 40F04800 MOV DWORD PTR DS:[48F040],EDI
0042B315 . E8 6CAB0000 CALL ****.00435E86
0042B31A . 50 PUSH EAX
0042B31B . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
0042B31E . E8 816DFDFF CALL ****.004020A4
0042B323 . FF75 EC PUSH DWORD PTR SS:[EBP-14]
0042B326 . 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
0042B329 . 68 F0EF4600 PUSH ****.0046EFF0 ; ASCII "%d"
0042B32E . 50 PUSH EAX
0042B32F . C645 FC 0E MOV BYTE PTR SS:[EBP-4],0E
0042B333 . E8 CD74FDFF CALL ****.00402805
0042B338 . 53 PUSH EBX
0042B339 . 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
0042B33C . 68 C41C4700 PUSH ****.00471CC4 ; ASCII "All"
0042B341 . 50 PUSH EAX
0042B342 . 895D D4 MOV DWORD PTR SS:[EBP-2C],EBX
0042B345 . E8 27D5FFFF CALL ****.00428871
0042B34A . 83C4 18 ADD ESP,18
0042B34D . 85C0 TEST EAX,EAX
0042B34F . 0F84 C3000000 JE ****.0042B418 ; 这里是boss,不要慌,不要跳
0042B355 . 8D8E 10040000 LEA ECX,DWORD PTR DS:[ESI+410]
0042B35B . 8B01 MOV EAX,DWORD PTR DS:[ECX]
以上爆破加注册机基本解决了程序的激活问题。