能力值:
( LV9,RANK:680 )
|
-
-
26 楼
呵呵
ESP总是遇到无法执行的异常
一怒之下,我F8单步就将其扒光了
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
003802A7 33C0 xor eax,eax
003802A9 CC int3
003802AA 64:8F05 00000000 pop dword ptr fs:[0]
003802B1 83C4 04 add esp,4
003802B4 85C0 test eax,eax
003802B6 74 19 je short 003802D1 ;原来这是关键,只要此处不跳则成功
003802B8 EB 35 jmp short 003802EF
|
能力值:
( LV11,RANK:188 )
|
-
-
28 楼
头昏纳,这几日有点筋疲力尽,又有朋友之拖,发奋一日未果,找别事休息:
好物,lord时就开始处理了
主要的流程如下。
只帖了地址和功能说明,code很简单清晰
004041CC > 60 PUSHAD:解压过程
1.
0040402C 890424 MOV DWORD PTR SS:[ESP],EAX ; retn 28,返回的是[ebp+51].lord过程有修改
2.
00404172 8B4424 24 MOV EAX,DWORD PTR SS:[ESP+24] ; kernel.32;VirtualAlloc;
3.4041cc
004041C1 50 PUSH EAX;解压到的目标
004041C2 53 PUSH EBX;加密着的code起始地址
004041C3 E8 04000000 CALL <001.解压过程>
4.
0003002B 8B06 MOV EAX,DWORD PTR DS:[ESI] ; 拖GetProcAddress使用的字串符
5.
0003005D 8B85 4E030000 MOV EAX,DWORD PTR SS:[EBP+34E]
00030063 0BC0 OR EAX,EAX
00030065 75 0E JNZ SHORT 00030075
00030067 6A 00 PUSH 0
00030069 FF95 FE030000 CALL DWORD PTR SS:[EBP+3FE]
0003006F 8985 0E040000 MOV DWORD PTR SS:[EBP+40E],EAX ; ebp+40e,模块基地址
00030075 8DB5 20040000 LEA ESI,DWORD PTR SS:[EBP+420]
0003007B 56 PUSH ESI
0003007C FF95 FE030000 CALL DWORD PTR SS:[EBP+3FE]
00030082 0BC0 OR EAX,EAX
00030084 75 07 JNZ SHORT 0003008D ; KerNER32.dll 基地址获取失败,lordlibrary
00030086 56 PUSH ESI
00030087 FF95 02040000 CALL DWORD PTR SS:[EBP+402] ; Lordlibrary
0003008D 8BF0 MOV ESI,EAX
0003009D 8985 1A040000 MOV DWORD PTR SS:[EBP+41A],EAX ; ebp+41a VirtualFree
000300BB 833C2B 00 CMP DWORD PTR DS:[EBX+EBP],0 ; 解压完成否的标志
000300BF 0F84 8C000000 JE 00030151
000300EE 8DB5 39040000 LEA ESI,DWORD PTR SS:[EBP+439] ; "OutputDebugStringA"检测
00030110 FFD0 CALL EAX ; kernel32.OutputDebugStringA
0003011D /74 23 JE SHORT 00030142 ; 发现调试器就VirturlFree..
0003011F |5E POP ESI
00030120 |58 POP EAX
00030121 |8B78 04 MOV EDI,DWORD PTR DS:[EAX+4]
00030124 |03BD 0E040000 ADD EDI,DWORD PTR SS:[EBP+40E]
0003012A |56 PUSH ESI
0003012B |57 PUSH EDI
0003012C |FF95 12040000 CALL DWORD PTR SS:[EBP+412] ; 4041cc.解压到edi;edi=oep;里面刻意的加了贼多条件判断,跳很多
00030132 |8B0C2B MOV ECX,DWORD PTR DS:[EBX+EBP]
00030135 |56 PUSH ESI
00030136 |F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR >
00030138 |5E POP ESI
00030139 |53 PUSH EBX
0003013A |68 00800000 PUSH 8000
0003013F |6A 00 PUSH 0
00030141 |56 PUSH ESI
00030142 \FF95 1A040000 CALL DWORD PTR SS:[EBP+41A] ; 写完code,virtualFree
6.
000301E0 8B95 4A030000 MOV EDX,DWORD PTR SS:[EBP+34A] ; 开始iat了
000301E6 03D5 ADD EDX,EBP
00030239 42 INC EDX
0003023A 52 PUSH EDX
0003023B 52 PUSH EDX
0003023C 56 PUSH ESI
0003023D FF95 FA030000 CALL DWORD PTR SS:[EBP+3FA] ; kernel32.GetProcAddress
00030243 8907 MOV DWORD PTR DS:[EDI],EAX ; kernel32.ExitProcess
这儿对不同dll的处理很聪明:
00030251 ^\E2 CA LOOPD SHORT 0003021D
00030253 ^ EB 93 JMP SHORT 000301E8
7,
000302A9 CC INT3;因为想不到载入要的东西还有什么没初始化,偷懒了,进去后在0x30000下内存断点二次直接回来了。(其实第一次回来是进入了异常处理过程,偷懒不看,嗨嗨)
8,
0003033F 61 POPAD
00030340 50 PUSH EAX
00030341 C3 RETN;正。
对断点的检测很赞。
|
能力值:
( LV3,RANK:20 )
|
-
-
29 楼
才接触脱壳,现在最简单的UPX是回了。
呵呵,下边的怎么破啊
PEBundle 2.0x - 2.4x-> Jeremy Collake [Overlay]
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
原来我也能脱了啊!
高兴,呵呵,支持PEDIY
不过不用ESP定律找不到入口.
|
能力值:
( LV3,RANK:20 )
|
-
-
31 楼
这个大家有录像吗?呵呵,我怎么没有看出来壳啊?好像就是一个普通的VC++程序,当然我知道它是伪装的。
|