LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

软件逆向破解零基础入门实战05

admin
2025年12月10日 1:32 本文热度 17
继续新手零基础入门逆向破解实例分析,本次分析的软件也是一个简单的crackme,难度为一颗星。


输入正确的用户名和密码后,下方会显示一张美女的图片。这次没有注册按钮。先不管它。我们直接开OllyDBG.EXE把程序拖到OD里。
     同样和前面一样,查看内存快捷 ALT+M,选择程序的CODE段右键,

反汇编窗口中查看,在反汇编窗口后,继续右键选搜索字符串
在找到的字符串看有没有用的信息
后面看到有个 恭喜恭喜 注册成功。 双击查看反汇编代码
00457FB8  /.  55            push ebp00457FB9  |.  8BEC          mov ebp,esp00457FBB  |.  B9 04000000   mov ecx,0x400457FC0  |>  600         /push 0x000457FC2  |.  600         |push 0x000457FC4  |.  49            |dec ecx00457FC5  |.^ 75 F9         \jnz short CKme.00457FC000457FC7  |.  51            push ecx00457FC8  |.  53            push ebx00457FC9  |.  56            push esi00457FCA  |.  8BF0          mov esi,eax00457FCC  |.  33C0          xor eax,eax00457FCE  |.  55            push ebp00457FCF  |.  68 FD804500   push CKme.004580FD00457FD4  |.  64:FF30       push dword ptr fs:[eax]00457FD7  |.  64:8920       mov dword ptr fs:[eax],esp
找到段首进行下断,回到程序上,随便输入个用户名和注册码。因为没有注册按钮,就随便点一点看有没反应。

结果在点击说显示图上的框上,它断到了我个下的断点位置。
非常好,我们直接F8往下走,跑一遍大概了解下,看看有没跳转是直接到恭喜恭喜这个位置的。结果还真有个跳转到注册位置
0045803B  |. /75 76         jnz short CKme.004580B30045803D  |. |33DB          xor ebx,ebx0045803F  |> |8D55 E4       /lea edx,[local.7]00458042  |. |8B86 D4020000 |mov eax,dword ptr ds:[esi+0x2D4]00458048  |. |E8 FBB2FCFF   |call CKme.004233480045804D  |. |8B45 E4       |mov eax,[local.7]00458050  |. |E8 27BBFAFF   |call CKme.00403B7C00458055  |. |83C0 03       |add eax,0x300458058  |. |8D55 E8       |lea edx,[local.6]0045805B  |. |E8 A4FAFAFF   |call CKme.00407B0400458060  |. |FF75 E8       |push [local.6]00458063  |. |8D55 E0       |lea edx,[local.8]00458066  |. |8B86 D4020000 |mov eax,dword ptr ds:[esi+0x2D4]0045806C  |. |E8 D7B2FCFF   |call CKme.0042334800458071  |. |FF75 E0       |push [local.8]00458074  |. |8D55 DC       |lea edx,[local.9]00458077  |. |8BC3          |mov eax,ebx00458079  |. |E8 86FAFAFF   |call CKme.00407B040045807E  |. |FF75 DC       |push [local.9]00458081  |. |8D45 FC       |lea eax,[local.1]00458084  |. |BA 03000000   |mov edx,0x300458089  |. |E8 AEBBFAFF   |call CKme.00403C3C0045808E  |. |43            |inc ebx0045808F  |. |83FB 13       |cmp ebx,0x1300458092  |.^|75 AB         \jnz short CKme.0045803F00458094  |. |33D2          xor edx,edx00458096  |. |8B86 F0020000 mov eax,dword ptr ds:[esi+0x2F0]0045809C  |. |E8 BFB1FCFF   call CKme.00423260004580A1  |. |A1 20B84500   mov eax,dword ptr ds:[0x45B820]004580A6  |. |83C0 70       add eax,0x70004580A9  |. |BA 14814500   mov edx,CKme.00458114                    ;  恭喜恭喜!注册成功004580AE  |. |E8 9DB8FAFF   call CKme.00403950004580B3  |> \33C0          xor eax,eax                              ;  CKme.0045802B
看到这个跳转直接跳过就没了,那么不让它跳我们看看会不会是直接注册成功。在寄存器窗口,找到Z标志,双击它让它变成1
此时JNZ就变成灰色,不跳转了。继续F8,这里还有个0x13次的循环
0045808E  |.  43            |inc ebx0045808F  |.  83FB 13       |cmp ebx,0x13
我们在循环外面一条代码下断点F2,在F9跳过它。在次F9运行起来。发现软件真注册成功,大美女也显示出来了
成功了。找到刚才的位置
0045803B  |. /75 76         jnz short CKme.004580B3
直接右键--二进制--NOP填充
在把修改的数据保存成新的EXE程序,软件就直接破解了。也不用输入用户名注册码,直接显示。
=============但并未结束======================
直接修改是非常简单,但我们重要的是分析它的注册码生成算法。继续吧!
    用OD重新加载软件,运行起来输入假的用户名和注册码,点击图片框断下来后。继续分析,我们发现它有两个循环,但循环出来的数值没什么鸟用。和注册码没一点关系。但决定那个跳转的关键条件代码
00458031  |.  81BE 0C030000>cmp dword ptr ds:[esi+0x30C],0x85
这里和0X85比较,那么这【ESI+0X30C]的值 从哪里来就成了关键。要找到这个赋值的位置。
    这里我就采用最笨的方法,直接地毯式搜索。由于软件功能不多,那就在反汇编窗口中向上翻,找到每个函数的开头下断。当然要自行看,如果功能代码很少的估计就不是,选 那种代码长的函数头下断。
下完后,随便输入个用户名和注册码试试。
    输入入用户名后,在注册码位置输入一个字符,OD就断下来了。F8往下走,发现有个字符:

ds:[00471C90]=00475828, (ASCII "黑头Sun Bird11dseloffc-012-OKit0365")

这个会不会是真正的注册码?继续往下走,发现这也有前面我们点图片断下的循环一样的。没去细看,感觉没什么用。倒是这里值 得注意:

00457D2C  |.  8B45 E0       mov eax,[local.8]00457D2F  |.  8B93 18030000 mov edx,dword ptr ds:[ebx+0x318]00457D35  |.  E8 52BFFAFF   call CKme.00403C8C00457D3A  |.  75 0A         jnz short CKme.00457D46

寄存器中出现了字符对比,一个是我们输入的注册码一个是软件生成的。

明显是不相等,刚好条件就是不相等就跳。
00457D3C  |.  C783 0C030000>mov dword ptr ds:[ebx+0x30C],0x3E00457D46  |>  8B83 0C030000 mov eax,dword ptr ds:[ebx+0x30C]
这2段代码需要注意,前面我们讲了要分析 
[esi+0x30C]
的值从哪来?刚好就是这句了。如果它不跳转就是给它值0X3E了否则为0.
这里我们把标志Z改为1,不让它跳,让它赋值。赋值后F9运行,没有出现图片。
     那么在次单击图片框,又断下来来到我们跳转那关键位置
看到这个地址的值给到了3E,但还是不对。所以图片无法显示。重新运行软件,输入我们在内存中找到那个字符,结果发现赋值3E的条件满足了。但并未显示数据。因为它还不是0X85,继续往上看。
向上看到这里
00457EF5  |.  83BE 0C030000>cmp dword ptr ds:[esi+0x30C],0x3E00457EFC  |.  75 0A         jnz short CKme.00457F0800457EFE  |.  C786 0C030000>mov dword ptr ds:[esi+0x30C],0x8500457F08  |>  33DB          xor ebx,ebx00457F0A  |>  8D55 E4       /lea edx,[local.7]00457F0D  |.  8B86 D4020000 |mov eax,dword ptr ds:[esi+0x2D4]
这个神经软件,要在图片框多点几次就断到这个函数内。发现它有赋值0X85了。
此时就对了。F9运行,虽然给了值 还是没显示,在次单击图片框。断下来,来到
这样就相等了。F9运行后,正常显示了图片。

     不知道软件是代码问题还是作者故意为之。总结下软件大概流程:
1、单击图片框是显示图片的功能。
2、监控注册码框输入数据时断下,计算假注册码和真注册码比较,然后给个变量赋值。
3、双击图片框后根据注册码对比给出的值二次赋值
4、在次点击图片框,就完成了注册与显示。

关键算法:
固定字符:

(黑头Sun Bird)+11+(dseloffc-012-OK)+it0365

这个11上面函数经过分析是用户名的长度加5(

00457C66  |.  8BB3 F8020000 mov esi,dword ptr ds:[ebx+0x2F8]00457C6C  |.  83C6 05       add esi,0x5

IT0365就是输入的用户名

直接组成了注册码。 

我这方法比较笨,算法还是很简单的,就是绕了几圈。分析这个软件主要是学习破解逆向的思路。破解逆向重要的还是多动手练习,光看还是学不会的。


阅读原文:原文链接


该文章在 2025/12/10 18:26:57 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved