分享
 
 
 

PESPIN v0.7脱壳(完结篇)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

PESPIN v0.7脱壳(完结篇)

【目 标】: win98’s notepad和自己随便写的一个masm程序

【工 具】:Olydbg1.1

【任 务】:完成上篇文章里没有完成的任务脱壳and修复

【操作平台】:WINXP pro sp1

【作 者】:loveboom[DFCG][FCG]

【相关链接】: 见附见

【简要说明】:看过我上篇关于脱pespin 的文章就知道我上次只做了一半的工作,所以我们这次的任务是脱衣+说服”她”(修复)。

【详细过程】:

上次我们说怎么到关键代码处,所以这里不再多讲了,如果你没看过的话,可以先去看看我的上篇文章,话说通过上一篇我们到了关键代码处(这次的程序和上次不同,不过关键代码是一样的,LoadLibraryA断后,来到了这里:

[CODE]

0040C887 60 PUSHAD ;最后到了这里

0040C888 EB 04 JMP SHORT VC.0040C88E

0040C88A CB RETF ; Far return

0040C88B EB 04 JMP SHORT VC.0040C891

[/CODE]

现在清除一点垃圾代码,清理过后,向下看看这里的代码:

[CODE]

0040C918 8BBD 792B4000 MOV EDI,DWORD PTR SS:[EBP+402B79]

0040C91E 3BC7 CMP EAX,EDI

0040C920 76 35 JBE SHORT VC.0040C957

;找到这里后,改成jmp xxxx

0040C922 03BD 7D2B4000 ADD EDI,DWORD PTR SS:[EBP+402B7D]

……

0040C950 50 PUSH EAX

0040C951 FF95 C4394000 CALL DWORD PTR SS:[EBP+4039C4]

0040C957 EB 01 JMP SHORT VC.0040C95A

0040C959 90 NOP

0040C95A 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX

;这里改成 mov ss:[edx],eax,移入正确的函数

0040C95E 61 POPAD

[/CODE]

上面的全部改完后,就要注意了,现在有两种情况,分别对应vc/Delphi,和masm两种情况(VB的就不用说了,相当简单,上面的都不用改).先说vc/delphi这种情况:

在第一个ret向下看不远处就会看到.

VC/delphi的解决方法:

[CODE]

0040C962 0BC0 OR EAX,EAX

0040C964 C3 RETN ;这里就是Ret

0040C965 EB 01 JMP SHORT VC.0040C968

0040C967 90 NOP

0040C968 57 PUSH EDI

0040C969 51 PUSH ECX

0040C96A 90 NOP

0040C96B 90 NOP

0040C96C 90 NOP

0040C96D 90 NOP

0040C96E 90 NOP

0040C96F 90 NOP

0040C970 90 NOP

0040C971 90 NOP

0040C972 90 NOP

0040C973 BF 4FE24000 MOV EDI,VC.0040E24F

0040C978 EB 01 JMP SHORT VC.0040C97B

0040C97A 90 NOP

0040C97B B9 7F020000 MOV ECX,27F

0040C980 EB 01 JMP SHORT VC.0040C983

0040C982 90 NOP

0040C983 3917 CMP DWORD PTR DS:[EDI],EDX

0040C985 74 0A JE SHORT VC.0040C991

0040C987 47 INC EDI

0040C988 ^ E2 F9 LOOPD SHORT VC.0040C983

0040C98A EB 01 JMP SHORT VC.0040C98D

0040C98C 90 NOP

0040C98D 8902 MOV DWORD PTR DS:[EDX],EAX

;这里就是进行搞破坏,所以这里要NOP它

0040C98F EB 25 JMP SHORT VC.0040C9B6

0040C991 90 NOP

0040C992 90 NOP

0040C993 90 NOP

0040C994 90 NOP

0040C995 90 NOP

0040C996 90 NOP

0040C997 90 NOP

0040C998 90 NOP

0040C999 90 NOP

0040C99A 807F FF 00 CMP BYTE PTR DS:[EDI-1],0

0040C99E 74 11 JE SHORT VC.0040C9B1

0040C9A0 807F FF E9 CMP BYTE PTR DS:[EDI-1],0E9

;这里是判断是不是MASM的程序.后面再讲

0040C9A4 ^ 75 E7 JNZ SHORT VC.0040C98D

0040C9A6 83C7 04 ADD EDI,4

0040C9A9 2BC7 SUB EAX,EDI

0040C9AB 8947 FC MOV DWORD PTR DS:[EDI-4],EAX

0040C9AE EB 06 JMP SHORT VC.0040C9B6

0040C9B0 90 NOP ;这里是花指令,nop掉

0040C9B1 8907 MOV DWORD PTR DS:[EDI],EAX

;对于VC/DELPHI加的壳的程序,这里是最重要的了

0040C9B3 EB 01 JMP SHORT VC.0040C9B6

0040C9B5 90 NOP

0040C9B6 59 POP ECX

[/CODE]

并且经过多次跟踪,每个跳去壳中的IAT里装的就是真正的iat位置,所以我们要想办法让它改回去,运行到0040C9B1处看看,刚好edi就是壳的iat,edx就是真正的iat,

得到这些信息后就好办很多,把0040C9B1这里改成跳到一个空闲的地方,写上我们自己的代码,我找的是4113F0,找到地方后,就把0040c9b1的代码改成:

[CODE]

0040C9B1 /E9 3A4A0000 JMP VC.004113F0

[/CODE]

在4113F0处写上几行代码:

[CODE]

004113F0 60 PUSHAD

004113F1 9C PUSHFD

004113F2 BB 00104000 MOV EBX,VC.00401000 ; CODEBASE

004113F7 B9 00400000 MOV ECX,4000 ; CODESIZE

004113FC 8B13 MOV EDX,DWORD PTR DS:[EBX]

004113FE 3BD7 CMP EDX,EDI

00411400 75 0C JNZ SHORT VC.0041140E

00411402 8B17 MOV EDX,DWORD PTR DS:[EDI]

00411404 8913 MOV DWORD PTR DS:[EBX],EDX

00411406 83C3 04 ADD EBX,4

00411409 83E9 03 SUB ECX,3

0041140C EB 03 JMP SHORT VC.00411411

0041140E 83C3 01 ADD EBX,1

00411411 ^ E2 E9 LOOPD SHORT VC.004113FC

00411413 9D POPFD

00411414 61 POPAD

00411415 ^ E9 9CB5FFFF JMP VC.0040C9B6 ;找完后回去老地方

[/CODE]

上面这段代码的作用就是在code段里找跳到壳iat的那个地址,然后用那个地址里的值来替换它.好了,现在看看效果如何,在12ffa4处下断 hr 12ffa4,断下后,用imp填入oep为10cc,然后AUTOSEARCH-+Get一下看看,怎么样,可以自动找到,iat了吧,看看简单看一下stolen code:

[CODE]

0040D088 55 PUSH EBP ;*****

0040D089 EB 01 JMP SHORT VC.0040D08C

0040D08B 90 NOP

0040D08C 8BEC MOV EBP,ESP ;*****

0040D08E EB 01 JMP SHORT VC.0040D091

0040D090 90 NOP

0040D091 83EC 44 SUB ESP,44 ;*****

0040D094 EB 01 JMP SHORT VC.0040D097

0040D096 90 NOP

0040D097 56 PUSH ESI ;*****

0040D098 EB 01 JMP SHORT VC.0040D09B

0040D09A 90 NOP

0040D09B FF15 19E34000 CALL DWORD PTR DS:[40E319] ;*****

; VC.004063E4 这里要注意一下,这里要改成 CALL DWORD PTR DS:[4063E4]

0040D0A1 EB 01 JMP SHORT VC.0040D0A4

0040D0A3 90 NOP

0040D0A4 8BF0 MOV ESI,EAX ;*****

0040D0A6 EB 01 JMP SHORT VC.0040D0A9

0040D0A8 90 NOP

0040D0A9 8A00 MOV AL,BYTE PTR DS:[EAX] ;*****

0040D0AB EB 01 JMP SHORT VC.0040D0AE

0040D0AD 90 NOP

0040D0AE 3C 22 CMP AL,22 ;*****

0040D0B0 EB 01 JMP SHORT VC.0040D0B3

0040D0B2 90 NOP

0040D0B3 - E9 2740FFFF JMP VC.004010DF ;抽的代码并不多,到这里总算把控制权交还回程序了.

[/CODE]

补上壳所抽代码,然后dump,fixdump就搞定了.。

好了,现在VC/DELPHI的已经搞定了,我们来看看masm的了。

[CODE]

00405918 8BBD 792B4000 MOV EDI,DWORD PTR SS:[EBP+402B79]

0040591E 3BC7 CMP EAX,EDI

00405920 76 35 JBE SHORT masm.00405957

;这里一样改成 jmp xxxx

00405922 03BD 7D2B4000 ADD EDI,DWORD PTR SS:[EBP+402B7D]

00405959 90 NOP

0040595A 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX

;这里改成 mov ss:[edx],eax

0040595E 61 POPAD

……

0040598D 8902 MOV DWORD PTR DS:[EDX],EAX

;这里也nop掉

[/CODE]

下面的就要注意了,MASM的就会走这条路:

[CODE]

0040599A 807F FF 00 CMP BYTE PTR DS:[EDI-1],0

0040599E 74 11 JE SHORT masm.004059B1

004059A0 807F FF E9 CMP BYTE PTR DS:[EDI-1],0E9

;如果是MASM的它的IAT又玩另外一种花样,MASM的程序它就变成了远程跳了

004059A4 ^ 75 E7 JNZ SHORT masm.0040598D

004059A6 83C7 04 ADD EDI,4

;如果是 远程跳的话,就到这里,进行”解释”了

004059A9 2BC7 SUB EAX,EDI

004059AB 8947 FC MOV DWORD PTR DS:[EDI-4],EAX

004059AE EB 06 JMP SHORT masm.004059B6

004059B0 90 NOP

004059B1 8907 MOV DWORD PTR DS:[EDI],EAX

[/CODE]

看看上面的代码再分析分析,可以发现,其实 [edi-1]就是原程序的FF25的地址,[EDI+1]就是放正确iat的地址,所以我们又来写几行代码,这个就更容易的。

改成这样子:

[CODE]

004059A6 66:C747 FF FF25 MOV WORD PTR DS:[EDI-1],25FF

004059AC 8957 01 MOV DWORD PTR DS:[EDI+1],EDX

004059AF EB 05 JMP SHORT masm.004059B6

004059B1 8907 MOV DWORD PTR DS:[EDI],EAX

004059B3 EB 01 JMP SHORT masm.004059B6

004059B5 90 NOP

004059B6 59 POP ECX

004059B7 5F POP EDI

004059B8 C3 RETN

[/CODE]

呵呵,改好去用hr 12ffa4的方法到stolen code处:

[CODE]

00406088 6A 00 PUSH 0

0040608A EB 01 JMP SHORT masm.0040608D

0040608C 90 NOP

0040608D 68 97604000 PUSH masm.00406097

00406092 - E9 2FB0FFFF JMP masm.004010C6

00406097 A3 00304000 MOV DWORD PTR DS:[403000],EAX

0040609C EB 01 JMP SHORT masm.0040609F

0040609E 90 NOP

0040609F 68 A9604000 PUSH masm.004060A9

004060A4 - E9 35B0FFFF JMP masm.004010DE ; JMP to COMCTL32.InitCommonControls

004060A9 6A 00 PUSH 0

004060AB EB 01 JMP SHORT masm.004060AE

004060AD 90 NOP

004060AE 68 962628E1 PUSH E1282696

004060B3 810424 98E9171F ADD DWORD PTR SS:[ESP],1F17E998

004060BA 6A 00 PUSH 0

004060BC EB 01 JMP SHORT masm.004060BF

004060BE 90 NOP

004060BF 6A 65 PUSH 65

004060C1 EB 01 JMP SHORT masm.004060C4

004060C3 90 NOP

004060C4 FF35 00304000 PUSH DWORD PTR DS:[403000]

004060CA EB 01 JMP SHORT masm.004060CD

004060CC 90 NOP

004060CD 68 D7604000 PUSH masm.004060D7

004060D2 - E9 F5AFFFFF JMP masm.004010CC

004060D7 6A 00 PUSH 0

004060D9 EB 01 JMP SHORT masm.004060DC

004060DB 90 NOP

004060DC 68 E6604000 PUSH masm.004060E6

004060E1 - E9 DAAFFFFF JMP masm.004010C0

[/CODE]

这里具体的代码我就不在多讲了,自己看也看得懂吧.

好了,到了这里也算是到了终点站吧,收工!

Greetz:

Fly,Jingulong,yock,tDasm,David,ahao,vcasm,UFO(brother),alan(sister),all of my friends and you!

By loveboom[DFCG][FCG]

Email:bmd2chen@tom.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有