Amamiya 发表于 2018-6-16 09:40

申请ID:Amamiya

    关注吾爱破解论坛一年多了,一直都在默默向各路大神学习,也就想着自己也来申请个账号方便交流,
    偶然看见了申请账号除了付费之外可以靠帖子申请,我窥屏这么久还是学到了微不足道的一点破解方法,于是就试试水……=W=

    在硬盘中找了找,刚好有两个月前下载的【骑马与砍杀:战团】的游戏,在论坛搜了下发现没有这个游戏的破解教程,于是就拿这个吧,当时我下了游戏之后打开发现居然是没破解过的,在网上找了很多个说是
破解了的exe文件结果都无效(可能我找东西的能力不太成……),最后就自己动手丰衣足食了……
   
   

    废话不多说,直接上OD
   
    一般来说国外的exe基本上不太会加壳什么的,毕竟技术手段的保障确实没有法律手段的保障来的好用,果然这个骑马与砍杀的exe是没加壳的。

    然后接下来的话平时我可能会先试试搜索字符串什么的,不过搜索字符串论坛里面有很多,
    而且这种游戏的exe的字符串不太可能写死中文,一般是有语言包或者其他的本地化策略的,所以就直接跳过了这一步。

    那么怎么办呢? 先试试中断法吧(是叫这个名字来着?)
   
   

    我们看到现在弹出了这个验证的界面,上面是网络验证,下面是离线本地激活?
    那么我现在要弄哪种验证呢?算了,先试试能不能跳过这个验证的窗口吧。
    我们点击OD左上角的暂停按钮。
    然后点击菜单栏的【查看】——【调用堆栈】
   
   
    关键字【Dialog】,嘛,应该就是这个了。
    选中user32.DialogBoxParamA,然后直接回车跟进去,打断点。
   
    你可能会问“诶,这不是user32.dll里面的函数么,又不是exe自己的函数”
    我当然也知道这是系统dll的函数来着,我们只是看谁调用了它,因为按照逻辑,肯定是程序发现这个exe没有注册过所以才会弹框,所以跟出去的话应该会发现一些蛛丝马迹。

    打断点,然后关掉CDKey界面(用不着关程序,而且很多地方都调用这个弹框的函数的话,重启程序就很麻烦了)然后再次点进入游戏,好断点命中了!

    当前是user32的范围就不用看了,直接执行到返回一直到主程序为止。

   

    这里就是返回的地方了,我们在附近很轻易的就看到了一个很有意思的地方,
   

005CD07B   .50            push eax
005CD07C   .68 F4A88100   push mb_warba.0081A8F4                   ;00000182
005CD081   .E8 9C9E0400   call mb_warba.00616F22
005CD086   .84DB          test bl,bl
005CD088   .74 1F         je short mb_warba.005CD0A9
005CD08A   >68 E09EDD02   push mb_warba.02DD9EE0
005CD08F   .68 54118200   push mb_warba.00821154                   ;last_module_warband
005CD094   .B9 E4449100   mov ecx,mb_warba.009144E4
005CD099   .E8 0295EBFF   call mb_warba.004865A0
005CD09E   .68 05040000   push 0x405
005CD0A3   .56            push esi
005CD0A4   .E9 52040000   jmp mb_warba.005CD4FB
005CD0A9   >8B8D 70030000 mov ecx,dword ptr ss:
005CD0AF   .6A 00         push 0x0                                 ; /lParam = NULL
005CD0B1   .68 30435900   push mb_warba.00594330                   ; |DlgProc = mb_warba.00594330
005CD0B6   .51            push ecx                                 ; |hOwner = E7EE44D7
005CD0B7   .68 AB000000   push 0xAB                              ; |pTemplate = 0xAB
005CD0BC   .6A 00         push 0x0                                 ; |hInst = NULL
005CD0BE   .C685 65030000>mov byte ptr ss:,0x1          ; |
005CD0C5   .FF15 64437C00 call dword ptr ds:[<&USER32.DialogBoxPar>; \DialogBoxParamA



简单的说就是首先压入eax和0081A8F4传入方法00616F22,然后得到方法的结果之后进行对比,如果ZF=1则跳转到刚才的弹框,如果ZF=0则通过jmp跳转到一个别的地方。
这个JMP是一个大跳(总而言之跳得很远就是了),一般来说这应该就是判断是否过验证的地方了。

我们在test bl,bl打断点,然后关掉验证的界面重新点进入游戏,果然命中断点了。
按F8单步,此时Z标记为1



好,直接双击Z将它的值改为0,然后直接跑一跑试试看。

真的进游戏了……(说实话骑马与砍杀的开发者果然不愧是土耳其人,直性子……)



(这里我本来是想调成窗口模式截图的不过好像没有,就直接这样截图了)

接下来就简单了,重新运行程序到断点,直接将 je short mb_warba.005CD0A9 改成nop,保存文件,成了

说实话我弄之前真的没想到这么简单…… 希望能过……

Hmily 发表于 2018-6-19 21:23

申请格式不对,申请内容也未达到申请要求,申请不通过。
页: [1]
查看完整版本: 申请ID:Amamiya