老文章档案 · 2003 年

用SMC的补丁方法来破解加壳的幻影2003

破解教程 · 补丁技术 · 2003-09-16 · 作者:lei_z_r 人气: · 出处:赢政天下整理收藏)

软件:幻影2003

加密方式:机器码+注册码,主运行文件huanying.exe被加壳ASPack 1.08.03,

未注册前有功能限制,不能保存、打印、发email。

难度:中等

所用工具:lodepe,softice,hiew6.83,topo

破解环境:win98第二版

本文仅在研究破解技术,请大家支持软件作者制作出更优秀的软件。

请大家多提意见,完善文章内容,造福于所有的crack

1、注册表中存放运行次数和注册码的地方

REGEDIT4

[HKEY_CURRENT_USER\Software\BraveTech\PhotoBuilder\regno]

"showme"=dword:00000000

"opensample"=dword:00000001

"lastbk"="C:\\PROGRAM FILES\\幻影2003\\backgrnd\\BCG_094.JPG"

"runtimes"=dword:00000005

"bserino"="F9R9-B3C9-J5D9-P0L0"*******注册码以明文存放在这里

2、软件破解

软件的主运行文件huanying.exe被加壳ASPack 1.08.03,用冲击波可得到入口地址OEP,脱壳后反

汇编,得到如下代码段,修改410B6E处的代码为9090或7500,则软件破解完成(注册码的破解比较简单,

采用的是明码比较,这里就不讲了)。

OEP: 452564==>0043DF6C

* Referenced by a CALL at Addresses:

(四个调用检测注册码的代码段的地址,分别对应了四个功能。)

|:00406531 , :0040A218 , :00414BF8 , :00414DE5

|

0167:00410820 6AFF push FFFFFFFF

.......

.......

0167:00410B6E 750D JNZ 00410B7D ********************

0167:00410B70 C744242C01000000 MOV DWORD PTR [ESP+2C],00000001

0167:00410B78 E9C8010000 JMP 00410D45

0167:00410B7D 33DB XOR EBX,EBX

0167:00410B7F 53 PUSH EBX

0167:00410B80 8D4C2444 LEA ECX,[ESP+44]

0167:00410B84 E8178BFFFF CALL 004096A0

3、此软件的破解并不难,手工或借助工具脱壳后修改一个字节就可完成破解;取消所有功能限制;

但用来作为一个学习SMC补丁方法的例子刚好。(因为我的本意不是讲脱壳,所以这一部分略,若有

人需要,可来信讨论,不过本人脱壳的水平不敢恭维。)

4、SMC的补丁方法(加壳ASPack 1.08.03 -> Alexey Solodovnikov)

分析:因为软件加壳,所以0167:00410B6E 750D JNZ 00410B7D

这一句代码是在内存动态生成的。那么首先看这一句是由哪一段代码生成的。

用 Softice loader启动huanying.exe文件,下断点bpm 410b6e,

ice中断后,用D 410b6e来看代码是不是750D JNZ 00410B7D,

若不是,按F5继续,直到代码生成为止。

我们来分析最后一次中断后的地方:

0167:00452333 8B85B5504400 MOV EAX,[EBP+004450B5]

0167:00452339 6800800000 PUSH 00008000***************

0167:0045233E 6A00 PUSH 00

0167:00452340 50 PUSH EAX

0167:00452341 FF95BD504400 CALL [EBP+004450BD]

0167:00452347 83C608 ADD ESI,08

0167:0045234A 833E00 CMP DWORD PTR [ESI],00

0167:0045234D 0F8546FFFFFF JNZ 00452299

0167:00452353 8B9DDF4A4400 MOV EBX,[EBP+00444ADF]

0167:00452359 0BDB OR EBX,EBX

0167:0045235B 7408 JZ 00452365

0167:0045235D 8B03 MOV EAX,[EBX]

在00452339地址前,代码已经生成,所以我决定在此句前修改00410B6E的代码。用PE工具得到

代码00452339也是动态生成的,所以也要找到生成00452339的代码段。

用 Softice loader启动huanying.exe文件,下断点bpm 00452339,

ice中断后,用D 00452339来看代码是不是6800800000 PUSH 00008000 ,

若不是,按F5继续,直到代码生成为止。

我们来分析最后一次中断后的地方:

0167:004520B7 8B85B5504400 MOV EAX,[EBP+004450B5]

0167:004520BD 6800800000 PUSH 00008000***************

0167:004520C2 6A00 PUSH 00

0167:004520C4 50 PUSH EAX

0167:004520C5 FF95BD504400 CALL [EBP+004450BD]

0167:004520CB 8D85374C4400 LEA EAX,[EBP+00444C37]

0167:004520D1 50 PUSH EAX

0167:004520D2 C3 RET

在4520bd的地方,代码已经生成,所以我要在4520bd这一句前给软件补丁;用PE工具得到这一段

代码在huanying.exe文件中是存在的,不需要再补丁。

现在理一下SMC的补丁方法来破解加壳软件的思路:

程序运行的过程:

程序运行-->在004520BD生成00452339代码段-->在00452339生成00410B6E代码段-->00410B6E代码段运行

程序补丁的过程:

程序运行-->在004520BD补丁00452339代码段-->在00452339补丁00410B6E代码段-->补丁后的00410B6E代码运行,软件破解。

从上面可以看出,补丁的代码要两处,第二处补丁第一处代码;以此类推,再复杂的加壳,第二处补丁第一处代码,

第三处补丁第二处代码,第四处补丁第三处代码,在经过多次的补丁,最后也会补成功。

具体步聘:

1,用topo 在huanying.exe文件中寻找空白代码段,我得到的是00453250

用hiew6.83修改源文件,在453250处加代码:

0167:00453250 6800800000 PUSH 00008000

0167:00453255 C7056E0B41007500C744MOV DWORD PTR [00410B6E],44C70075********

0167:0045325F E9DAF0FFFF JMP 0045233E

这一句就是修改410b6e的代码,修改为

0167:00410B6E 7500 JNZ 00410B70***********

2、用hiew6.83修改源文件,修改004520BD处的代码为

0167:004520BD E9120F0000 JMP 00453264

3、用hiew6.83修改源文件,在453264处加代码:

0167:00453264 6800800000 PUSH 00008000

0167:00453269 C70539234500E9120F00MOV DWORD PTR [00452339],000F12E9***********

0167:00453273 C6053D23450000 MOV BYTE PTR [0045233D],00

0167:0045327A E943EEFFFF JMP 004520C2

这一句就是修改00452339 的代码,修改为00452339 E9120F0000 JMP 00453250

4、运行软件,成功,补丁完成。试一试,功能限制已没有,破解完成。

================ 附修改结果

0167:004520B7 8B85B5504400 MOV EAX,[EBP+004450B5]

0167:004520BD E9A2110000 JMP 00453264***********

0167:004520C2 6A00 PUSH 00

0167:004520C4 50 PUSH EAX

0167:004520C5 FF95BD504400 CALL [EBP+004450BD]

0167:004520CB 8D85374C4400 LEA EAX,[EBP+00444C37]

0167:004520D1 50 PUSH EAX

0167:004520D2 C3 RET

================ 附增加的代码段

*****************************************************************************

0167:00453250 6800800000 PUSH 00008000

0167:00453255 C7056E0B41007500C744MOV DWORD PTR [00410B6E],44C70075

0167:0045325F E9DAF0FFFF JMP 0045233E

0167:00453264 6800800000 PUSH 00008000

0167:00453269 C70539234500E9120F00MOV DWORD PTR [00452339],000F12E9

0167:00453273 C6053D23450000 MOV BYTE PTR [0045233D],00

0167:0045327A E943EEFFFF JMP 004520C2

*****************************************************************************

================附动态补丁的结果

0167:00452333 8B85B5504400 MOV EAX,[EBP+004450B5]

0167:00452339 E9120F0000 JMP 00453250***********

0167:0045233E 6A00 PUSH 00

0167:00452340 50 PUSH EAX

0167:00452341 FF95BD504400 CALL [EBP+004450BD]

0167:00452347 83C608 ADD ESI,08

0167:0045234A 833E00 CMP DWORD PTR [ESI],00

================附动态补丁的结果(破解软件的关键地方)

:u 410b6e l 30

0167:00410B6E 7500 JNZ 00410B70***********

0167:00410B70 C744242C01000000 MOV DWORD PTR [ESP+2C],00000001

0167:00410B78 E9C8010000 JMP 00410D45

0167:00410B7D 33DB XOR EBX,EBX

0167:00410B7F 53 PUSH EBX

0167:00410B80 8D4C2444 LEA ECX,[ESP+44]

0167:00410B84 E8178BFFFF CALL 004096A0

0167:00410B89 B306 MOV BL,06

0167:00410B8B 8D4C2420 LEA ECX,[ESP+20]

希望能和大家互相交流经验,也希望能为crack们作一点贡献。

下一篇准备写

1,怎样修改软件文件,让软件自动输出注册号,自己成为自己的注册机。

2,怎样修改软件文件,破解多模块加密狗(rokey)的方法。(一个国内非常有名的软件,采用加密狗加密,

而且是多模块软件。)

(出处:赢政天下整理收藏)

相关文章:

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史