看了peaceclub大侠的瓦解PELock 1.0x -> Bartosz Wojcik秀的文章,小弟受益非浅,在把peaceclub示例中的PELock 1.0x -> Bartosz Wojcik文件脱壳后。自认为可以搞定黑防控制端,但是问题多多,特此来请教各位大侠。
第一步:进入解压段
为了配合脚本及过程,请您忽略所有异常,除了C000001D (ILLEGALINSTRUCTION)。
OD载入 停留在
0081D05C > /EB 02 JMP SHORT 黑防专版.0081D060 //停留在这里
0081D05E |CD 20 INT 20
0081D060 \EB 01 JMP SHORT 黑防专版.0081D063
0081D062 43 INC EBX
0081D063 EB 02 JMP SHORT 黑防专版.0081D067
0081D065 CD 20 INT 20
0081D067 3BFE CMP EDI,ESI
0081D069 EB 02 JMP SHORT 黑防专版.0081D06D
0081D06B CD 20 INT 20
0081D06D F2: PREFIX REPNE: ; 多余的前缀
0081D06E 03FA ADD EDI,EDX
0081D070 EB 02 JMP SHORT 黑防专版.0081D074
[动作]:F9运行
出现异常提示,点击"确定"
[动作]:Alt+M,查看内存,在“代码”上两行00390000段下访问断点,Shift+F9
断点生效后停在:
00392E54 /EB 02 JMP SHORT 00392E58 //停留在这里
00392E56 |0F5EEB DIVPS XMM5,XMM3
00392E59 0361 79 ADD ESP,DWORD PTR DS:[ECX+79]
00392E5C 4B DEC EBX
00392E5D C1F2 00 SAL EDX,0 ; 移位常量超出 1..31 的范围
00392E60 EB 03 JMP SHORT 00392E65
00392E62 17 POP SS ; 段寄存器更改
00392E63 BE 24EB0263 MOV ESI,6302EB24
00392E68 D5 EB AAD 0EB
00392E6A 020F ADD CL,BYTE PTR DS:[EDI]
00392E6C D0EB SHR BL,1
00392E6E 020F ADD CL,BYTE PTR DS:[EDI]
00392E70 04 EB ADD AL,0EB
00392E72 ^ 7D C1 JGE SHORT 00392E35
00392E74 F1 INT1
00392E75 00EB ADD BL,CH
00392E77 02CD ADD CL,CH
00392E79 2070 03 AND BYTE PTR DS:[EAX+3],DH
00392E7C 71 01 JNO SHORT 00392E7F
00392E7E C6 ??? ; 未知命令
00392E7F EB 02 JMP SHORT 00392E83
00392E81 0F26 ??? ; 未知命令
第二步:IAT脚本修补:
调用ollyScript来运行下面的脚本,根据表的长度大小,需要点时间,当寄存器和代码不变化的时候,F12暂停执行,本人用这个脚本修复IAT 用了24分钟 汗!
此例中代码显示窗停在
0039602D F3:AB REP STOS DWORD PTR ES:[EDI] //停留在这里
0039602F C1F5 00 SAL EBP,0 ; 移位常量超出 1..31 的范围
00396032 E8 01000000 CALL 00396038
00396037 1C 8F SBB AL,8F
00396039 44 INC ESP
0039603A 24 FC AND AL,0FC
0039603C EB 02 JMP SHORT 00396040
0039603E 2052 EB AND BYTE PTR DS:[EDX-15],DL
00396041 0357 D5 ADD EDX,DWORD PTR DS:[EDI-2B]
00396044 EF OUT DX,EAX ; I/O 命令
00396045 EB 02 JMP SHORT 00396049
00396047 0FB9 ??? ; 未知命令
00396049 EB 02 JMP SHORT 0039604D
0039604B 33B2 EB03BBA9 XOR ESI,DWORD PTR DS:[EDX+A9BB03EB]
00396051 62EB BOUND EBP,EBX ; 非法使用寄存器
00396053 03F7 ADD ESI,EDI
00396055 C5D9 LDS EBX,ECX ; 非法使用寄存器
00396057 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
0039605A 6A CC PUSH -34
0039605C 8BFC MOV EDI,ESP
0039605E A6 CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
0039605F ^ 74 FD JE SHORT 0039605E
00396061 C1F0 00 SAL EAX,0 ; 移位常量超出 1..31 的范围
00396064 EB 02 JMP SHORT 00396068
00396066 0F65EB PCMPGTW MM5,MM3
00396069 02CD ADD CL,CH
脚本代码
/*
PELock 1.0x -> Bartosz Wojcik IAT Fix script v0.1
Author: peaceclub
Email: 5261314@sohu.com
OS: Winxp Sp2
Date: 2006-7-29
Action: Auto fix IAT,With Remote jmp Patch code
*/
var iat1
var nextstop
dbh
l1:
find eip,#8919#
bprm $RESULT,2
mov iat1,$RESULT
find eip,#C602E9#
mov nextstop,$RESULT
mov [nextstop],#ebfe#
eob I2
esto
I2:
cmp eip,iat1
jne I3
mov [ecx],eax
add eip,2
eob I2
esto
I3:
eob I2
esto
I4:
msg "IAT Fix OK.Please Ctrl+G,then input EDI-1 to Patch Code Area!"
cob
dbs
ret
第三步:RemoteJump代码混淆修补:
脚本停止后,提示:
IAT Fix OK.Please Ctrl+G,then input EDI-1 to Patch Code Area!
CPU窗口显示:
003982B5 - EB FE JMP SHORT 003982B5 //停在这里
003982B7 - E9 8BC72BC2 JMP C2654A47
003982BC 83E8 05 SUB EAX,5
003982BF 8942 01 MOV DWORD PTR DS:[EDX+1],EAX
003982C2 8A06 MOV AL,BYTE PTR DS:[ESI]
003982C4 46 INC ESI
003982C5 0FB6C8 MOVZX ECX,AL
003982C8 83E0 03 AND EAX,3
003982CB C1E9 02 SHR ECX,2
003982CE F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
003982D0 8BC8 MOV ECX,EAX
003982D2 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
003982D4 8A06 MOV AL,BYTE PTR DS:[ESI]
003982D6 46 INC ESI
003982D7 03D0 ADD EDX,EAX
003982D9 C607 E9 MOV BYTE PTR DS:[EDI],0E9
003982DC 2BD7 SUB EDX,EDI
003982DE 83EA 05 SUB EDX,5
003982E1 8957 01 MOV DWORD PTR DS:[EDI+1],EDX
003982E4 83C7 05 ADD EDI,5
003982E7 4B DEC EBX
003982E8 ^ 75 C3 JNZ SHORT 003982AD
003982EA 5F POP EDI
[动作]:CPU窗口中Ctrl+G,输入Edi-1
不同机器申请空间不一样,我机器上是来到00f80000,粘贴以下二进制代码:
EB 05 8B 16 83 C6 04 8B FA 0F B6 06 46 80 3E 8D 74 15 50 8B C8 83 E0 03 C1 E9 02 F3 A5 8B C8 F3
A4 5A 46 90 90 EB 47 50 33 D2 33 C9 B1 06 F7 F1 8B C8 0F B6 46 01 8A E0 68 25 2D 35 3D 68 05 0D
15 1D B0 B8 33 D2 38 24 14 74 07 90 90 FE C0 42 EB F4 5A 5A 25 FF 00 00 00 50 33 C0 8B 56 02 03
C2 83 C6 06 E2 F6 5A 88 17 89 47 01 46 5A 4B 75 91 5F 8D 4D 66 2B CF F3 AA 61 C3
在00f80000新建EIP(光标移到00f80000,然后Ctrl+*)
[动作]:F4到修补代码最后的retn上
第四步:StolenCode修补:
在401000上下访问断点,F9运行,我们停留在:
005C5AF5 E8 8A12E4FF CALL 黑防专版.00406D84 //停留在这里
005C5AFA 8B1D 08D15C00 MOV EBX,DWORD PTR DS:[5CD108] ; 黑防专版.005D3760
005C5B00 8B35 14D25C00 MOV ESI,DWORD PTR DS:[5CD214] ; 黑防专版.005CEBF4
005C5B06 8B06 MOV EAX,DWORD PTR DS:[ESI]
005C5B08 E8 4F28ECFF CALL 黑防专版.0048835C
005C5B0D 8B0E MOV ECX,DWORD PTR DS:[ESI]
005C5B0F B2 01 MOV DL,1
005C5B11 A1 70865A00 MOV EAX,DWORD PTR DS:[5A8670]
005C5B16 E8 59AFEBFF CALL 黑防专版.00480A74
005C5B1B 8903 MOV DWORD PTR DS:[EBX],EAX
005C5B1D 8B03 MOV EAX,DWORD PTR DS:[EBX]
005C5B1F E8 A8F2EBFF CALL 黑防专版.00484DCC
005C5B24 6A 00 PUSH 0
005C5B26 8B06 MOV EAX,DWORD PTR DS:[ESI]
005C5B28 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30]
005C5B2B 50 PUSH EAX
005C5B2C E8 9F21E4FF CALL 黑防专版.00407CD0 ; JMP 到 user32.ShowWindow
005C5B31 8B03 MOV EAX,DWORD PTR DS:[EBX]
005C5B33 8B10 MOV EDX,DWORD PTR DS:[EAX]
005C5B35 FF92 88000000 CALL DWORD PTR DS:[EDX+88]
005C5B3B 8B06 MOV EAX,DWORD PTR DS:[ESI]
005C5B3D BA B05F5C00 MOV EDX,黑防专版.005C5FB0
005C5B42 E8 0D24ECFF CALL 黑防专版.00487F54
005C5B47 8B03 MOV EAX,DWORD PTR DS:[EBX]
005C5B49 8B80 FC020000 MOV EAX,DWORD PTR DS:[EAX+2FC]
005C5B4F BA C85F5C00 MOV EDX,黑防专版.005C5FC8
005C5B54 E8 5F21EAFF CALL 黑防专版.00467CB8
005C5B59 8B03 MOV EAX,DWORD PTR DS:[EBX]
OK 问题开始了
1.壳的入口代码为什么和peaceclub大侠壳的代码不一样?
2.peaceclub大下说 看堆栈区域和cpu窗口代码,我们依照VC程序入口点进行修补,oep为401d60,如何看?如何知道OEP地址?
3.OEP真实地址是那里?如何优化?
peaceclub原文连接 http://bbs.pediy.com/showthread.php?s=&threadid=29806
研究一个月了 到了最后一步了 不会
请各位大侠帮忙看下
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课