![]() |
马甲透视SVKP 1.3x 之Registry Medic 【目 标】: Registry Medic 2.98 【工 具】:OllyDbg 1.1b(DIY版) 【任 务】:不脱马甲,巧妙注册 【操作平台】:WINDOWS 2000 ADV sp2 【作 者】:loveboom[DFCG] 【相关链接】:www.skycn.com(好像是这里 |
看完后再次回来: 004E23EB |. 85C0 TEST EAX,EAX 004E23ED |. 75 45 JNZ SHORT RegMedic.004E2434 // 这里一定要跳不跳则over 004E23EF |> 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14] // 跳到这里就over了 004E23F2 |. BA 14254E00 MOV EDX,RegMedic.004E2514 // ASCII "Registration failed. Please try again!" 004E23F7 |. E8 4419F2FF CALL RegMedic.00403D40 004E23FC |. 6A 30 PUSH 30 上面跳成功后来到这里: 004E2434 |> \8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] // 注册码入edx 004E2437 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] // 用户名入eax 004E243A |. E8 5D9FFAFF CALL RegMedic.0048C39C //这里可以进去看看: 0048C39C /$Content$nbsp; 55 PUSH EBP 0048C39D |. 8BEC MOV EBP,ESP 0048C39F |. B9 06000000 MOV ECX,6 0048C3A4 |> 6A 00 /PUSH 0 0048C3A6 |. 6A 00 |PUSH 0 0048C3A8 |. 49 |DEC ECX 0048C3A9 |.^ 75 F9 \JNZ SHORT RegMedic.0048C3A4 0048C3AB |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX // EBP-8=假码 0048C3AE |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX // [EBP-4]=用户名 0048C3B1 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 0048C3B4 |. E8 237DF7FF CALL RegMedic.004040DC 0048C3B9 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] 0048C3BC |. E8 1B7DF7FF CALL RegMedic.004040DC 0048C3C1 |. 33C0 XOR EAX,EAX 0048C3C3 |. 55 PUSH EBP 0048C3C4 |. 68 90C54800 PUSH RegMedic.0048C590 0048C3C9 |. 64:FF30 PUSH DWORD PTR FS:[EAX] 0048C3CC |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 0048C3CF |. B2 01 MOV DL,1 0048C3D1 |. A1 58324700 MOV EAX,DWORD PTR DS:[473258] 0048C3D6 |. E8 7D6FFEFF CALL RegMedic.00473358 0048C3DB |. 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX 0048C3DE |. 33C0 XOR EAX,EAX 0048C3E0 |. 55 PUSH EBP 0048C3E1 |. 68 59C54800 PUSH RegMedic.0048C559 0048C3E6 |. 64:FF30 PUSH DWORD PTR FS:[EAX] 0048C3E9 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 0048C3EC |. BA 02000080 MOV EDX,80000002 0048C3F1 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] 0048C3F4 |. E8 FF6FFEFF CALL RegMedic.004733F8 0048C3F9 |. 33C9 XOR ECX,ECX 0048C3FB |. BA A4C54800 MOV EDX,RegMedic.0048C5A4 // ASCII "SoftWare\Classes\CLSID\{B087CE89-A8EE-4890-91E7-696B3F749500}" 0048C400 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] 0048C403 |. E8 5870FEFF CALL RegMedic.00473460 0048C408 |. 84C0 TEST AL,AL 0048C40A |. 74 68 JE SHORT RegMedic.0048C474 0048C40C |. BA ECC54800 MOV EDX,RegMedic.0048C5EC // ASCII "AppIdK" 0048C411 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] 0048C414 |. E8 2B78FEFF CALL RegMedic.00473C44 0048C419 |. 84C0 TEST AL,AL 0048C41B |. 74 57 JE SHORT RegMedic.0048C474 0048C41D |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14] 0048C420 |. BA ECC54800 MOV EDX,RegMedic.0048C5EC // ASCII "AppIdK" 0048C425 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] 0048C428 |. E8 AF75FEFF CALL RegMedic.004739DC 0048C42D |. 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18] 0048C430 |. BA 01000000 MOV EDX,1 0048C435 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] // 把我们输入的假码和注册表里的值连接起来. 0048C438 |. E8 6FFDFFFF CALL RegMedic.0048C1AC 0048C43D |. FF75 E8 PUSH DWORD PTR SS:[EBP-18] // push第一部分值’071F3A81002C5C7CFE34’ 0048C440 |. 68 FCC54800 PUSH RegMedic.0048C5FC 0048C445 |. 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0048C448 |. BA 02000000 MOV EDX,2 // 这里开始取第二部分了 0048C44D |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] 0048C450 |. E8 57FDFFFF CALL RegMedic.0048C1AC // 这个Call就是取值过程 0048C455 |. FF75 E4 PUSH DWORD PTR SS:[EBP-1C] // 取出的第二部分入栈 0048C458 |. 68 FCC54800 PUSH RegMedic.0048C5FC 0048C45D |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10] …… 0048C4ED |. E8 D66EFEFF CALL RegMedic.004733C8 0048C4F2 |. FF75 F0 PUSH DWORD PTR SS:[EBP-10] // push第一部分和第二部分连接后的值 0048C4F5 |. 8D55 D0 LEA EDX,DWORD PTR SS:[EBP-30] 0048C4F8 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] // EAX=用户名bmd2chen@tom.com 0048C4FB |. E8 0C080000 CALL RegMedic.0048CD0C 0048C500 |. FF75 D0 PUSH DWORD PTR SS:[EBP-30] // push 值:"45205DEE712FB90D5AB957BC01A7C3AC"也就是第三部分 0048C503 |. 68 FCC54800 PUSH RegMedic.0048C5FC 0048C508 |. FF75 F8 PUSH DWORD PTR SS:[EBP-8] // push 假码 0048C50B |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10] 0048C50E |. BA 04000000 MOV EDX,4 0048C513 |. E8 D07AF7FF CALL RegMedic.00403FE8 0048C518 |. B1 01 MOV CL,1 0048C51A |. BA A4C54800 MOV EDX,RegMedic.0048C5A4 // ASCII "SoftWare\Classes\CLSID\{B087CE89-A8EE-4890-91E7-696B3F749500}" 0048C51F |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] 0048C522 |. E8 396FFEFF CALL RegMedic.00473460 0048C527 |. 84C0 TEST AL,AL 0048C529 |. 74 18 JE SHORT RegMedic.0048C543 0048C52B |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10] // 这里再次取注册表里的值 0048C52E |. BA ECC54800 MOV EDX,RegMedic.0048C5EC // ASCII "AppIdK" 0048C533 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] 后面就没看跟它转了,因为再跟就跑去壳里去了. 现在回到这里: 004E243F |. E8 90AAFAFF CALL RegMedic.0048CED4 //这里就跟就会在壳代码里晕来晕去(由此我个人猜它应该是用svkp1.3x sdk加的壳),过了按F8过这里时会有异常,所以我又懒一下,跟了第一次,就不再有第二次了。 004E2444 |. A1 E0C74F00 MOV EAX,DWORD PTR DS:[4FC7E0] //注意这里,这里如果[4FC7E0]=1的话就注册成功,等于0的话就失败,所以我这里也用fly大侠的“狸猫换太子”给它易容。 004E2449 |. 8038 00 CMP BYTE PTR DS:[EAX],0 004E244C |. 74 25 JE SHORT RegMedic.004E2473 004E244E |. A1 64C84F00 MOV EAX,DWORD PTR DS:[4FC864] // 这里EAX能等于0,否则就完了 004E2453 |. 8338 00 CMP DWORD PTR DS:[EAX],0 004E2456 |. 74 0C JE SHORT RegMedic.004E2464 // 这里就是"生死"跳,跳转成功就是死,否则就生 004E2458 |. A1 64C84F00 MOV EAX,DWORD PTR DS:[4FC864] 004E245D |. 8B00 MOV EAX,DWORD PTR DS:[EAX] 004E245F |. E8 94D0FFFF CALL RegMedic.004DF4F8 004E2464 |> 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14] 004E2467 |. BA 50254E00 MOV EDX,RegMedic.004E2550 // ASCII "Thank you for registering Registry Medic." 004E246C |. E8 CF18F2FF CALL RegMedic.00403D40 004E2471 |. EB 0D JMP SHORT RegMedic.004E2480 004E2473 |> 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14] 004E2476 |. BA 14254E00 MOV EDX,RegMedic.004E2514 // ASCII "Registration failed. Please try again!" 004E247B |. E8 C018F2FF CALL RegMedic.00403D40 …… 看完一堆代码后,我们就开始易容了。 在数据窗口里找个是01的地方,我自己找的是4E4359,因为我发现这里从一开始到后面这里的值都是01. 狸猫换太子开始了,在程序地盘里CTRL+F7找MOV EAX,DWORD PTR DS:[4FC7E0]一共找到三个地方: 004B2CF4 A1 E0C74F00 MOV EAX,DWORD PTR DS:[4FC7E0] //改为 004B2CF4 B8 59434E00 MOV EAX,RegMedic.004E4359 004E2444 A1 E0C74F00 MOV EAX,DWORD PTR DS:[4FC7E0] //改为 004E2444 B8 59434E00 MOV EAX,RegMedic.004E4359 004E25C8 A1 E0C74F00 MOV EAX,DWORD PTR DS:[4FC7E0] //改为 004E25C8 B8 59434E00 MOV EAX,RegMedic.004E4359 全部改完后,现在就是注册版了,这样重开后还是提示没注册呀,不要急,当然是这样的了,我们再做一个loader那不就可以了. 用keymaker做一个内存补丁(也就是loader了): 修改地址 修改长度 原始指令 修改指令 4E2444 4 A1E0C74F B859434E 4B2CF4 4 A1E0C74F B859434E 4E25C8 4 A1E0C74F B859434E 现在试试怎么样,注册成功了吧.注册码长度为&H27位的情况也这样解决它。 到这里我也应该收工了,我的问题还望各位大侠指点一二。各位老大看完了不要忘了帮我顶一下,我可是一中午没睡哦.我菜鸟一个所以文章中不可避免的存在问题,请多指教! 【后 记】: 做什么事都要灵活一点,如果没什么收获的话,不访和MM聊一下(我一下楼好多PL护士MM,今天的灵感多少来自她们的),也许就有灵感了。至于是不是真的是SDK的我也不敢肯定的说,因为并没有什么东西可以证明。 |