[原创]patch软件机器码实现破解

Eddy 发布于2010-7-17 16:31:29 分类: 技术心得 已浏览loading 网友评论0条 我要评论

这种方法只适用于你有了一组正确的KEY。

目标程序是一个PB写的软件。很奇怪,关键的解密部分没法反编译到源码,于是就有了本文-patch机器码。

跟踪程序发现机器码获取是通过dll文件的一个导出函数实现的,于是在这个函数段首下段,分析得知:

02773754    8BD8            MOV EBX,EAX
02773756    85DB            TEST EBX,EBX
02773758    74 23           JE SHORT 0277377D

在02773754这个地址patch最好。找一块空地写代码,我找的是02776780这个地址:

02776780   > \8B5C24 0C     MOV EBX,DWORD PTR SS:[ESP+C]---取机器码保存的地址
02776784   .  60            PUSHAD---保护
02776785   .  8BFB          MOV EDI,EBX
02776787   .  E8 10000000   CALL 0277679C---此处用到了代码的自定位,因为是在dll中,需要考虑重定位问题
0277678C   .  3131          XOR DWORD PTR DS:[ECX],ESI
0277678E   .  3331          XOR ESI,DWORD PTR DS:[ECX]
02776790   .  34 35         XOR AL,35
02776792   .  3230          XOR DH,BYTE PTR DS:[EAX]
02776794   .  42            INC EDX
02776795   .  59            POP ECX
02776796   .  45            INC EBP
02776797   .  44            INC ESP
02776798   .  44            INC ESP
02776799   .  59            POP ECX
0277679A      00            DB 00
0277679B      90            NOP
0277679C   .  5E            POP ESI---得到源字符串地址0277678C
0277679D   .  B9 0F000000   MOV ECX,0F
027767A2   .  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]----复制字符串
027767A4   .  61            POPAD
027767A5   .  8BD8          MOV EBX,EAX
027767A7   .  85DB          TEST EBX,EBX
027767A9   .^ 0F84 F3CFFFFF JE 027737A2
027767AF   .^ E9 A6CFFFFF   JMP 0277375A---跳回原流程

然后将02773754代码改为:

02773754   . /E9 27300000   JMP 02776780
02773759     |90            NOP

最后保存该dll文件。测试成功^_

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/technique/441.html     欢迎订阅Eddy Blog

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言