找回密码
 注册
搜索
热搜: 回贴

SMC技术在破解WINDOWS优化大师3.2A中的运用(8千字),SMC,补丁技术

2010-1-30 18:28| 发布者: admin| 查看: 113| 评论: 0|原作者: 仙之剑缘


SMC技术在破解WINDOWS优化大师3.2A中的运用(8千字),SMC,补丁技术
2008年06月23日 星期一 下午 09:24
SMC技术在破解WINDOWS优化大师3.2A中的运用



[声明]



我写文章的目的是为了交流技术,希望大家在转载时能保持文章的完整性。







[前言]



这是本人在看雪论坛是发表的第一篇破解教程,写的不好,请多原谅!

其实,这是我在破解WINDOWS优化大师3.2A时用到的技术,当时我并不知

道已经用ANTI-ASPACK0.2可以脱掉它,我用FI也查不到它的壳,所以我

只有手工脱壳。这个软件被脱壳后是很好破解的。所在我在这里只谈论如

何写SMC指令,没谈到如何破解它。



PART A:分析第一层压缩。

PART B:分析第二层压缩。

PART C:写SMC指令。



======================================< PART A >============================================

1.分析第一层压缩以及关键性的跳转。

2.确定要修改的指令。



下面的这段指令要注意一下。



0167:0058053B A3271A11A9 MOV [A9111A27],EAX

0167:00580540 91 XCHG EAX,ECX

0167:00580541 B0E7 MOV AL,E7

0167:00580543 6742 INC EDX

0167:00580545 FF6641 JMP [ESI 41]

0167:00580548 102A ADC [EDX],CH

0167:0058054A DE33 FIDIV WORD PTR [EBX]

0167:0058054C 27 DAA

0167:0058054D EA056970ED6F80 JMP 806F:ED706905

0167:00580554 EE OUT DX,AL

0167:00580555 47 INC EDI

0167:00580556 E9E0FEFFFF JMP 0058043B ;这里我们要处理一下,改成JMP 584005

;为何要改成584005呢?请参照

0167:0058055B 338CA456D9D422 XOR ECX,[ESP 22D4D956]

0167:00580562 2C3F SUB AL,3F

0167:00580564 1F POP DS



我们先来看一下在[58043B]里到底是什么指令。以下是[58042A--58043C]的指令片段:



0167:0058042A FF9504404400 CALL [EBP 00444004]

0167:00580430 8B2C24 MOV EBP,[ESP]

0167:00580433 81ED3C394400 SUB EBP,0044393C

0167:00580439 C3 RET

0167:0058043A 00E9 ADD CL,CH ;当程序运行到[580556]时,

;这里将变成JMP 580007

0167:0058043C C7FBFFFF0000 MOV EBX,0000FFFF



经过跟踪,我发现[58043A]的指令会被前面的JMP 58043B截成JMP 580007,这里可算是花指令技术了。

那[580007]里又是什么指令呢?跟进去瞧瞧。



0167:00580005 0000 ADD [EAX],AL

0167:00580007 E824040000 CALL 00580430 ;F8进入,到这里程序就快要解完第一层压缩了。

0167:0058000C EB00 JMP 0058000E

0167:0058000E BB30394400 MOV EBX,00443930

0167:00580013 03DD ADD EBX,EBP

0167:00580015 2B9DD03F4400 SUB EBX,[EBP 00443FD0]

0167:0058001B 83BDFC49440000 CMP DWORD PTR [EBP 004449FC],00

0167:00580022 899DFC494400 MOV [EBP 004449FC],EBX

0167:00580028 0F8566030000 JNZ 00580394



进入CALL 580430后,我们将来到这里。

0167:00580430 8B2C24 MOV EBP,[ESP]

0167:00580433 81ED3C394400 SUB EBP,0044393C

0167:00580439 C3 RET ;这里是第一层壳的出口。



======================================< PART B >============================================

1.分析第二层压缩以及关键性的跳转。

2.寻找主程序的入口地址。



0167:00580394 8B85AD394400 MOV EAX,[EBP 004439AD]

0167:0058039A 50 PUSH EAX

0167:0058039B 0385FC494400 ADD EAX,[EBP 004449FC]

0167:005803A1 59 POP ECX

0167:005803A2 0BC9 OR ECX,ECX

0167:005803A4 8985E63C4400 MOV [EBP 00443CE6],EAX

0167:005803AA 61 POPAD

0167:005803AB 7508 JNZ 005803B5

0167:005803AD B801000000 MOV EAX,00000001

0167:005803B2 C20C00 RET 000C

0167:005803B5 6800000000 PUSH 00000000 ;这里是第二层的出口,

;程序运行到这里的PUSH后会有一个值,

0167:005803BA C3 RET ;这个值正是主程序的入口,

;也是我们脱壳的关键。

0167:005803BB 8B85004A4400 MOV EAX,[EBP 00444A00]

0167:005803C1 8D8D2A4A4400 LEA ECX,[EBP 00444A2A]

0167:005803C7 51 PUSH ECX



好了,ASPACK已经完会被解压了。我们可以在这里手工脱壳,脱壳后生成的文件可以被W32DASM反汇编。



======================================< PART C >============================================

我们已经彻底搞清楚了ASPACK的解压过程,下面就要想办法写SMC指令了。我们可以用TOPO在程序前加上

150个90或00,以供我们写指令时用。我的思路是这样的:首先我们要在第一层压缩结束指令生成后的某

个地址写入JMP XXXXX,XXXXX是SMC指令相应部分所在的地址(注:因为有两层压缩,所以我的SMC指令要

分成好几个部分。)然后要在第二层压缩结束指令生成后的某个地址也写入JMP XXXXX,最后根据情况用

RET或JMP回到主程序的入口地址。(其实中间还有些细节,我会在后面的指令中一一分析的。)



[580000]是我们用TOPO加入空间后的新地址,我们要在这里写入SMC指令。



0167:00584000 JMP 00580000 ;[580000]是ASPACK的入口地址,先让它

;运行,过会再改。

0167:00584005 MOV DWORD PTR [00580439],003BDDE9 ;在第一层压缩结尾

0167:0058400F MOV BYTE PTR [0058043D],00 ;处写入JMP 0058401B

0167:00584016 JMP 00580007

0167:0058401B MOV DWORD PTR [005803BA],003C88E9 ;在第二层压缩结尾

0167:00584025 MOV BYTE PTR [005803BE],00 ;处写入JMP 00584047

0167:0058402C MOV WORD PTR [005803BF],9090

0167:00584035 MOV DWORD PTR [00580439],C7E900C3 ;这里是还原第一层压 结尾处的指令,因

0167:0058403F MOV BYTE PTR [0058043D],FB ;为;在第二层解压缩时要用到这些代码,

0167:00584046 RET ;若不还原就会死机。



0167:00584047 MOV WORD PTR [004F84BB],01B0 ;下面的指令就是向完成解压后的主程序里

0167:00584050 MOV BYTE PTR [004F84BD],EB ;写破解代码,写完后用RET退出第二层压缩。

0167:00584057 MOV WORD PTR [004F84EF],01B0 ;继续运行主程序。

0167:00584060 MOV BYTE PTR [004F84F1],EB

0167:00584067 MOV BYTE PTR [004F85FF],EB

0167:0058406E MOV WORD PTR [0050435A],00B0

0167:00584077 MOV BYTE PTR [0050435C],EB

0167:0058407E RET



[后记]



我脱壳不太好,记得我以前脱SafeCln3.02时老是出错,在WIN98第二版上脱的文件在第一版上不能用,

我怀疑是IMPORT表定位有错。哪位大哥脱壳比较好,教教小弟吧。我的QQ:17525661





祝各位在新的一年里身体健康! 工作顺利! 万事如意!


最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 15:19 , Processed in 0.174733 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部