已经好久没有写东西了,呵呵,人懒没办法啊,不过我现在在学脱asprotect得壳,研究了几天,
对付些简单得已经没
问题了,所以这里写篇
文章给初学脱asprotect这冬冬得cracker.
感谢zombieys,blowfish,小球对我的帮助!
目标
软件是个叫做icon catcher 3得
软件,是抓图标用的
用trw载入
软件,然后load,来到了这里:
0167:00401000 6801604D00
PUSH DWORD 004D6001
0167:00401005 E801000000
CALL 0040100B
0167:0004100A C3
RET 上面的那个call是可以用f10带过去的,再按一次f10就来到了上面的ret,然后返回到了下面这个地方:
0167:004D6001 60
PUSHA 0167:004D6002 E803000000
CALL 004D600A
0167:004D6007 E9EB045D45
JMP 45AA64F7
上面的这个call 004d600a是一定要进入的,因为大客们说过这个call相当于是jmp,瞧,
call 004d600a
这个
地址(004d600a)是不是离此指令的
地址(004d6002)很近呢?以后看到这样的
地址都要用f8进入,建
议以后跟踪的时候用f8键.
以后跟踪要主意的地方就是,看到程序向上跳的时候,就在跳转指令的下面一行按f9设置断点,返回f5继
续运行,这样一般都能跳过循环
0167:004D60C4 BEE70FD372
MOV ESI,72D30FE7
0167:004D60C9 5E
POP ESI 0167:004D60CA 81C32903B24D
ADD EBX,4DB20329
0167:004D60D0 80D6DF
ADC DH,DF
0167:004D60D3 8919
MOV [
ECX],
EBX 0167:004D60D5 80CA71
OR DL,71
0167:004D60D8 83E901
SUB ECX,
BYTE +01
0167:004D60DB 49
DEC ECX 0167:004D60DC 49
DEC ECX 0167:004D60DD 49
DEC ECX 0167:004D60DE 81E801000000
SUB EAX,01
0167:004D60E4 0F859EFFFFFF
JNZ NEAR 004D6088 (JUMP)这个会向"上"跳
0167:004D60EA 68EBFDE75C
PUSH DWORD 5CE7FDEB
那个jnz
near 004d6008会向上面跳转,所以这时你就应该在他的下面一行,也就是push
dword 5ce7fdeb
这里设置一个断点,然后按f5,之后程序就会被中断到这里了.
但是还有下面这种情况要主意!
0167:004D6242 58
POP EAX 0167:004D6243 81EA4EBACE4B
SUB EDX,4BCEBA4E
0167:004D6249 0FBFF6
MOVSX ESI,
SI 0167:004D624C 81C24ABACE4B
ADD EDX,4BCEBA4A
0167:004D6252 8BF7
MOV ESI,
EDI 0167:004D6254 81FAACF9FFFF
CMP EDX,FFFFF9AC
0167:004D625A 0F8516000000
JNZ NEAR 004D6276 (JUMP)
0167:004D6260 6880C8D167
PUSH DWORD 67D1C880
0167:004D6265 6681C7755D
ADD DI,5D75
0167:004D626A 5E
POP ESI 0167:004D626B E921000000
JMP 004D6291
0167:004D6270 D6 SALC
虽然jnz
near 004d6276是向"下"跳转的,但是当你跳到那里的时候你会发现那里又会有个jmp xxxxx
而且跳转的方向是向上面的,然后你就又会回到上面那段
代码,所以这时候你应该在jmp 004d6291那行
设置一个断点,然后f5让程序运行,此时程序又会被中断了:)而且你跳过了那讨厌的循环了,后面像这样
的情况还非常多,一定要注意!
0167:004D6604 8B31
MOV ESI,[
ECX]
0167:004D6606 03F2
ADD ESI,
EDX 0167:004D6608 E82F000000
CALL 004D663C
0167:004D660D BFA75125B7
MOV EDI,B72551A7
0167:004D6612 3BC7
CMP EAX,
EDI 0167:004D6614 7405
JZ 004D661B
//瞧这个,刚开始的时候这里是不跳的 0167:004D6616 83C104
ADD ECX,
BYTE +04
0167:004D6619 EBE9
JMP SHORT 004D6604
//又是个循环! 0167:004D661B XXXX XXXXXXXXXXXXXXXXXXXXXX
//所以在这里设置断点, 后面几乎每个call都要用f8进入,但是如果碰到下面这样的call,你就可以放心大胆的用f10带过去了!
0167:004D64CB FF9560020000
CALL NEAR [
EBP+0260]
//f10带过! 0167:004D64D1 898575010000
MOV [
EBP+0175],
EAX 0167:004D64D7 8B9D6