用dump出的trm32.ime替换原来的文件。再次运行输入法管理器。选天然码,点“属性”,将弹出MESSAGEBOX说没有指纹盘或disk serial不对。control-n激活trw2k,“pmodule”,“确定”后,回到trw2k::00401514 89442410 mov dword ptr [esp+10], eax:00401518 8B442434 mov eax, dword ptr [esp+34]:0040151C 50 push eax:0040151D E88EFCFFFF call 004011B0 〈=====进入:00401522 8BD8 mov ebx, eax:00401524 3BDE cmp ebx, esi:00401526 7528 jne 00401550:00401528 56 push esi* Possible StringData Ref from Data Obj ->"DiskSerial"|:00401529 68DC704000 push 004070DC:0040152E B8847F4000 mov eax, 00407F84* Possible StringData Ref from Data Obj ->"Disk not exists or process failed "->"!"|:00401533 68B8704000 push 004070B8:00401538 56 push esi:00401539 89442424 mov dword ptr [esp+24], eax:0040153D 89442428 mov dword ptr [esp+28], eax:00401541 89442420 mov dword ptr [esp+20], eax* Reference To: USER32.MessageBoxA, Ord:01BEh|:00401545 FF15C8604000 Call dword ptr [004060C8]:0040154B E9A1000000 jmp 004015F1
注意这时是在getdiskserial.exe的领空。(也就是说trm32.ime产生getdiskserial.exe进程)。往上看,注意0040151D处的call 004011B0,在此处下断点,再次运行进入“call 004011B0”来到这:017F:00401439 50 PUSH EAX017F:0040143A 8D8C2488030000 LEA ECX,[ESP+0388]017F:00401441 6A04 PUSH BYTE +04017F:00401443 51 PUSH ECX017F:00401444 6A00 PUSH BYTE +00017F:00401446 6A00 PUSH BYTE +00017F:00401448 6A01 PUSH BYTE +01017F:0040144A 56 PUSH ESI017F:0040144B FF1514604000 CALL `KERNEL32!DeviceIoControl` 〈=调用vxd017F:00401451 56 PUSH ESI017F:00401452 FF151C604000 CALL `KERNEL32!FindCloseChangeNotification`017F:00401458 8BB42490130000 MOV ESI,[ESP+1390]017F:0040145F 8A843484030000 MOV AL,[ESP+ESI+0384]017F:00401466 84C0 TEST AL,AL 〈==是否有指纹盘或disk serial ?017F:00401468 744D JZ 004014B7 〈==没有就跳017F:0040146A 8BC6 MOV EAX,ESI
017F:0040144B处调用diskserial.vxd绝对读磁盘,017F:00401468处是判断。因为没有指纹盘,将此处改为nop;nop;替换getdiskserial.exe(在window的system下)。
再次运行,这次可以来到“属性”窗口,点“确定”可来到注册窗口,我的机器码为123456789012,输入用户名leo_cyl,注册码12121212。下断点hmemcpy,跟踪来到这里::10001FC2 8D4C240C lea ecx, dword ptr [esp+0C]:10001FC6 8D542414 lea edx, dword ptr [esp+14]:10001FCA 51 push ecx:10001FCB 8D442434 lea eax, dword ptr [esp+34]:10001FCF 52 push edx:10001FD0 50 push eax:10001FD1 E85A5E0000 call 10007E30:10001FD6 83C40C add esp, 0000000C:10001FD9 E822600000 call 10008000 《=====注意:10001FDE A1ACF90110 mov eax, dword ptr [1001F9AC]:10001FE3 6A00 push 00000000:10001FE5 85C0 test eax, eax:10001FE7 7425 je 1000200E 〈===跳的话就注册失败:10001FE9 6878F10010 push 1000F178:10001FEE 686CF10010 push 1000F16C:10001FF3 56 push esi* Reference To: user32.MessageBoxA, Ord:01B7h|:10001FF4 FF15A0D10010 Call dword ptr [1000D1A0]:10001FFA 6A01 push 00000001:10001FFC 56 push esi* Reference To: user32.EndDialog, Ord:00B9h|:10001FFD FF1590D20010 Call dword ptr [1000D290]:10002003 5F pop edi:10002004 5E pop esi:10002005 33C0 xor eax, eax:10002007 5B pop ebx:10002008 83C438 add esp, 00000038:1000200B C21000 ret 0010