title: GIF Movie Gear v4.3 破解分析 date: 2023-02-17T12:42:57Z lastmod: 2023-02-17T15:31:14Z
GIF Movie Gear v4.3 破解分析
软件基本信息
软件名称 | 软件版本 | 编程语言 | 加壳情况 | 难度 | 难度说明 | 练习日期 |
---|---|---|---|---|---|---|
GIF Movie Gear | v4.3 | C++ | 无壳 | 简单 | 定位和算法都很简单 | 2023.02.17 |
功能:gif movie gear 是一款专业的GIF动图制作工具,软件体积小巧,界面简单,使用这款软件可以帮助用户轻松制作GIF动图。
验证方式
重启验证:否,暗桩保护:无
注册信息:帮助里有“注册(Register Now)”按钮
注册Name和Code会保存到注册表里,启动的时候会调用验证函数
破解过程
定位到验证逻辑
随便输入,等弹窗后调试器里暂停
然后向上追溯,直到某一层调试器没停下来,点击确定后,调试器又断下来的地方:
可以看到,这里是用MessageBoxA来弹窗的,而不是直接创建了个窗口
这里没有啥判断逻辑,应该就是处理参数来弹窗的函数,接着往上追溯:
可以看到,前后都有jmp指令,这里应该是个分支语句,执行完分支就跳转走,向上找会跳转到当前分支的地方:
可以看到,这里有个函数,参数是我们输入的name和code,这个函数应该就是验证函数了,然后根据返回值来进行跳转,验证失败了返回0,跳转到刚刚的失败弹窗处了就
验证成功往下走,创建注册表项,然后赋值:
接下来关闭窗口,不会有任何成功提示,但是帮助页面的Register按钮会消失:
暴力破解
修改注册函数内部开头:
mov eax,1
retn
算法
算法分两部分:显示注册码的判断:
这里会去从数组里判断是否和数组里的值相同:
"mvg21951736",
"mg374604342",
"mg370534035",
"mg373465241",
"mg37NTi",
"mg372503958",
"mg379843149",
"mg370151347",
"mg370353008",
"mg372021424",
"mg375953248",
"mg379223953",
"mg373473759",
"mg378542544",
"mg370473710",
"mg37064348",
"mg378822469",
"mg374394987",
"mg371073478",
"mg379773651",
"mg371895266",
"mg373223554",
"mg377583454",
"mg37644957",
"mg370342692",
"mg376484039",
"mg376871434",
"mg370704788",
"mg377643863",
"mg377753931",
"mg379342689",
"mg374344777
如果相同了,则返回0,这应该是个黑名单过滤
正确的注册码,前4位应该是mg37,然后中间3位随意,最后4位需要和用户名计算结果相同即可
用户名部分的验证:
累加name的字符,然后计算一个结果,这个结果需要和code后4位相同
注册机脚本
def gen_code(name):
code = "mg37666"
i = 1
name_sum = 3039
for c in name:
name_sum += i * ord(c)
if name_sum > 6078:
name_sum -= 6078
i += 1
if i > 10:
i = 1
code += str(name_sum)
return code
if __name__ == '__main__':
name = input("name:")
print("code:"+gen_code(name))