虽然没有完成,但对这个题目的VM比较感兴趣,以下是一些分析记录,不过当前时间较短,不是很完整,如果有时间后续会继续补充。
准备工作:
首先用od搜集一些虚拟机运行时的一些数据,搜集数据的方式如下:
●
00EDD6FA 主 MOV AL,BYTE PTR DS:[EAX] EAX=0112D4[COLOR="Red"]31[/COLOR]
00EDD6FC 主 PUSH EAX
00EDD6FD 主 PUSHFD
00EDD6FE 主 LEA EDI,DWORD PTR SS:[ESP+C] EDI=00BEF2B8
00EDD702 主 PUSH EDX
00EDD703 主 TEST DWORD PTR SS:[ESP+18],E89DFB74
00EDD70B 主 JNS crackme_.00EDD632
00EDD632 主 PUSH EBP
00EDD633 主 LEA ECX,DWORD PTR SS:[ESP+20] ECX=00BEF2C4
00EDD637 主 PUSH EBX
00EDD638 主 SUB ECX,DWORD PTR SS:[ESP+24] ECX=FFD11BE7
00EDD63C 主 ROL DWORD PTR SS:[ESP+1C],1
00EDD640 主 MOV BYTE PTR SS:[ESP+2F],AL
00EDD644 主 PUSH DWORD PTR SS:[ESP+28]
00EDD648 主 NEG EDX EDX=FF12299E
00EDD64A 主 MOV DWORD PTR SS:[ESP+14],EBX
00EDD64E 主 SUB DWORD PTR SS:[ESP+18],EDI
00EDD652 主 XOR ESI,DWORD PTR SS:[ESP+14] ESI=8BA7EE45
00EDD656 主 XCHG DWORD PTR SS:[ESP+18],ESI ESI=00000010
00EDD65A 主 MOV EDI,DWORD PTR SS:[ESP+1C] EDI=00EDD6F2
00EDD65E 主 MOVZX ECX,BYTE PTR SS:[ESP+1C] ECX=000000F2
00EDD663 主 MOV DWORD PTR SS:[ESP+10],ESI
00EDD667 主 XCHG DWORD PTR SS:[ESP+18],ESI ESI=8BA7EE45
00EDD66B 主 ADD EDI,FFFF6E0E EDI=00ED4500
00EDD671 主 XCHG DWORD PTR SS:[ESP+8],EAX EAX=7C8DA807
00EDD675 主 MOV AL,BL EAX=7C8DA88D
00EDD677 主 OR ESI,EAX ESI=FFAFEECD
00EDD679 主 DEC ESI ESI=FFAFEECC
00EDD67A 主 MOV DWORD PTR SS:[ESP+2F],EDI
00EDD67E 主 PUSH DWORD PTR SS:[ESP+28]
00EDD682 主 MOV ECX,DWORD PTR SS:[ESP+4] ECX=D2DC9935
00EDD686 主 OR BYTE PTR SS:[ESP+24],DL
00EDD68A 主 CALL crackme_.00EDD690
00EDD690 主 DEC DL EDX=FF12299D
00EDD692 主 SUB DWORD PTR SS:[ESP+14],8573D8F1
00EDD69A 主 MOV ECX,DWORD PTR SS:[ESP+37] ECX=00ED4500
00EDD69E 主 PUSHFD
00EDD69F 主 INC EDI EDI=00ED4501
00EDD6A0 主 XCHG DWORD PTR SS:[ESP+18],EDI EDI=7B79FD71
00EDD6A4 主 SAR EDI,1 EDI=3DBCFEB8
00EDD6A6 主 PUSH DWORD PTR SS:[ESP+2C]
00EDD6AA 主 MOV EDX,EBP EDX=7C8DA807
00EDD6AC 主 MOV DWORD PTR SS:[ESP+38],ECX
00EDD6B0 主 AND BYTE PTR SS:[ESP+4],AL
00EDD6B4 主 ADD EDX,EAX EDX=F91B5094
00EDD6B6 主 XCHG BYTE PTR SS:[ESP+4],DL EDX=F91B5005
00EDD6BA 主 POP EDI EDI=F91B509E
00EDD6BB 主 PUSH DWORD PTR SS:[ESP+34]
00EDD6BF 主 XCHG DWORD PTR SS:[ESP+C],EDX EDX=00EDD6DD
00EDD6C3 主 MOV EAX,DWORD PTR SS:[ESP+18] EAX=0112D431
00EDD6C7 主 XCHG DWORD PTR SS:[ESP+1C],EDI EDI=00ED4501
00EDD6CB 主 XCHG DWORD PTR SS:[ESP+20],ESI ESI=00000010
00EDD6CF 主 XCHG DWORD PTR SS:[ESP+24],EBX
00EDD6D3 主 XCHG DWORD PTR SS:[ESP+34],EBP EBP=00EF91B5
00EDD6D7 主 RETN 3F
00ED4500 主 PUSH EAX
00ED4501 主 PUSH EBP
[COLOR="red"]00ED4502 主 MOV CL,BYTE PTR SS:[EBP] ECX=00ED45CD[/COLOR]
00ED4505 主 AND DWORD PTR SS:[ESP+4],ESI
00ED4509 主 PUSH EDX
00ED450A 主 SHL EDX,CL EDX=BADBA000
00ED2A40 主 MOV CL,BYTE PTR SS:[EBP] ECX=00ED45F8
00ED2A43 主 NEG ESI ESI=B6EEC62F
00ED2A45 主 ROR ESI,CL ESI=EEC62FB6
00ED2A47 主 MOV EDI,EBP EDI=00EF91B7
00ED2A49 主 SBB EDX,EBX EDX=BEE54755
00ED2A4B 主 DEC DL EDX=BEE54754
00ED2A4D 主 MOVZX EAX,CL EAX=000000F8
00ED2A50 主 ROR ESI,CL ESI=C62FB6EE
00ED2A52 主 INC EBP EBP=00EF91B8
00ED2A53 主 XOR EDI,EDX EDI=BE0AD6E3
00ED2A55 主 ADD EDX,ECX EDX=BFD28D4C
00ED2A57 主 PUSH EDI
00ED2A58 主 INC EDX EDX=BFD28D4D
00ED2A59 主 XOR AL,BL EAX=0000004E
00ED2A5B 主 SBB DWORD PTR SS:[ESP],8D9F2B3D
00ED2A63 主 INC DWORD PTR SS:[ESP]
00ED2A67 主 ROL EDX,CL EDX=4DBFD28D
00ED2A69 主 PUSH EBX
00ED2A6A 主 MOV BL,DL EBX=8B191C8D
00ED2A6C 主 MOVZX ESI,BX ESI=00001C8D
00ED2A6F 主 ROR AL,1 EAX=00000027
00ED2A71 主 PUSH DWORD PTR SS:[ESP+4]
00ED2A75 主 ROR DWORD PTR SS:[ESP],3
00ED2A7A 主 NEG ESI ESI=FFFFE373
00ED2A7C 主 PUSH EDX
00ED2A7D 主 PUSH EDI
00ED2A7E 主 ADD EDI,ESI EDI=BE0ABA56
00ED2A80 主 SUB AL,0C EAX=0000001B
00ED2A82 主 MOV BYTE PTR SS:[ESP+10],DL
00ED2A86 主 SUB EDX,EDI EDX=8FB51837
00ED2A88 主 ROR EDX,CL EDX=B518378F
00ED2A8A 主 MOV ESI,EDI ESI=BE0ABA56
00ED2A8C 主 CALL crackme_.00ED329A
00ED329A 主 LEA ESI,DWORD PTR SS:[ESP+8] ESI=00BEF2BE
00ED329E 主 PUSH EBP
00ED329F 主 MOV EBP,DWORD PTR SS:[ESP+14] EBP=8B191CB6
00ED32A3 主 PUSH ESI
00ED32A4 主 ADD DL,BYTE PTR SS:[ESP+1C] EDX=B518371C
00ED32A8 主 CMP ECX,809D7E86
00ED32AE 主 JPO crackme_.00ED2E07
00ED32B4 主 DEC EDI EDI=BE0ABA55
00ED32B5 主 PUSH EDI
00ED32B6 主 XCHG DWORD PTR SS:[ESP+18],EDX EDX=E60D7574
00ED32BA 主 MOV DL,BYTE PTR SS:[ESP+C] EDX=E60D7591
00ED32BE 主 POP EDX EDX=BE0ABA55
00ED32BF 主 ROR ESI,CL ESI=BEF2BE00
00ED32C1 主 DEC AL EAX=0000001A
00ED32C3 主 PUSH ESI
00ED32C4 主 MOV DL,CL EDX=BE0ABAF8
00ED32C6 主 SAR ESI,CL ESI=FFFFFFBE
00ED32C8 主 NOT AL EAX=000000E5
00ED32CA 主 PUSH ECX
00ED32CB 主 MOV EDI,DWORD PTR SS:[ESP+24] EDI=306BAB8
00ED32CF 主 ADD EDX,ECX EDX=BEF800F0
00ED32D1 主 PUSH EDI
00ED32D2 主 NEG AL EAX=0000001B
00ED32D4 主 AND EDX,EDI EDX=30680080
00ED32D6 主 SAR DWORD PTR SS:[ESP+28],CL
00ED32DA 主 PUSH EDI
00ED32DB 主 SHR DWORD PTR SS:[ESP+8],CL
00ED32DF 主 INC DWORD PTR SS:[ESP+8]
00ED32E3 主 XOR BYTE PTR SS:[ESP+28],AL
00ED32E7 主 PUSH ESI
00ED32E8 主 ROR EDX,CL EDX=68008030
00ED32EA 主 POP DWORD PTR SS:[ESP+24]
00ED32EE 主 SUB DWORD PTR SS:[ESP+C],EBX
00ED32F2 主 POP ESI ESI=306BAB8D
00ED32F3 主 SAR DWORD PTR SS:[ESP+4],CL
00ED32F7 主 JMP crackme_.00ED3302
00ED3302 主 ADD BL,DL EBX=8B191CBD
00ED3304 主 PUSH DWORD PTR SS:[ESP+4]
00ED3308 主 AND ESI,EDI
00ED330A 主 NOT ESI ESI=CF945472
00ED330C 主 SUB DWORD PTR SS:[ESP+4],EBP
00ED3310 主 INC EDI EDI=306BAB8E
00ED3311 主 MOV EDX,EAX EDX=0000001B
00ED3313 主 ADD ESI,DWORD PTR SS:[ESP+2C] ESI=CF9454A2
00ED3317 主 XCHG DWORD PTR SS:[ESP+C],ECX ECX=33D9A173
00ED331B 主 LEA ECX,DWORD PTR SS:[ESP+1C] ECX=00BEF2BA
00ED331F 主 PUSHFD
00ED3320 主 PUSH EBP
00ED3321 主 SHL EDX,2 EDX=0000006C -> 解密后的字节码
00ED3324 主 PUSH DWORD PTR SS:[ESP+18]
00ED3328 主 SUB BYTE PTR SS:[ESP+C],8C
00ED332D 主 PUSH EAX
00ED332E 主 XCHG DWORD PTR SS:[ESP+34],ESI ESI=FFFFFFBE
00ED3332 主 LEA ESI,DWORD PTR SS:[ESP+24] ESI=00BEF2B2
00ED3336 主 MOV ESI,DWORD PTR SS:[ESP+28] ESI=00ED2A91
00ED333A 主 SHL EDI,CL EDI=38000000
00ED333C 主 PUSH DWORD PTR SS:[ESP+4]
00ED3340 主 LEA EDI,DWORD PTR DS:[EDI+FFFF7FAD] EDI=37FF7FAD
00ED3346 主 PUSH EBP
00ED3347 主 ADD ESI,25F14 ESI=00EF89A5 -> 加密的handler表地址
00ED334D 主 PUSH 298890A7
00ED3352 主 CALL crackme_.00ED3359
00ED3359 主 PUSH DWORD PTR SS:[ESP+8]
00ED335D 主 ADD EDX,ESI EDX=00EF8A11
00ED335F 主 XCHG DWORD PTR SS:[ESP+48],ESI ESI=CF9454A2
00ED3363 主 PUSH EBX
00ED3364 主 MOV EDI,F8A791F5 EDI=F8A791F5
00ED3369 主 MOV ESI,DWORD PTR DS:[EDX] ESI=487851D1 -> 加密的handler
00ED336B 主 PUSH ECX
00ED336C 主 MOVZX EDI,CL EDI=000000BA
00ED336F 主 PUSH ESI
00ED3370 主 ADD DWORD PTR SS:[ESP+10],36A
00ED3378 主 PUSH EAX
00ED3379 主 ADD EDI,DWORD PTR SS:[ESP+28] EDI=00BEF378
00ED337D 主 SAR DWORD PTR SS:[ESP+C],CL
00ED3381 主 MOV EDI,DWORD PTR SS:[ESP+1C] EDI=8B191CB6
00ED3385 主 PUSH DWORD PTR SS:[ESP+14]
00ED3389 主 XOR BYTE PTR SS:[ESP+58],BL
00ED338D 主 NEG DWORD PTR SS:[ESP+20]
00ED3391 主 RETN 2C
00ED36C1 主 POP DWORD PTR SS:[ESP+24]
00ED36C5 主 ADC DWORD PTR SS:[ESP+C],905A3673
00ED36CD 主 PUSH EBP
00ED36CE 主 MOV DWORD PTR SS:[ESP+34],ESI
00ED36D2 主 AND EDI,EDX EDI=00090810
00ED36D4 主 XCHG DWORD PTR SS:[ESP+2C],ESI ESI=00EF89A5 [esp+2c] == 487851D1
00ED36D8 主 ROL ESI,CL ESI=9403BE26
00ED36DA 主 NEG EDI EDI=FFF6F7F0
00ED36DC 主 PUSH DWORD PTR SS:[ESP+30]
00ED36E0 主 NEG EDI EDI=00090810
00ED36E2 主 TEST EAX,ECX
00ED36E4 主 JB crackme_.00ED3490
00ED36EA 主 MOV DWORD PTR SS:[ESP+1C],EDX
00ED36EE 主 NEG EDX EDX=FF1075EF
00ED36F0 主 PUSH DWORD PTR SS:[ESP+1C]
00ED36F4 主 MOV DWORD PTR SS:[ESP+C],EAX
00ED36F8 主 ADD EAX,7B9AE0CF EAX=7B9AE0EA
00ED36FD 主 INC BL EBX=8B191CBE
00ED36FF 主 SUB DWORD PTR SS:[ESP+3C],56FB61D4
00ED3707 主 NEG AL EAX=7B9AE016
00ED3709 主 ADD EDI,EAX EDI=7BA3E826
00ED370B 主 CALL crackme_.00ED3713 -> 此处压入 0xED3710 后续取出用来计算handler的位置
00ED3713 主 MOV EDI,EDX EDI=FF1075EF
00ED3715 主 ROR DWORD PTR SS:[ESP+40],0B
00ED371A 主 NOT EDI EDI=00EF8A10
00ED371C 主 OR DWORD PTR SS:[ESP+14],EBX
00ED3720 主 PUSH ESI
00ED3721 主 ADD EDI,DWORD PTR SS:[ESP+30] EDI=01DCB4A1
00ED3725 主 PUSH EBX
00ED3726 主 SHL EDI,CL EDI=84000000
00ED3728 主 NOT DWORD PTR SS:[ESP+48]
00ED372C 主 ADD EDI,79895FA1 EDI=FD895FA1
00ED3732 主 SBB BYTE PTR SS:[ESP+1C],DL
00ED3736 主 PUSHFD
00ED3737 主 PUSH BAAA4D68
00ED373C 主 MOV EDI,DWORD PTR SS:[ESP+10] EDI=00ED3710
00ED3740 主 NOT AL EAX=7B9AE0E9
00ED3742 主 POP EAX EAX=BAAA4D68
00ED3743 主 XOR DWORD PTR SS:[ESP+4],19F76BD5
00ED374B 主 MOV DWORD PTR SS:[ESP+18],EBP
00ED374F 主 PUSH ESI
00ED3750 主 ADD EDI,FFBEC8F0 EDI=00AC0000
00ED3756 主 MOV ECX,EDX ECX=FF1075EF
00ED3758 主 PUSH DWORD PTR SS:[ESP+14]
00ED375C 主 SUB EBX,EDX EBX=8C08A6CF
00ED375E 主 ADC EBP,98A469C EBP=94A36353
00ED3764 主 ADD DWORD PTR SS:[ESP+54],EDI // 00EDD062
00ED3768 主 DEC EDI EDI=00ABFFFF
00ED3769 主 XOR AL,BL EAX=BAAA4DA7
00ED376B 主 SUB EDI,ECX EDI=019B8A10
00ED376D 主 XCHG BYTE PTR SS:[ESP+1C],DL EDX=FF1075AD
00ED3771 主 MOVSX EDI,AL EDI=FFFFFFA7
00ED3774 主 TEST DWORD PTR SS:[ESP+20],EDX
00ED3778 主 JE crackme_.00ED35E2
00ED377E 主 ROL EDI,5 EDI=FFFFF4FF
00ED3781 主 PUSH EBX
00ED3782 主 LEA EDI,DWORD PTR SS:[ESP+48] EDI=00BEF2BA
00ED3786 主 XCHG DWORD PTR SS:[ESP+8],EDI EDI=9403BE26
00ED378A 主 ADD DWORD PTR SS:[ESP+18],0A2
00ED3792 主 DEC EDI EDI=9403BE25
00ED3793 主 PUSH DWORD PTR SS:[ESP+4]
00ED3797 主 INC BYTE PTR SS:[ESP+24]
00ED379B 主 MOV EDI,DWORD PTR SS:[ESP+30] EDI=8B191C0F
00ED379F 主 PUSH DWORD PTR SS:[ESP+1C]
00ED37A3 主 ADD DL,9C EDX=FF107549
00ED37A6 主 MOV EDI,ESI EDI=9403BE26
00ED37A8 主 MOV EAX,DWORD PTR SS:[ESP+30] EAX=0000001B
00ED37AC 主 RETN 3C
00ED37B2 主 PUSH DWORD PTR SS:[ESP+1C]
00ED37B6 主 MOV EDX,DWORD PTR SS:[ESP+8] EDX=00EF8A11
00ED37BA 主 PUSH EAX
00ED37BB 主 MOVSX EAX,DL EAX=00000011
00ED37BE 主 ADD EDI,8E9DCD6A EDI=22A18B90
00ED37C4 主 SHR EDI,CL EDI=00004543
00ED37C6 主 MOV EDX,DWORD PTR SS:[ESP+28] EDX=00EDD062
00ED37CA 主 XOR EDI,ESI EDI=9403FB65
00ED37CC 主 SUB BL,DL EBX=8C08A66D
00ED37CE 主 MOV DWORD PTR SS:[ESP+24],EDX
00ED37D2 主 POP EAX EAX=0000001B
00ED37D3 主 PUSHFD
00ED37D4 主 XCHG DWORD PTR SS:[ESP+1C],EDX EDX=8B191CB6
00ED37D8 主 SHL EDX,CL EDX=8E5B0000
00ED37DA 主 SUB DWORD PTR SS:[ESP],EDI
00ED37DE 主 MOV CL,BL ECX=FF10756D
00ED37E0 主 PUSH EBX
00ED37E1 主 MOV EAX,DWORD PTR SS:[ESP+28] EAX=00EDD062
00ED37E5 主 MOVZX EDI,CL EDI=0000006D
00ED37E8 主 MOV DWORD PTR SS:[ESP+2C],EAX
00ED37EC 主 PUSH EDI
00ED37ED 主 ROR EDI,CL EDI=03680000
00ED37EF 主 XCHG DWORD PTR SS:[ESP+8],EAX EAX=6BFC0E9D
00ED37F3 主 LEA EAX,DWORD PTR DS:[EAX+FFFE18F8] EAX=6BFA2795
00ED37F9 主 PUSH DWORD PTR SS:[ESP+28] // 存储 -----------> 00ED36D4 ->487851D1
00ED37FD 主 MOV EDI,DWORD PTR SS:[ESP+34] EDI=00EDD062
00ED3801 主 MOV DWORD PTR SS:[ESP+2C],EDI
00ED3805 主 PUSH ECX
00ED3806 主 AND EDI,EDX EDI=00490000
00ED3808 主 SAR EDI,CL EDI=00000248
00ED380A 主 ADD DWORD PTR SS:[ESP+C],EAX
00ED380E 主 PUSH DWORD PTR SS:[ESP+8]
00ED3812 主 LEA EDI,DWORD PTR SS:[ESP+8] EDI=00BEF296
00ED3816 主 PUSH DWORD PTR SS:[ESP+34]
00ED381A 主 MOV ESI,DWORD PTR SS:[ESP+C] ESI=487851D1 // ------>取出
00ED381E 主 XCHG DWORD PTR SS:[ESP+18],EAX EAX=00EDD062
00ED3822 主 MOV EBX,DWORD PTR SS:[ESP+1C] EBX=8B191CAD
00ED3826 主 MOV ECX,DWORD PTR SS:[ESP+20] ECX=00ED45F8
00ED382A 主 XCHG DWORD PTR SS:[ESP+28],EBP EBP=00EF91B8
00ED382E 主 XCHG DWORD PTR SS:[ESP+30],EDI EDI=BE0AD6E3
00ED3832 主 XCHG DWORD PTR SS:[ESP+34],EDX EDX=00EDD062
00ED3836 主 RETN 40 // 跳转到handler
00EDD062 主 PUSH ECX
00EDD063 主 NOT CL ECX=00ED4507
00EDD065 主 PUSH ESI
00EDD066 主 PUSHFD
00EDD067 主 MOV DWORD PTR SS:[ESP+4],ECX
00EDD06B 主 ROL ECX,CL ECX=76A28380
00EDD06D 主 PUSH EDX
00EDD06E 主 SUB DL,0CB EDX=00EDD097
00EDD071 主 MOVZX EAX,BYTE PTR SS:[ESP+10] EAX=0000002F
00EDD076 主 XCHG DWORD PTR SS:[ESP+C],ECX ECX=00ED45F8
00EDD07A 主 AND ESI,81E23C22 ESI=00601000
00EDD080 主 ADD DL,76 EDX=00EDD00D
00EDD083 主 XOR ESI,DWORD PTR SS:[ESP+C] ESI=76C29380
00ED4502 主 MOV CL,BYTE PTR SS:[EBP] ECX=00ED45CD
00ED2A40 主 MOV CL,BYTE PTR SS:[EBP] ECX=00ED45F8
00ED2A4D 主 MOVZX EAX,CL EAX=000000F8
00ED2A52 主 INC EBP EBP=00EF91B8
00ED2A59 主 XOR AL,BL EAX=0000004E
00ED2A6F 主 ROR AL,1 EAX=00000027
00ED2A80 主 SUB AL,0C EAX=0000001B
00ED32C1 主 DEC AL EAX=0000001A
00ED32C8 主 NOT AL EAX=000000E5
00ED32D2 主 NEG AL EAX=0000001B
00ED3311 主 MOV EDX,EAX EDX=0000001B
00ED3321 主 SHL EDX,2 EDX=0000006C -> 解密后的字节码
00ED36FF 主 SUB DWORD PTR SS:[ESP+3C],56FB61D4
00ED3707 主 NEG AL EAX=7B9AE016
00ED3709 主 ADD EDI,EAX EDI=7BA3E826
00ED370B 主 CALL crackme_.00ED3713 -> 此处压入 0xED3710 后续取出用来计算handler的位置
00ED3713 主 MOV EDI,EDX EDI=FF1075EF
00ED3715 主 ROR DWORD PTR SS:[ESP+40],0B
00EDD12B 主 RETN 4A
00ED4F78 主 PUSH EBX
00ED4F79 主 INC EAX EAX=00BEF2FF
00ED3832 主 XCHG DWORD PTR SS:[ESP+34],EDX EDX=00EDD062
00ED3836 主 RETN 40 // 跳转到handler
00EDD062 主 PUSH ECX
00ED3336 主 MOV ESI,DWORD PTR SS:[ESP+28] ESI=00ED2A91
00ED3347 主 ADD ESI,25F14 ESI=00EF89A5 -> 加密的handler表地址
00ED335D 主 ADD EDX,ESI EDX=00EF8A11
00ED3369 主 MOV ESI,DWORD PTR DS:[EDX] ESI=487851D1 -> 加密的handler
00ED36CE 主 MOV DWORD PTR SS:[ESP+34],ESI
00ED36FF 主 SUB DWORD PTR SS:[ESP+3C],56FB61D4
00ED3715 主 ROR DWORD PTR SS:[ESP+40],0B
00ED3728 主 NOT DWORD PTR SS:[ESP+48]
00ED373C 主 MOV EDI,DWORD PTR SS:[ESP+10] EDI=00ED3710
00ED3750 主 ADD EDI,FFBEC8F0 EDI=00AC0000
[COLOR="Red"]00ED3764 主 ADD DWORD PTR SS:[ESP+54],EDI // 00EDD062[/COLOR]
00ED370B 主 CALL crackme_.00ED3713 -> 此处压入 0xED3710 后续取出用来计算
handler的位置
x = [edx] // 4896E1D1
x = x - 56FB61D4 = F19B7FFD
x = ror(x, 0B) = FFBE336F
x = not(x) = 41CC90
handler = y + x
= va + FFBEC8F0 + not(ror((x - 56FB61D4), 0x0B))
= va + FFBEC8F0 + 41CC90
DWORD handler[46] = { 0 };
fread(handler, sizeof(handler), 1, f);
fclose(f);
for (int i = 0; i < sizeof(handler)/4; i++)
{
char bptext[30] = { 0 };
handler[i] = handler[i] - 0x56FB61D4;
handler[i] = (handler[i] >> 0x0b) | ((handler[i] & 0xfff) << (0x20 - 0x0B));
handler[i] = ~handler[i];
handler[i] += 0xffbec8f0;
handler[i] += g_base + g_rva;
sprintf(bptext, "bp %04x\n", handler[i]);
fwrite(bptext, strlen(bptext), 1, f_o);
printf(bptext);
}
分析取字节码过程
找到字节码取码的位置对了解虚拟机有必要,而从runtrace跑过的代码来看,还是有些混乱的,我大致用下面的思路来找。
a: 取几段连续代码,然后在上下文中查看其出现的次数, 以确定这段代码是否在循环中
b: 寻找类似 MOV AA,BYTE PTR SS:[BBB] 以及 inc BBB 的指令 这也是一般取字节码的方式。 ● 1.1 runtrace反单步
本应该把这部分放在前面的,但影响也不大。就是在runtrace时会遇到pushfd之类的指令,导致调试器出现异常,无法继续,还好这个壳比较友好,没有大量集成反调试以及反跟踪。计算下后续无效指令长度,然后nop掉就可以了。1.2 寻找定位
按照上面的方式找到取字节码的过程:
设置API断点
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: