肥牛 发表于 2018-4-9 16:46

一次糊里糊涂的破解

有个朋友发来一个软件,让我看一下,新峰进销存。网址http://www.63733.com,最新版本10.0 (2018.0404.5224)
而这个软件的破解过程,简直可以用糊里糊涂、莫名其妙来形容。因为我摆开了架子准备大干一场,结果对方直接就举了白旗。搞得我一点儿成就感都没有。
因为这个软件基本上可以说完全不设防,适合新手研究用。我把整个过程写出来,大家跟着我看吧。


这个软件安装好以后,是注册给新峰公司自己的,如果修改公司名,就会提示注册码不正确。而公司名会带到各种报表的表头中,所以破解的话,就得输入正确的注册码。

在这张图里,我们看到,输入注册码并且弹出对话框的那个窗体标题是“公司信息及系统设置”。所以我们要从这个窗体下手。
按照正常的思路分析,点击保存按钮以后,弹出错误信息,说明是在保存按钮的点击事件里进行了注册码的判断。
所以,现在的关键就是要找到这个事件的代码。


照例,先用ExeInfo查看主程序Xinfeng_Jxc10.exe,未加壳,VB程序。


我对VB的程序很头疼,因为我总觉得VB程序不是真编译,它的反编译代码看起来非常繁琐。所以,还是用VB Decompiler试试吧。
打开以后,逐个窗体查看,还好,第三个窗体就是我们要找的窗体。



窗体的代码向下拉,找保存按钮。

于是,我们就知道保存按钮的名字叫cmdok,那么按照VB的习惯,这个按钮的点击事件应该就是cmdok_click了。
在VB Decompiler左面树状中找到窗体frm_xt_dwxx下面的cmdok_click事件,如下图:


这个就是这个按钮的点击事件了。这段代码往下拉,就能看到注册失败的提示信息:

因为VB Decompiler的反编译实在是不靠谱,我们不能拿这个反编译代码来做什么分析。但是直接分析汇编代码,我对VB的汇编又很头疼。所以还是回去用OD吧。


用OD加载主程序Xinfeng_Jxc10.exe,然后F9直接运行。在软件中,点击软件设置,到了“公司信息及系统设置”窗体时,切回到OD,点击暂停键(或者按F12)。
因为我们前面已经用VB Decompiler分析过代码,所以就不需要再费劲找入口了,直接跳转到相应的地址就好了。
刚才那张图我们看到,“注册码不正确”的字符串对应的地址是007566D8,那么我们就在OD中,直接CTRL+G,输入地址007566D8,于是就跳转到相应的代码了。


我把OD的代码贴到下面:
0075651E   . FF15 30144000CALL DWORD PTR DS:[<&MSVBVM60.#619>]   ;msvbvm60.rtcRightCharVar
00756524   . 8B95 0CF4FFFFMOV EDX,DWORD PTR SS:
0075652A   . 52             PUSH EDX
0075652B   . 8D85 F8FDFFFFLEA EAX,DWORD PTR SS:
00756531   . 50             PUSH EAX
00756532   . 8D8D 08FEFFFFLEA ECX,DWORD PTR SS:
00756538   . 51             PUSH ECX
00756539   . 8D95 E8FDFFFFLEA EDX,DWORD PTR SS:
0075653F   . 52             PUSH EDX
00756540   . FFD6         CALL ESI
00756542   . 50             PUSH EAX
00756543   . FF15 30104000CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrVa>;msvbvm60.__vbaStrVarMove
00756549   . 8BD0         MOV EDX,EAX
0075654B   . 8D4D C0      LEA ECX,DWORD PTR SS:
0075654E   . FFD7         CALL EDI
00756550   . 50             PUSH EAX
00756551   . FF15 E0114000CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>;msvbvm60.__vbaStrCmp
00756557   . F7D8         NEG EAX
00756559   . 1BC0         SBB EAX,EAX
0075655B   . 40             INC EAX
0075655C   . F7D8         NEG EAX
0075655E   . 8985 C4F5FFFFMOV DWORD PTR SS:,EAX
00756564   . 8D45 C0      LEA EAX,DWORD PTR SS:
00756567   . 50             PUSH EAX
00756568   . 8D4D C4      LEA ECX,DWORD PTR SS:
0075656B   . 51             PUSH ECX
0075656C   . 8D55 C8      LEA EDX,DWORD PTR SS:
0075656F   . 52             PUSH EDX
00756570   . 8D45 CC      LEA EAX,DWORD PTR SS:
00756573   . 50             PUSH EAX
00756574   . 6A 04          PUSH 0x4
00756576   . FF15 7C134000CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>;msvbvm60.__vbaFreeStrList
0075657C   . 8D8D D0FEFFFFLEA ECX,DWORD PTR SS:
00756582   . 51             PUSH ECX
00756583   . 8D95 D4FEFFFFLEA EDX,DWORD PTR SS:
00756589   . 52             PUSH EDX
0075658A   . 6A 02          PUSH 0x2
0075658C   . FF15 70104000CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>;msvbvm60.__vbaFreeObjList
00756592   . 8D85 E8FDFFFFLEA EAX,DWORD PTR SS:
00756598   . 50             PUSH EAX
00756599   . 8D8D 08FEFFFFLEA ECX,DWORD PTR SS:
0075659F   . 51             PUSH ECX
007565A0   . 8D95 F8FDFFFFLEA EDX,DWORD PTR SS:
007565A6   . 52             PUSH EDX
007565A7   . 8D85 18FEFFFFLEA EAX,DWORD PTR SS:
007565AD   . 50             PUSH EAX
007565AE   . 6A 04          PUSH 0x4
007565B0   . FF15 50104000CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>;msvbvm60.__vbaFreeVarList
007565B6   . 83C4 34      ADD ESP,0x34
007565B9   . 66:83BD C4F5FF>CMP WORD PTR SS:,0x0
007565C1   . 0F84 36020000JE Xinfeng_.007567FD
007565C7   . 8B0B         MOV ECX,DWORD PTR DS:
007565C9   . 53             PUSH EBX
007565CA   . FF91 00050000CALL DWORD PTR DS:
007565D0   . 50             PUSH EAX
007565D1   . 8D95 D4FEFFFFLEA EDX,DWORD PTR SS:
007565D7   . 52             PUSH EDX
007565D8   . FF15 3C114000CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSe>;msvbvm60.__vbaObjSet
007565DE   . 8B85 D4FEFFFFMOV EAX,DWORD PTR SS:
007565E4   . C785 D4FEFFFF >MOV DWORD PTR SS:,0x0
007565EE   . 8985 20FEFFFFMOV DWORD PTR SS:,EAX
007565F4   . C785 18FEFFFF >MOV DWORD PTR SS:,0x9
007565FE   . 6A 03          PUSH 0x3
00756600   . 8D85 18FEFFFFLEA EAX,DWORD PTR SS:
00756606   . 50             PUSH EAX
00756607   . 8D8D 08FEFFFFLEA ECX,DWORD PTR SS:
0075660D   . 51             PUSH ECX
0075660E   . FF15 30144000CALL DWORD PTR DS:[<&MSVBVM60.#619>]   ;msvbvm60.rtcRightCharVar
00756614   . 8D95 08FEFFFFLEA EDX,DWORD PTR SS:
0075661A   . 52             PUSH EDX
0075661B   . FF15 08124000CALL DWORD PTR DS:[<&MSVBVM60.#561>]   ;msvbvm60.rtcIsNumeric
00756621   . F7D0         NOT EAX
00756623   . 66:8985 6CF5FF>MOV WORD PTR SS:,AX
0075662A   . 8D8D D4FEFFFFLEA ECX,DWORD PTR SS:
00756630   . FF15 88144000CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>;msvbvm60.__vbaFreeObj
00756636   . 8D85 08FEFFFFLEA EAX,DWORD PTR SS:
0075663C   . 50             PUSH EAX
0075663D   . 8D8D 18FEFFFFLEA ECX,DWORD PTR SS:
00756643   . 51             PUSH ECX
00756644   . 6A 02          PUSH 0x2
00756646   . FF15 50104000CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>;msvbvm60.__vbaFreeVarList
0075664C   . 83C4 0C      ADD ESP,0xC
0075664F   . 66:83BD 6CF5FF>CMP WORD PTR SS:,0x0
00756657   . 0F84 5E050000JE Xinfeng_.00756BBB
0075665D   . 6A 0D          PUSH 0xD
0075665F   . 8D95 18FEFFFFLEA EDX,DWORD PTR SS:
00756665   . 52             PUSH EDX
00756666   . 8B3D E0124000MOV EDI,DWORD PTR DS:[<&MSVBVM60.#608>];msvbvm60.rtcVarBstrFromAnsi
0075666C   . FFD7         CALL EDI                                 ;<&MSVBVM60.#608>
0075666E   . 6A 0D          PUSH 0xD
00756670   . 8D85 F8FDFFFFLEA EAX,DWORD PTR SS:
00756676   . 50             PUSH EAX
00756677   . FFD7         CALL EDI
00756679   . 6A 0D          PUSH 0xD
0075667B   . 8D8D C8FDFFFFLEA ECX,DWORD PTR SS:
00756681   . 51             PUSH ECX
00756682   . FFD7         CALL EDI
00756684   . 6A 0D          PUSH 0xD
00756686   . 8D95 A8FDFFFFLEA EDX,DWORD PTR SS:
0075668C   . 52             PUSH EDX
0075668D   . FFD7         CALL EDI
0075668F   . B9 04000280    MOV ECX,0x80020004
00756694   . 898D 60FDFFFFMOV DWORD PTR SS:,ECX
0075669A   . B8 0A000000    MOV EAX,0xA
0075669F   . 8985 58FDFFFFMOV DWORD PTR SS:,EAX
007566A5   . 898D 70FDFFFFMOV DWORD PTR SS:,ECX
007566AB   . 8985 68FDFFFFMOV DWORD PTR SS:,EAX
007566B1   . C785 C0F8FFFF >MOV DWORD PTR SS:,Xinfeng_.00>;UNICODE "软件开发商电话:0755-89808745"
007566BB   . BF 08000000    MOV EDI,0x8
007566C0   . 89BD B8F8FFFFMOV DWORD PTR SS:,EDI
007566C6   . 8D95 B8F8FFFFLEA EDX,DWORD PTR SS:
007566CC   . 8D8D 78FDFFFFLEA ECX,DWORD PTR SS:
007566D2   . FF15 D4134000CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarDu>;msvbvm60.__vbaVarDup
007566D8   . C785 F0F8FFFF >MOV DWORD PTR SS:,Xinfeng_.00>;UNICODE "注册码不正确,请与软件开发商联络!!"
007566E2   . 89BD E8F8FFFFMOV DWORD PTR SS:,EDI
007566E8   . C785 E0F8FFFF >MOV DWORD PTR SS:,Xinfeng_.00>;UNICODE "如果您需要正式注册请您与软件开发商联络获得注册码!"
007566F2   . 89BD D8F8FFFFMOV DWORD PTR SS:,EDI
007566F8   . C785 D0F8FFFF >MOV DWORD PTR SS:,Xinfeng_.00>;UNICODE "如果您只需要试用本软件则无需更改注册码信息!!"
00756702   . 89BD C8F8FFFFMOV DWORD PTR SS:,EDI
00756708   . 8D85 58FDFFFFLEA EAX,DWORD PTR SS:


按照一般编程的思路,应该先去做注册码的校验判断,错误的话就弹出错误提示。而一般来说,注册码的判断要么是字符串比较,要么是值的比较。
于是从错误提示倒着往回找,找各种的CMP命令。于是找到了一处
00756551 . FF15 E0114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>; msvbvm60.__vbaStrCmp
这里是一处字符串比较,谁跟谁比不知道,但是按照正常的思路,这里很可疑。于是在这里F2下断点。按F9执行。
在软件中,随便输入一个注册码,点击保存。OD截获这个断点,停在这里。

等等,那个EAX里是啥东西?这么一串字符串,看起来很可疑啊,复制下来。取消断点,再F9执行。回到软件中,注册码输入刚才的那串字符串“znt]XGzdZRA`y]Z`UEpqYoF]s]CfwQIca567”。
呃,注册成功。

什么鬼?这就完了?

好无聊啊!好没有成就感啊!
糊里糊涂啊!莫名其妙啊!
作为一名合格的程序员,你怎么能用注册码的明码进行比较呢?你好歹也要转换一下啊!


好吧,I 服了 You。
所以,这个破解的帖子,其实到现在就完了,什么分析过程啊,破解思路啊,全都没有。因为已经结束了。
注册机?拉到吧,我破解这个软件的目的就是想用,既然已经有注册码了,我还费劲去分析注册算法?
它都把注册码用明码显示出来了,直接用内存注册机就好了嘛!
内存注册机可以在吾爱破解工具箱里找到,用法我就不介绍了




huiyi1 发表于 2018-11-23 17:08

感谢楼主提供的思路和提供的软件   
本人百分百小白 从来没有接触过任何编程和破解最近三天才来学习的本来想根据你的步骤走一次破解但是好像软件更新了   用你的办法不行然后自己就慢慢琢磨吧
   找着找着突然发现
007A4D9B   /74 79         je short Xinfeng_.007A4E16
007A4D9D   |B9 04000280   mov ecx,0x80020004
007A4DA2   |894D 94         mov dword ptr ss:,ecx
007A4DA5   |B8 0A000000   mov eax,0xA
007A4DAA   |8945 8C         mov dword ptr ss:,eax
007A4DAD   |894D A4         mov dword ptr ss:,ecx
007A4DB0   |8945 9C         mov dword ptr ss:,eax
007A4DB3   |C785 04FFFFFF 5>mov dword ptr ss:,Xinfeng_.012>
007A4DBD   |C785 FCFEFFFF 0>mov dword ptr ss:,0x4008
007A4DC7   |C785 14FFFFFF 0>mov dword ptr ss:,Xinfeng_.004>; UNICODE "你的电脑当前日期不正确,请修改电脑日期(双击电脑右下方的时间,即可修改正确日期)."
根据JMP        这是一个无条件跳转指令,即总是跳转到指定的地址
JE或者JZ        若相等则跳;如果零标志位Z不为0则跳转,即,要求操作的结果为零
我就把JE改成JMP然后发现可以无限试用了{:1_907:}

AngrybirdK 发表于 2018-4-9 16:58

有点意思啊。 ;www

哎哟哥哥嗨你好 发表于 2018-4-9 17:13

这就尴尬了啊

tywhc 发表于 2018-4-9 17:14

楼主杀人还想见血:lol

53060476 发表于 2018-4-9 17:19

我看看,其实叶不太懂

Talisman 发表于 2018-4-9 17:19

楼主!你用到的破解工具是叫什么名字?可以发来分享一下吗?我也想学一学!

成航先森 发表于 2018-4-9 17:24

虽然看着结果很有趣,但是这些思路还是不太了解啊

肥牛 发表于 2018-4-9 17:29

Talisman 发表于 2018-4-9 17:19
楼主!你用到的破解工具是叫什么名字?可以发来分享一下吗?我也想学一学!

查看文件信息的是ExeInfo(ExeinfoPe.zip),VB反编译是VB Decompiler(VB.Decompiler.Pro.v10.1.Cracked.by.yoza.rar),跟踪调试工具是OD(吾爱破解专用版Ollydbg.rar)。在吾爱破解的网盘里都有的。

innovator 发表于 2018-4-9 17:41

666,这个程序员是不是十几年前穿越过来的,居然明文比较

南谷夏野 发表于 2018-4-9 17:49

都是明码没有加密。适合新手学习破解。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 一次糊里糊涂的破解