<< 隐藏控制台程序的窗口 Category: 黑客技术文章 自己记录......... >>
Alex Protector 1.0 beta2    [ 2009-04-22 4:04:13 PM | Author: kyo327 | From: Original ]
Alex Protector 1.0 beta2

这个壳又是俄罗斯人写的,并且非常老了吧。
我测试了下,好象只能加asm语言编写的程序,加其他的都不行,兼容性严重失败。

不过这个壳倒是有点意思,他有偷代码。
------------------------------华丽的分割线---------------------------------
OEP
首先在代码段下内存访问断点,F9后到达这里
/*404916*/ MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
然后bp GetModuleHandleA 断下返回用户代码后
再在代码段下内存访问断可来到这
/*3B0C05*/ MOV DWORD PTR DS:[ECX],EAX
/*3B0C07*/ ADD EDI,4
/*3B0C0A*/ DEC BL
/*3B0C0C*/ POP EAX
/*3B0C0D*/ CMP BL,0
/*3B0C10*/ JA 003B0B58
/*3B0C16*/ CMP BYTE PTR DS:[EDI],0C3
/*3B0C19*/ JE 003B09C0
/*3B0C1F*/ CMP DWORD PTR DS:[EDI],0

然后一直往下拉 因为中间都是垃圾指令
到这
/*3B11DA*/ MOV EAX,DWORD PTR SS:[EBP+4023AD]
/*3B11E0*/ MOV DWORD PTR SS:[ESP+1C],EAX
/*3B11E4*/ POPAD
/*3B11E5*/ JMP EAX

删除内存断,在3b11e5处下断,shift+f9跳向OEP

不过跳过来后发现前面也都是垃圾指令。
中间就有一个 push 0
然后下面一个跨段跳转 可以知道这里肯定是把push 0给偷掉了
/*3D0C52*/ TEST EDI,874CDC1C
/*3D0C58*/ AND EDI,9378C643
/*3D0C5E*/ JMP 0006.0040110D

过了这个JMP后算真正来到代码里了,当然要把第一条指令push 0给补上。
-----------------------------华丽的分割线--------------------------------

到OEP还不算完事,因为它把IAT也弄的一团糟。


pacth代码吧
/*3B0C05*/ MOV DWORD PTR DS:[ECX],EAX
首先改为 jmp 3b1800


89 01 53 8B 58 38 89 18 5B 83 C7 04 E9 F9 F3 FF FF 90

/*3B1800*/ MOV DWORD PTR DS:[ECX],EAX
/*3B1802*/ PUSH EBX
/*3B1803*/ MOV EBX,DWORD PTR DS:[EAX+38] //在偏移38处放的是正确API地址
/*3B1806*/ MOV DWORD PTR DS:[EAX],EBX
/*3B1808*/ POP EBX
/*3B1809*/ ADD EDI,4
/*3B180C*/ JMP 003B0C0A
/*3B1811*/ NOP

dump后 修复时用获取API调用 再新建个IAT 就OK了。

不过有时候会有一个api获取失败,那时侯再手动修复吧。我不想弄了。

反正脱主程序时没问题。





Comments RSS Feed http://www.kyospace.com/feedcomm.asp?logID=318

Quote kyo327 Posted at 2009-04-22 4:59:33 PM
手脱 EXEStealth 2.75a -> WebtoolMaster
两分钟解决了这个
感觉比上面那个简单多了.

OEP
内存访问断
代码段---PE头---代码段
就到了
/*4070D1*/ PUSH EBP
/*4070D2*/ MOV EBP,ESP
/*4070D4*/ PUSH -1
/*4070D6*/ PUSH 0014.0040C0E8
/*4070DB*/ PUSH 0014.0040855C
/*4070E0*/ MOV EAX,DWORD PTR FS:[0]
/*4070E6*/ PUSH EAX
he 4070d1
这时候dumpfix不行 因为有部分iat加密了

0040C0B8 7D6111E8 shell32.ShellExecuteA
0040C0BC 00000000
0040C0C0 001434C0
0040C0C4 001434C5
0040C0C8 001434CA
0040C0CC 001434CF
0040C0D0 001434D4
0040C0D4 001434D9
0040C0D8 001434DE
0040C0DC 001434E3
0040C0E0 001434E8


在0040C0C0下内存访问断

可知道有两个地方会覆盖
004176AB /76 0E JBE SHORT 0014.004176BB
004176AD |EB 2A JMP SHORT 0014.004176D9
004176AF |EB 0A JMP SHORT 0014.004176BB
004176B1 |81FB 00000080 CMP EBX,80000000
004176B7 |73 02 JNB SHORT 0014.004176BB
把004176AB 和004176B7处的jnb nop掉就行了.


不过还有校验的地方
hr 004176AB 可来到这里
/*4173CE*/ MUL EDX
/*4173D0*/ ADD EBX,EAX
/*4173D2*/ INC EDX
/*4173D3*/ INC EDI
/*4173D4*/ LOOPD SHORT 0014.004173CC
/*4173D6*/ XCHG EAX,EBX

这里有个跳转
00417739 8B9D F82F4000 MOV EBX,DWORD PTR SS:[EBP+402FF8]
0041773F 33C3 XOR EAX,EBX
00417741 74 08 JE SHORT 0014.0041774B

je没实现就改为jmp吧
现在再到OEP后直接用OD插件脱壳都是OK的.


Post Comment
Topic Locked or You don't have the Permission. No Comment Allowed.
Here is kyo's blog © 2004-2005 
Processed in 0.062500 second(s)