好友
阅读权限10
听众
最后登录1970-1-1
|
楼主|
qqc
发表于 2011-3-6 22:54
[ 本帖最后由 qqc 于 2011-3-6 23:08 编辑 ]
0049F49C 0B C0 75 0F 58 0B C0 74 0D 6A 00 FF 95 F9 2E 40 0049F4AC 00 EB 03 83 C4 04 5E F7 85 3B 2D 40 00 01 00 00 0049F4BC 00 74 35 56 8D B5 06 30 40
0049549C 0B下内存访问断点,F9回家
0049F49C 0BC0 OR EAX,EAX 到这里,清除内存断点。
0049F49E 75 0F JNZ SHORT KMV2-Yoc.0049F4AF 这里不跳转,往下直接退出。方法很多,修改Z标志最快
0049F4A0 58 POP EAX
0049F4A1 0BC0 OR EAX,EAX
0049F4A3 74 0D JE SHORT KMV2-Yoc.0049F4B2
0049F4A5 6A 00 PUSH 0
0049F4A7 FF95 F92E4000 CALL DWORD PTR SS:[EBP+402EF9] 退出代码。
0049F4AD EB 03 JMP SHORT KMV2-Yoc.0049F4B2
0049F4AF 83C4 04 ADD ESP,4 必须跳到这里。
0049F4B2 5E POP ESI
0049F4B3 F785 3B2D4000 0>TEST DWORD PTR SS:[EBP+402D3B],1
0049F4BD 74 35 JE SHORT KMV2-Yoc.0049F4F4
0049F4BF 56 PUSH ESI
0049F4C0 8DB5 06304000 LEA ESI,DWORD PTR SS:[EBP+403006]
0049F4C6 EB 26 JMP SHORT KMV2-Yoc.0049F4EE
...............................................................................
Btw: 到这里第一个仙剑壳还没有完,后面不管它有多少壳,搞什么飞机,你在转存401000处下内存访问断点监视吧。
在转存401000下内存访问断点。
0EF8137F 6285 0E0B0000 BOUND EAX,QWORD PTR SS:[EBP+B0E] 这里估计到了skvp
0EF81385 EB 02 JMP SHORT 0EF81389
0EF81387 0FE88B D1EB02CD PSUBSB MM1,QWORD PTR DS:[EBX+CD02EBD1]
0EF8138E 208B C2EB02CD AND BYTE PTR DS:[EBX+CD02EBC2],CL
0EF81394 208B 8A4F0800 AND BYTE PTR DS:[EBX+84F8A],CL
0EF8139A 007C03 EB ADD BYTE PTR DS:[EBX+EAX-15],BH
0EF8139E 0369 74 ADD EBP,DWORD PTR DS:[ECX+74]
0EF813A1 FB STI
0EF813A2 8B89 74010000 MOV ECX,DWORD PTR DS:[ECX+174]
0EF813A8 E8 01000000 CALL 0EF813AE
0EF813AD 8B83 C404BA61 MOV EAX,DWORD PTR DS:[EBX+61BA04C4]
0EF813B3 1100 ADC DWORD PTR DS:[EAX],EAX
0EF813B5 00E8 ADD AL,CH
0EF813B7 0200 ADD AL,BYTE PTR DS:[EAX]
0EF813B9 0000 ADD BYTE PTR DS:[EAX],AL
0EFAB6B1 8A06 MOV AL,BYTE PTR DS:[ESI]
0EFAB6B3 46 INC ESI
0EFAB6B4 47 INC EDI
0EFAB6B5 8843 0F MOV BYTE PTR DS:[EBX+F],AL
0EFAB6B8 8A46 FF MOV AL,BYTE PTR DS:[ESI-1]
0EFAB6BB 55 PUSH EBP
0EFAB6BC E8 00000000 CALL 0EFAB6C1
0EFAB6C1 5D POP EBP
0EFAB6C2 81ED 0D470000 SUB EBP,470D
0EFAB6C8 8A8D 50030000 MOV CL,BYTE PTR SS:[EBP+350]
0EFAB6CE 5D POP EBP
0EFAB6CF 32C1 XOR AL,CL
0EFAB6D1 8847 FF MOV BYTE PTR DS:[EDI-1],AL
0EFAB6D4 8BC5 MOV EAX,EBP
7FF7F25E 66:3103 XOR WORD PTR DS:[EBX],AX 这里到幻影壳,注意不可久留。取消内存断点,向下找jmp eax略过它。
7FF7F261 9C PUSHFD
7FF7F262 6A 10 PUSH 10
7FF7F264 73 0B JNB SHORT 7FF7F271
7FF7F266 EB 02 JMP SHORT 7FF7F26A
7FF7F268 C151 E8 06 RCL DWORD PTR DS:[ECX-18],6
7FF7F26C 0000 ADD BYTE PTR DS:[EAX],AL
7FF7F26E 00C4 ADD AH,AL
7FF7F270 1173 F7 ADC DWORD PTR DS:[EBX-9],ESI
7FF7F273 5B POP EBX
7FF7F274 CD 83 INT 83
7FF7F276 C404EB LES EAX,FWORD PTR DS:[EBX+EBP*8] ; 修正的段位寄存器
7FF7F279 0299 EBFF0C24 ADD BL,BYTE PTR DS:[ECX+240CFFEB]
向下找JMP EAX
7FF8ABC6 - FFE0 JMP EAX F4直接到这里,跳出幻影壳到Acprotect
7FF8ABC8 72 03 JB SHORT 7FF8ABCD
7FF8ABCA 73 01 JNB SHORT 7FF8ABCD
7FF8ABCC 75 74 JNZ SHORT 7FF8AC42
7FF8ABCE 0375 01 ADD ESI,DWORD PTR SS:[EBP+1]
7FF8ABD1 75 74 JNZ SHORT 7FF8AC47
7FF8ABD3 0375 01 ADD ESI,DWORD PTR SS:[EBP+1]
7FF8ABD6 ^ 75 8F JNZ SHORT 7FF8AB67
7FF8ABD8 8505 CE420074 TEST DWORD PTR DS:[740042CE],EAX
7FF8ABDE 0375 01 ADD ESI,DWORD PTR SS:[EBP+1]
7FF8ABE1 75 FF JNZ SHORT 7FF8ABE2
7FF8ABE3 B5 01 MOV CH,1
00444000 60 PUSHAD 最后一个壳Acprotect
00444001 4B DEC EBX
00444002 85DD TEST EBP,EBX
00444004 EB 01 JMP SHORT 00444007
00444006 ^ 73 85 JNB SHORT 00443F8D
00444008 F3: PREFIX REP: ; 多余的前缀
00444009 EB 01 JMP SHORT 0044400C
0044400B ^ 78 87 JS SHORT 00443F94
0044400D DEE8 FSUBP ST,ST
0044400F 0100 ADD DWORD PTR DS:[EAX],EAX
00444011 0000 ADD BYTE PTR DS:[EAX],AL
00444013 7A 83 JPE SHORT 00443F98
00444015 04 24 ADD AL,24
00444017 06 PUSH ES
下当前段模拟跟踪 tc eip<444000
.........................................................................
几分钟到达临时oep
00401F00 68 68214000 PUSH 402168 平时这里就应该是Oep,这个程序是VB编程,Oep被做了手脚.这里是Oep的第一句代码,记住补上替换的代码.
00401F05 68 95124000 PUSH 401295 放入Oep下一句地址
00401F0A E8 00000000 CALL 00401F0F
00401F0F C3 RETN 这里将返回Oep的下一句.
00401F10 0000 ADD BYTE PTR DS:[EAX],AL
00401F12 0000 ADD BYTE PTR DS:[EAX],AL
00401F14 0000 ADD BYTE PTR DS:[EAX],AL
00401F16 0000 ADD BYTE PTR DS:[EAX],AL
00401F18 0000 ADD BYTE PTR DS:[EAX],AL
00401F1A 0000 ADD BYTE PTR DS:[EAX],AL
00401F1C 0000 ADD BYTE PTR DS:[EAX],AL
00401F1E 0000 ADD BYTE PTR DS:[EAX],AL
00401295 E8 EEFFFFFF CALL 00401288 返回到Oep的第二句.; JMP to MSVBVM60.ThunRTMain
0040129A 0000 ADD BYTE PTR DS:[EAX],AL
0040129C 0000 ADD BYTE PTR DS:[EAX],AL
0040129E 0000 ADD BYTE PTR DS:[EAX],AL
004012A0 3000 XOR BYTE PTR DS:[EAX],AL
004012A2 0000 ADD BYTE PTR DS:[EAX],AL
004012A4 3800 CMP BYTE PTR DS:[EAX],AL
004012A6 0000 ADD BYTE PTR DS:[EAX],AL
004012A8 0000 ADD BYTE PTR DS:[EAX],AL
004012AA 0000 ADD BYTE PTR DS:[EAX],AL
004012AC E6 49 OUT 49,AL ; I/O 命令,A
004012AE 70 77 JO SHORT 00401327
00401276 - FF25 60104000 JMP DWORD PTR DS:[401060] ; MSVBVM60.EVENT_SINK_QueryInterface
0040127C - FF25 48104000 JMP DWORD PTR DS:[401048] ; MSVBVM60.EVENT_SINK_AddRef
00401282 - FF25 58104000 JMP DWORD PTR DS:[401058] ; MSVBVM60.EVENT_SINK_Release
00401288 - FF25 8C104000 JMP DWORD PTR DS:[40108C] ; MSVBVM60.ThunRTMain
0040128E 0000 ADD BYTE PTR DS:[EAX],AL
00401290 0000 ADD BYTE PTR DS:[EAX],AL 这里是真正的oep
00401292 0000 ADD BYTE PTR DS:[EAX],AL
00401294 00E8 ADD AL,CH
00401296 EE OUT DX,AL ; I/O 命令,A
00401297 FFFF ??? ; 未知命令
00401299 FF00 INC DWORD PTR DS:[EAX]
0040129B 0000 ADD BYTE PTR DS:[EAX],AL
0040129D 0000 ADD BYTE PTR DS:[EAX],AL
0040129F 0030 ADD BYTE PTR DS:[EAX],DH
004012A1 0000 ADD BYTE PTR DS:[EAX],AL
004012A3 0038 ADD BYTE PTR DS:[EAX],BH
还原代码吧。
00401290 > 68 68214000 PUSH VB60.00402168 修复好的,这里看出程序是VB编的,用插件脱壳吧.
00401295 E8 EEFFFFFF CALL <JMP.&MSVBVM60.#100>
0040129A 0000 ADD BYTE PTR DS:[EAX],AL
0040129C 0000 ADD BYTE PTR DS:[EAX],AL
0040129E 0000 ADD BYTE PTR DS:[EAX],AL
004012A0 3000 XOR BYTE PTR DS:[EAX],AL
004012A2 0000 ADD BYTE PTR DS:[EAX],AL
004012A4 3800 CMP BYTE PTR DS:[EAX],AL
004012A6 0000 ADD BYTE PTR DS:[EAX],AL
关闭OD,打开脱壳程序,Imprec1.42填入1290,直接修复。
文件减肥
因为区段名被删除了,不是很好减肥。留下Imprec新建的区段mackt,Virtual offset是0001000和00043000的三个有用区段,其余的全部是垃圾区段,全部删除,Loadpe重建Pe
597k to 253k
正常运行。
破解很容易,下断点
bp rtcMsgBox
中断,Ctrl+F9返回程序点确定.
返回程序领空,向上看哪里可以跳过这个提示,就不多说了。 |
|