能力值:
( LV2,RANK:10 )
|
-
-
2 楼
好像是retn?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个嘛!
这就要看那个程序是用什么软件来加的壳了啊!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
不明白。。。也就说问题就是
怎么在知道自己已经到了出口?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
种类一样的壳是不是特征一样,
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
今天灌水太多了,回答以下简单的问题吧?
1:怎么在知道自己已经到了出口?
首先你要熟识各种编程软件的入口特征,以下几种用的较多
——————————————————————————
delphi:
55 PUSH EBP
8BEC MOV EBP,ESP
83C4 F0 ADD ESP,-10
B8 A86F4B00 MOV EAX,PE.004B6FA8
_______________________________________________
vc++
55 PUSH EBP
8BEC MOV EBP,ESP
83EC 44 SUB ESP,44
56 PUSH ESI
————————————————————————
vb:
00401166 - FF25 6C104000 JMP DWORD PTR DS:[<&MSVBVM60.#100>] ; MSVBVM60.ThunRTMain
0040116C > 68 147C4000 PUSH PACKME.00407C14
00401171 E8 F0FFFFFF CALL <JMP.&MSVBVM60.#100>
00401176 0000 ADD BYTE PTR DS:[EAX],AL
00401178 0000 ADD BYTE PTR DS:[EAX],AL
0040117A 0000 ADD BYTE PTR DS:[EAX],AL
0040117C 3000 XOR BYTE PTR DS:[EAX],AL
——————————————————————
bc++
0040163C > $ /EB 10 JMP SHORT BCLOCK.0040164E
0040163E |66 DB 66 ; CHAR 'f'
0040163F |62 DB 62 ; CHAR 'b'
00401640 |3A DB 3A ; CHAR ':'
00401641 |43 DB 43 ; CHAR 'C'
00401642 |2B DB 2B ; CHAR '+'
00401643 |2B DB 2B ; CHAR '+'
00401644 |48 DB 48 ; CHAR 'H'
00401645 |4F DB 4F ; CHAR 'O'
00401646 |4F DB 4F ; CHAR 'O'
00401647 |4B DB 4B ; CHAR 'K'
00401648 |90 NOP
00401649 |E9 DB E9
0040164A . |98E04E00 DD OFFSET BCLOCK.___CPPdebugHook
0040164E > \A1 8BE04E00 MOV EAX,DWORD PTR DS:[4EE08B]
00401653 . C1E0 02 SHL EAX,2
00401656 . A3 8FE04E00 MOV DWORD PTR DS:[4EE08F],EAX
0040165B . 52 PUSH EDX
0040165C . 6A 00 PUSH 0 ; /pModule = NULL
0040165E . E8 DFBC0E00 CALL <JMP.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA
00401663 . 8BD0 MOV EDX,EAX
不要怕,不要看见这些天书就心慌了,等你调试软件多了,入口点不用背的,一眼就看得出来
2 : 很小人说什么大跳转的,一般都是跨段的远跳转,如 UPX 等就是典型的
还不明白吧,练习多了就明白了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
恩谢谢六楼兄弟。。。我会努力的
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
我也刚开始学习脱壳,极度郁闷中。
在kanxue的脱壳基础知识入门中有讲解,
其实不只可以根据跨段指令寻找OE,还可以根据各种语言的特点,如六楼兄弟所说的,还可以根据堆栈平衡原理,利用内存断点寻找OEP,具体问题具体分析,呵呵,共同努力,希望我们都能取得进步。
|
|
|