【破解工具】OllyDBG v1.10
【破解平台】Windows XP Pro SP2
【软件名称】外挂海万能模块
【软件大小】
【原版下载】
【保护方式】
【软件简介】
一款可以制作外挂的但是又不仅仅只能用来制作外挂的易语言永久免费模块
【破解声明】逆向研究仅供分析
------------------------------------------------------------------------
【破解过程】
我们在易语言中可以很容易的看出到该模块的信息,这是一款于外挂作坊同类但是功能要繁杂很多的永久免费模块。今
天,我就分析一下该模块的内附的“注册码验证”函数如何破解!
模块信息:
模块名称:外挂海万能模块
作者:小烦*烦者不凡
版本:1.5
永久免费模块-让易语言全民化
打造超强功能,成就模块经典!
首先,我们写一个简单的例程检验来检验一下该模块的强度。见附带的 注册测试.e。请注意,在该例程中用以验证的核
心算法是:注册码验证 (编辑框2.内容, , “334455”, 编辑框1.内容)。 使用 易语言 v4.5 PYG破解版 编译后在
OllyDBG中载入。
我们在用户名中输入“王猛”,并点击“验证”按钮开始。CrackME将弹出错误对话框,告诉我们密码错误。在OD中按
F12接着按ALT+F9,点击错误提示框的“确定”按钮。程序停在了:
100691A6 5F POP EDI ; 0015F859
这句上边5行代码是一个完整的 MessageBoxA 调用,这些代码处于易语言核心支持库中。这个MessageBoxA 调用产生了
我们刚才看到的错误提示对话框。我们接着按Ctrl+F9 3次,返回到了主程序领空。现在停于:
00403DCD C3 RETN
这里便是E语言真实的流程,解密易语言经常性下断后要在库里转一转才能找到实际的易语言流程。我们在这里向上找代
码触发错误的流程。
00403D94 68 04000080 PUSH 80000004
00403D99 6A 00 PUSH 0
00403D9B 68 53314000 PUSH 403153
00403DA0 68 01030080 PUSH 80000301
00403DA5 6A 00 PUSH 0
00403DA7 68 00000000 PUSH 0
00403DAC 68 04000080 PUSH 80000004
00403DB1 6A 00 PUSH 0
00403DB3 68 5C314000 PUSH 40315C
00403DB8 68 03000000 PUSH 3
00403DBD BB 00030000 MOV EBX, 300
00403DC2 E8 5F520000 CALL 00409026 ; 这里调用库函数:信息框();
00403DC7 83C4 28 ADD ESP, 28 ; 来显示出错信息。
00403DCA 8BE5 MOV ESP, EBP
00403DCC 5D POP EBP
00403DCD C3 RETN
既然我们已经知道了错误提示是 00403D94 弹出来的,向上顺藤摸瓜找到谁调用了 00403D94 就是了。没走几步,我们
便可以发现 00403D53 跳向了注册失败提示。
00403D46 53 PUSH EBX
00403D47 E8 E0520000 CALL 0040902C
00403D4C 83C4 04 ADD ESP, 4
00403D4F 837D E8 01 CMP DWORD PTR SS:[EBP 18], 1
00403D53 0F85 3B000000 JNZ 00403D94 ; 跳向注册失败提示。
在 00403D53 上边有一个CMP比较指令,还是一句CALL 0040902C,这段代码就是关键代码,0040902C便是重要的注册验
证CALL。我们接着再向上找。在 00403CEF 我们看到了这样的代码:
00403CEF B8 30314000 MOV EAX, 403130 ; ASCII "334455"
334455 是我刚才设置的加密字串,郁闷吧!知道了加密字串根据这个模块的函数手册,直接做注册机都可以了。我们把
这里当作问题一!我们接着向上在 00403CB5 下断点,输入用户名密码开始调试。
00403CB5 6A FF PUSH -1
00403CB7 6A 08 PUSH 8
00403CB9 68 6B040116 PUSH 1601046B
00403CBE 68 01000152 PUSH 52010001
00403CC3 E8 70530000 CALL 00409038 ; 读取注册码
00403CC8 83C4 10 ADD ESP, 10
00403CCB 8945 FC MOV DWORD PTR SS:[EBP 4], EAX
00403CCE 6A FF PUSH -1
00403CD0 6A 08 PUSH 8
00403CD2 68 6A040116 PUSH 1601046A
00403CD7 68 01000152 PUSH 52010001
00403CDC E8 57530000 CALL 00409038 ; 读取用户名
00403CE1 83C4 10 ADD ESP, 10
00403CE4 8945 F8 MOV DWORD PTR SS:[EBP 8], EAX
00403CE7 6A 01 PUSH 1
00403CE9 8D45 F8 LEA EAX, DWORD PTR SS:[EBP 8]
00403CEC 50 PUSH EAX
00403CED 6A 01 PUSH 1
00403CEF B8 30314000 MOV EAX, 403130 ; 读取加密字符串 334455
00403CF4 8945 F4 MOV DWORD PTR SS:[EBP C], EAX
00403CF7 8D45 F4 LEA EAX, DWORD PTR SS:[EBP C]
00403CFA 50 PUSH EAX
00403CFB C745 EC 00000000 MOV DWORD PTR SS:[EBP 14], 0
00403D02 C745 F0 00000000 MOV DWORD PTR SS:[EBP 10], 0
00403D09 6A 00 PUSH 0
00403D0B FF75 F0 PUSH DWORD PTR SS:[EBP 10]
00403D0E FF75 EC PUSH DWORD PTR SS:[EBP 14]
00403D11 6A 01 PUSH 1
00403D13 8D45 FC LEA EAX, DWORD PTR SS:[EBP 4]
00403D16 50 PUSH EAX
00403D17 E8 C0010000 CALL 00403EDC ; F7进去 注册码计算
一步一步跟踪,到了0040407A这步大家注意看看EAX寄存器:
0040406B 6A 01 PUSH 1
0040406D FF75 24 PUSH DWORD PTR SS:[EBP+24]
00404070 6A 01 PUSH 1
00404072 FF75 1C PUSH DWORD PTR SS:[EBP+1C]
00404075 E8 7F050000 CALL 004045F9 ; 真实注册码
0040407A 8945 F4 MOV DWORD PTR SS:[EBP C], EAX ; 真码进入EAX
晃荡,我摔到了。这个模块带的注册码验证功能是个明码验证!!!!我们把这个当作问题二。大家可以再试试不输入
注册码的情况下会怎么样?更严重,在主流程中就可以看到明码的注册码。
现在我们发现三个问题,希望作者有空闲的时候可以将注册模块这部分加强加强,避免以上我们发现的三个问题。完毕
!
附录一:解决“问题一”
问题一提到的加密字符串显示的问题可以通过一个代码编写技巧来解决。首先声明一个文本型变量,例如 混淆,接着在
函数中使用下面的写法:(见 隐藏加密字符串.e)
注册码验证 (编辑框2.内容, , 混淆, 编辑框1.内容)
再反汇编后得到的代码变成了下面的样子,这样就达到了在OD中隐藏加密字符串的目的!
00406291 6A 01 PUSH 1
00406293 68 4C219A00 PUSH 9A214C
00406298 C745 F0 00000000 MOV DWORD PTR SS:[EBP 10], 0
0040629F C745 F4 00000000 MOV DWORD PTR SS:[EBP C], 0
004062A6 6A 00 PUSH 0
004062A8 FF75 F4 PUSH DWORD PTR SS:[EBP C]
004062AB FF75 F0 PUSH DWORD PTR SS:[EBP 10]
004062AE 6A 01 PUSH 1
004062B0 8D45 FC LEA EAX, DWORD PTR SS:[EBP 4]
------------------------------------------------------------------------
【破解总结】
现在我们对外挂海万能模块 软件注册 部分有了一个大体的概念,了解了该模块的缺点和避免缺点的方法。该模块提供的
软件注册功能在现阶段并不实用,因为我们可以通过逆向的手法拿到加密字符串,再用这个模块便写出软件注册机。
------------------------------------------------------------------------
说实话 我看了 是看不明白 希望有高人能明白