【脱文作者】 simonzh2000
【使用工具】 Peid0.92, Ollydbg1.10B(反Antidbg版), ImportREC1.60, LordPE, Winhex
【破解平台】 Win2000SP4 English
【软件名称】 XieXie Master 1.0.10
【软件简介】 一个法国人的电脑中国象棋,棋力超强,接近大师级水平
【软件大小】 912K
【加壳方式】 ACProtect 1.21 使用Stolen Code, API Relocation, Code Replace, SEH等技术 特殊技术有 Dynamic Encrypt, Embedded Protect, RSA_Lock Code
【作者声明】 上次那篇文章是关于 ACProtect 1.10 , 1.21 相比 1.10 主要有两点改进 1. Stolen Code 长度大了 2. 不能直接用 ImportREC
同时我的上篇文章中有好多错误, 现在看看都不好意思了, 这次更正. 感谢论坛的各位大侠. 本笔记只用于学习交流, 初学Crack,只是感兴趣技术,没有其他目的, 如有不妥之处, 请谅解.
008E8000 > 60 PUSHAD ; // 加壳后OEP, F7 008E8001 BA E95B5FF5 MOV EDX,F55F5BE9 008E8006 42 INC EDX 008E8007 85D7 TEST EDI,EDX
008E8035 8B1F MOV EBX,DWORD PTR DS:[EDI] 008E8037 2BD9 SUB EBX,ECX 008E8039 C1CB 09 ROR EBX,9 008E803C 2B5F 04 SUB EBX,DWORD PTR DS:[EDI+4] 008E803F 891F MOV DWORD PTR DS:[EDI],EBX 008E8041 81E9 55CA3D99 SUB ECX,993DCA55 008E8047 83C7 04 ADD EDI,4 008E804A 4D DEC EBP 008E804B ^ 0F85 E4FFFFFF JNZ XieXieMa.008E8035 ; // 0F85 XXFFFFFF, 循环 // 恢复下面一段代码 // 后面还有很多, ACProtect 的死穴 // 找0F85 XXFFFFFF, 找到后下一语句 F4 过 008E8BE4 ^\0F85 DDFFFFFF JNZ XieXieMa.008E8BC7 008E8BEA E9 74080100 JMP XieXieMa.008F9463
008F9463 61 POPAD
这句结束后, 将有一些 Stolen Code 记下STACK, Register 同时在 008F9463 下一硬件执行断点, 以方便多次重启
STACK 0012FFC4 7C5987E7 RETURN to KERNEL32.7C5987E7 0012FFC8 005516A8 XieXieMa.005516A8 0012FFCC 00000056 0012FFD0 7FFDF000 0012FFD4 00000200 0012FFD8 0012FFC8 0012FFDC 00000200 0012FFE0 FFFFFFFF End of SEH chain 0012FFE4 7C5C1BB4 SE handler 0012FFE8 7C572B00 KERNEL32.7C572B00 0012FFEC 00000000 0012FFF0 00000000 0012FFF4 00000000 0012FFF8 008E8000 XieXieMa.<ModuleEntryPoint> 0012FFFC 00000000
EAX 00000000 ECX 00010101 EDX FFFFFFFF EBX 7FFDF000 ESP 0012FFC4 EBP 0012FFF0 ESI 00000056 EDI 005516A8
008F9464 57 PUSH EDI 008F9465 8F05 488C8E00 POP DWORD PTR DS:[8E8C48] ; XieXieMa.005516A8 008F946B FF35 488C8E00 PUSH DWORD PTR DS:[8E8C48] ; XieXieMa.005516A8 008F9471 50 PUSH EAX 008F9472 C70424 6C8C8E00 MOV DWORD PTR SS:[ESP],XieXieMa.008E8C6C 008F9479 8F05 2C8C8E00 POP DWORD PTR DS:[8E8C2C] ; XieXieMa.008E8C6C 008F947F 8B3D 2C8C8E00 MOV EDI,DWORD PTR DS:[8E8C2C] ; XieXieMa.008E8C6C 008F9485 892F MOV DWORD PTR DS:[EDI],EBP ; // EBP Save in 8E8C6C 008F9487 90 NOP 008F9488 90 NOP 008F9489 90 NOP 008F948A 90 NOP 008F948B 90 NOP 008F948C 60 PUSHAD 008F948D E8 03BDFFFF CALL XieXieMa.008F51DC ; // EBP = 4E7000 008F9492 E8 00000000 CALL XieXieMa.008F9497 008F9497 5B POP EBX 008F9498 2B9D 68214000 SUB EBX,DWORD PTR SS:[EBP+402168] 008F949E 81EB 97140100 SUB EBX,11497 ; // EBX=400000 008F94A4 899D 26D04000 MOV DWORD PTR SS:[EBP+40D026],EBX ; // save in 8F4026 008F94AA 61 POPAD 008F94AB 8F05 448C8E00 POP DWORD PTR DS:[8E8C44] ; XieXieMa.005516A8 008F94B1 FF35 448C8E00 PUSH DWORD PTR DS:[8E8C44] ; XieXieMa.005516A8 008F94B7 5F POP EDI 008F94B8 FF35 6C8C8E00 PUSH DWORD PTR DS:[8E8C6C] ; // Push EBP, Stolen Code 1 008F94BE 8F05 848C8E00 POP DWORD PTR DS:[8E8C84] 008F94C4 FF35 848C8E00 PUSH DWORD PTR DS:[8E8C84] 008F94CA 8925 808C8E00 MOV DWORD PTR DS:[8E8C80],ESP ; // ESP save in 8E8C80 008F94D0 90 NOP 008F94D1 90 NOP 008F94D2 90 NOP 008F94D3 60 PUSHAD 008F94D4 E8 03BDFFFF CALL XieXieMa.008F51DC ; // EBP = 4E7000 008F94D9 E8 9CBAFFFF CALL XieXieMa.008F4F7A ; // EAX 取随机数 008F94DE 8985 81DF4000 MOV DWORD PTR SS:[EBP+40DF81],EAX 008F94E4 61 POPAD 008F94E5 FF35 808C8E00 PUSH DWORD PTR DS:[8E8C80] 008F94EB 8B2C24 MOV EBP,DWORD PTR SS:[ESP] ; // MOV EBP, ESP , Stolen Code 2 008F94EE 8F05 688C8E00 POP DWORD PTR DS:[8E8C68] 008F94F4 50 PUSH EAX ; // 先压一个数入栈 008F94F5 893C24 MOV DWORD PTR SS:[ESP],EDI 008F94F8 890C24 MOV DWORD PTR SS:[ESP],ECX 008F94FB 8F05 648C8E00 POP DWORD PTR DS:[8E8C64] 008F9501 FF35 648C8E00 PUSH DWORD PTR DS:[8E8C64] 008F9507 893C24 MOV DWORD PTR SS:[ESP],EDI 008F950A 90 NOP 008F950B 90 NOP 008F950C 90 NOP 008F950D 60 PUSHAD 008F950E E8 C9BCFFFF CALL XieXieMa.008F51DC 008F9513 C685 4CCF4000 0>MOV BYTE PTR SS:[EBP+40CF4C],0 008F951A 61 POPAD 008F951B C70424 FFFFFFFF MOV DWORD PTR SS:[ESP],-1 ; // PUSH -1, Stolen Code 3 008F9522 52 PUSH EDX 008F9523 BA 408C8E00 MOV EDX,XieXieMa.008E8C40 008F9528 893A MOV DWORD PTR DS:[EDX],EDI ; // EDI save in 8E8C40 008F952A 5A POP EDX 008F952B FF35 408C8E00 PUSH DWORD PTR DS:[8E8C40] ; // 先压一个数入栈 008F9531 890C24 MOV DWORD PTR SS:[ESP],ECX 008F9534 8F05 748C8E00 POP DWORD PTR DS:[8E8C74] 008F953A FF35 748C8E00 PUSH DWORD PTR DS:[8E8C74] 008F9540 90 NOP 008F9541 90 NOP 008F9542 90 NOP 008F9543 60 PUSHAD 008F9544 E8 CDDEFFFF CALL XieXieMa.008F7416 ; // 壳所用的函数 008F9549 61 POPAD 008F954A C70424 B0DB4B00 MOV DWORD PTR SS:[ESP],XieXieMa.004BDBB0 ; // PUSH 4BDBB0, Stolen Code 4 008F9551 51 PUSH ECX 008F9552 893C24 MOV DWORD PTR SS:[ESP],EDI 008F9555 68 608C8E00 PUSH XieXieMa.008E8C60 008F955A 5F POP EDI 008F955B 8907 MOV DWORD PTR DS:[EDI],EAX 008F955D 8B3C24 MOV EDI,DWORD PTR SS:[ESP] 008F9560 8F05 3C8C8E00 POP DWORD PTR DS:[8E8C3C] ; XieXieMa.005516A8 008F9566 FF35 608C8E00 PUSH DWORD PTR DS:[8E8C60] 008F956C 891C24 MOV DWORD PTR SS:[ESP],EBX 008F956F 90 NOP 008F9570 90 NOP 008F9571 90 NOP 008F9572 60 PUSHAD 008F9573 E8 3BDCFFFF CALL XieXieMa.008F71B3 ; // 解压 401000 代码有关, F7
// 到 8F9573, F7 进入 8F71B3, SMC 后 008F735D 47 INC EDI 008F735E E8 79DEFFFF CALL XieXieMa.008F51DC ; // EBP = 4E7000 008F7363 C685 B3014100 C>MOV BYTE PTR SS:[EBP+4101B3],0C3 008F736A 8DB5 2ED04000 LEA ESI,DWORD PTR SS:[EBP+40D02E] 008F7370 56 PUSH ESI 008F7371 AD LODS DWORD PTR DS:[ESI] ; // 8F402E = 1000 008F7372 0BC0 OR EAX,EAX 008F7374 74 49 JE SHORT XieXieMa.008F73BF 008F7376 90 NOP 008F7377 90 NOP 008F7378 90 NOP 008F7379 90 NOP 008F737A 50 PUSH EAX 008F737B AD LODS DWORD PTR DS:[ESI] ; // 8F4032 = 4ED26 008F737C 91 XCHG EAX,ECX 008F737D 51 PUSH ECX 008F737E 51 PUSH ECX 008F737F 6A 40 PUSH 40 008F7381 FF95 DFD44000 CALL DWORD PTR SS:[EBP+40D4DF] ; // 8F44DF = GlobalAlloc(40, 4ED26) 008F7387 8985 2AD04000 MOV DWORD PTR SS:[EBP+40D02A],EAX ; // 1346F8 save in 8F402A 008F738D 59 POP ECX 008F738E 58 POP EAX 008F738F 0385 26D04000 ADD EAX,DWORD PTR SS:[EBP+40D026] ; // 1000+400000, text section 008F7395 8BF0 MOV ESI,EAX ; // ESI = 401000 008F7397 50 PUSH EAX 008F7398 8BBD 2AD04000 MOV EDI,DWORD PTR SS:[EBP+40D02A] ; // EDI = 1346F8 008F739E F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] ; // ECX = 4ED26 008F73A0 58 POP EAX 008F73A1 50 PUSH EAX 008F73A2 FFB5 2AD04000 PUSH DWORD PTR SS:[EBP+40D02A] 008F73A8 E8 FEE80000 CALL XieXieMa.00905CAB ; // 解压缩到 401000 008F73AD FFB5 2AD04000 PUSH DWORD PTR SS:[EBP+40D02A] 008F73B3 FF95 E3D44000 CALL DWORD PTR SS:[EBP+40D4E3] ; // GlobalFree 008F73B9 5E POP ESI 008F73BA 83C6 08 ADD ESI,8 008F73BD ^ EB B1 JMP SHORT XieXieMa.008F7370 ; // 还要解压一次, 807100, rsrc section 008F73BF 5E POP ESI 008F73C0 68 30750000 PUSH 7530 008F73C5 6A 40 PUSH 40 008F73C7 FF95 DFD44000 CALL DWORD PTR SS:[EBP+40D4DF] ; // GlobalAlloc(40, 7530) 008F73CD 8985 2AD04000 MOV DWORD PTR SS:[EBP+40D02A],EAX 008F73D3 60 PUSHAD 008F73D4 E8 00000000 CALL XieXieMa.008F73D9 008F73D9 5E POP ESI ; XieXieMa.008F73D9 008F73DA 83EE 06 SUB ESI,6 008F73DD B9 75000000 MOV ECX,75 008F73E2 29CE SUB ESI,ECX 008F73E4 BA 92917284 MOV EDX,84729192 008F73E9 C1E9 02 SHR ECX,2 008F73EC 83E9 02 SUB ECX,2 008F73EF 83F9 00 CMP ECX,0 008F73F2 7C 1A JL SHORT XieXieMa.008F740E 008F73F4 8B048E MOV EAX,DWORD PTR DS:[ESI+ECX*4] 008F73F7 8B5C8E 04 MOV EBX,DWORD PTR DS:[ESI+ECX*4+4] 008F73FB 2BC3 SUB EAX,EBX 008F73FD C1C0 1F ROL EAX,1F 008F7400 2BC2 SUB EAX,EDX 008F7402 81F2 EB11730F XOR EDX,0F7311EB 008F7408 89048E MOV DWORD PTR DS:[ESI+ECX*4],EAX 008F740B 49 DEC ECX 008F740C ^ EB E1 JMP SHORT XieXieMa.008F73EF 008F740E 61 POPAD 008F740F 61 POPAD 008F7410 E8 011F0000 CALL XieXieMa.008F9316 008F7415 C3 RETN ; // return 8F9578
1 2 3 下一页 |