软件逆向破解零基础入门实战11
|
admin
2025年12月16日 13:21
本文热度 966
|
零基础入门软件破解逆向新手入门篇第11篇。继续学习分析逆向一款最简单的crackme软件。输入错误注册码直接报错。尝试找到关键位置破解软件直接注册或找到注册码计算的算法写出注册机。 打开反汇编调试器OllyDBG,将要破解分析的软件拖进OD内,直接F9运行起来。和前面几篇一样,运用F12大法快速找关键位置。 输入假的注册码后,点击Check按钮,弹出错误信息后。在OD调试器内按F12暂停软件,然后按alt+k观看是哪里调用了。观察到调用MessageBoxA函数提示框,有个是软件地址的调用。值得注意。下一条也是程序模块的调用。401512,直接双击看看刚好看到这个功能代码中有软件提示框的内容。大概这个功能就是要破解分析的关键内容。直接在段首下F2断点。F9运行软件,再次点击Check按钮直接断下来。继续分析。。。。。
lstrlenA 是 Windows API 中用于计算以 null 结尾的 ANSI 字符串长度的函数,返回值为字符串中字符的个数(不包括终止 null 字符)。
获取假注册码并取它的长度,结果在EAX内。
00401566 |. 8945 F0 mov [local.4],eax00401569 |. 837D F0 01 cmp [local.4],0x10040156D |. 7316 jnb short 11.004015850040156F |. 6A 40push0x4000401571 |. 68 2C304000 push11.0040302C ; ASCII "CrackMe"00401576 |. 6834304000push11.00403034 ; ASCII "Enter Registration Number"0040157B |. 8B4D E0 mov ecx,[local.8]0040157E |. E8 7B050000 call <jmp.&MFC42.#4224>
这里是判断注册三长度是否大于1。
00401585 |> \8D4D E4 lea ecx,[local.7]00401588 |. 51 push ecx ; /String2 = "<BrD-SoB>"00401589 |. 8D55 F4 lea edx,[local.3] ; |0040158C |. 52 push edx ; |String1 = "gzh:it036"0040158D |. FF15 00204000 call dword ptr ds:[<&KERNEL32.lstrcmpA>] ; \lstrcmpA00401593 |. 85C0 test eax,eax00401595 |. 7516 jnz short 11.004015AD00401597 |. 6A 40 push 0x4000401599 |. 6850304000 push 11.00403050 ; ASCII "CrackMe"0040159E |. 6858304000 push 11.00403058 ; ASCII "Correct way to go!!"004015A3 |. 8B4D E0 mov ecx,[local.8]004015A6 |. E8 53050000 call <jmp.&MFC42.#4224>
lstrcmp是Windows API中的字符串比较函数。
这代码就是在对比两个字符是否相等,不相等直接跳转 注册码错误框。这里是关键位置。
第一种破解方法:比较ECX和EDX内容,此时将ECX内容修改成EDX一样即可完成破解。
在数据窗口跟随后,选择要修改的内容右键
直接修改成输入的注册码内容即可。
第二种方法:更直接的把JNZ直接NOP掉强制它完成注册:修改后,可以将修改的保存成新软件后,就随便输入字符都能完成注册了。第三种方法:找出它的注册码生成算法,逆推出注册码算法,写成注册机。这个软件从上面的对比发现它是和一个固定字符在比较。那它的真正的注册码为:这样整个软件的分析和逆向就完成了。也是非常简单适合破解入门的新手学习和练手!
阅读原文:原文链接
该文章在 2025/12/16 15:11:41 编辑过