实战去除程序自校验(学习笔记)

查看 60|回复 8
作者:icer233   
实战去除程序自校验
视频讲解
讲师:小生我怕怕

演示程序
豪迪群发助手

解决网络验证
[ol]
  • 将主程序qqqf.exe拖入OD并搜索字符串, 找到00541879"已注册版本"
    [/ol]
  • 在00541870和00541877下断点, 运行程序, 点击注册, 发现断下来了。右键查找常量, 输入cmp比较的变量00579F24。将搜索出来的操作全部下断点。
    [/ol]

  • 重载程序并运行, 停在00541650处
    0054164C   . /EB 02         jmp short qqqf.00541650
    0054164E   > |B2 01         mov dl,0x1
    00541650   > \8815 249F5700 mov byte ptr ds:[0x579F24],dl
    00541656   .  83F8 0C       cmp eax,0xC
    00541659   .  75 48         jnz short qqqf.005416A3
    可以看到00541650是赋值变量为dl的值, 而在0054164E处dl被赋值为1, 即这行代码就是给变量赋值为1
    可以猜测赋值为1是已注册, 0就是为注册, 如果后面又给这个变量赋值为0, 那我们的破解就白费了

  • 这里给段首0054159C下断点, 重载并运行, 停下后F8单步跟
      00541640   .  83F8 18       cmp eax,0x18
      00541643   .  74 09         je short qqqf.0054164E
      00541645   .  83F8 0C       cmp eax,0xC
      00541648   .  74 04         je short qqqf.0054164E
    上面两个比较比较12(0xC)和24(0x18), 应该是在比较注册码长度, 如果长度不在范围内就会跳掉

  • 0054164A   .  33D2          xor edx,edx
    0054164C   .  EB 02         jmp short qqqf.00541650
    0054164E   >  B2 01         mov dl,0x1
    00541650   >  8815 249F5700 mov byte ptr ds:[0x579F24],dl
    我们在00541648这里改一个jmp,让dl赋值为1。

  • 继续F8步过, 发现
    00541656   .  83F8 0C       cmp eax,0xC
    00541659   .  75 48         jnz short qqqf.005416A3
    要把00541659处nop掉, 防止jnz跳过后面的赋值

  • 继续单步, 看到
    00541687   .  E8 8430ECFF   call qqqf.00404710
    0054168C   .  75 0A         jnz short qqqf.00541698
    0054168E   .  8B07          mov eax,dword ptr ds:[edi]
    00541690   .  E8 177EFCFF   call qqqf.005094AC
    00541695   .  40            inc eax
    00541696   .  7F 04         jg short qqqf.0054169C
    00541698   >  33C0          xor eax,eax
    0054168C这个jnz也必须nop,不能让它跳过00541696这个赋值的位置。

  • 然后我们继续来到00541696这一行,我们将它改为jmp,需要让它赋值为1

  • 保存修改, 随便输入12位注册码, 竟然失败了

  • 再次载入OD,发现破解过程应该没问题,已经赋值为1了,再次搜索字符串,发现了“正在验证”四个字,我们在这里回车进去, 找到段首005408C8直接retn使它脱离网络验证

  • 测试一下, 随意输入, 注册成功, 可以添加表情等, 但是随机字符等功能没法使用, 出现了暗桩

    [/ol]
    查找自校验
    [ol]

  • 用Winhex随意修改原主程序, 发现功能失效, 这是因为文件的md5发生了变化(可以采用补丁破解)

  • 使用脚本脱壳脚本\各语言按钮事件\Delphi & VB事件断点查找脚本.osc(下载地址)

  • 打开OD, 运行该脚本

  • 这样就查找到了所有按钮事件并打上了断点

  • 运行程序, 点击"插入其他", 触发断点, 先禁用这个断点, 再点击"插入其他"里的"随机数字"触发第二个断点, 记住位置, 将其他断点删除, 开始单步过

  • 计算一下我们修改后的程序md5

  • 找到这个call, F7进入
    00567F5F  |.  E8 5CAEF4FF   call qqqf3.004B2DC0

  • 找到了这里
    004B2E3D    8B45 F0         mov eax,dword ptr ss:[ebp-0x10]
    004B2E40    8D55 F8         lea edx,dword ptr ss:[ebp-0x8]
    004B2E43    E8 ECF0FFFF     call qqqf3.004B1F34
    在数据窗口中跟随后, 发现就是我们文件的md5

  • 计算原版md5为11ea70a3c3735c29b48552776756406a, 直接在数据窗口里替换

  • 功能恢复正常!
    [/ol]
    去除自校验
    [ol]

  • 找一段空的地址, 如0056B0A0

  • 将004B1F74改成jmp 0056B0A0

  • 第一行输入pushad(堆栈平衡)

  • 然后我们看一下,原来004B1F74那里是用ebp-0x14赋值ebx,所以这里我们要对ebp-0x14赋值
    输入mov dword ptr ss:[ebp-0x14],0x0, 在数据窗口中改为正版md5

  • 再将0x0改为堆栈窗口中的0xA370EA11

  • 第一个操作数每次减4,16个字节需要写入四次(我们要想写入原来的md5数据就要用这个值,数据窗口中我们看到每4个字节就要进行一次写入)
    0056B0A1  C745 EC 11EA70A3 mov dword ptr ss:[``ebp``-0x14],0xA370EA11
    0056B0A8  C745 F0 C3735C29 mov dword ptr ss:[``ebp``-0x10],0x295C73C3
    0056B0AF  C745 F4 B4855277 mov dword ptr ss:[``ebp``-0xC],0x775285B4
    0056B0B6  C745 F8 6756406A mov dword ptr ss:[``ebp``-0x8],0x6A405667

  • 逐句将原来的代码写入
    004B1F74    8D5D EC         lea ebx,dword ptr ss:[ebp-0x14]
    004B1F77    8D55 E8         lea edx,dword ptr ss:[ebp-0x18]
    004B1F7A    33C0            xor eax,eax
    004B1F7C    8A03            mov al,byte ptr ds:[ebx]
    004B1F7E    E8 35F1FFFF     call qqqf3.004B10B8
    004B1F83    8B55 E8         mov edx,dword ptr ss:[ebp-0x18]
    004B1F86    8BC7            mov eax,edi
    004B1F88    E8 3F26F5FF     call qqqf3.004045CC
    004B1F8D    43              inc ebx
    004B1F8E    4E              dec esi
    004B1F8F  ^ 75 E6           jnz short qqqf3.004B1F77
    其中jnz short qqqf3.004B1F77要改成我们的新位置0056B0C0
    下一行输入popad堆栈平衡, 然后jmp 004B1F91跳回去!

  • 至此, 破解成功!
    [/ol]
    总结
    原程序逻辑
  • 按钮事件
  • 检验是否注册
  • 检验md5

    破解逻辑
  • 找到注册部分并爆破
  • 去除网络验证
  • 发现md5验证
  • 查找按钮事件
  • 找到md5验证部分代码
  • 修改代码跳到空白区, 给程序一个假md5(正版md5)
  • 同时复制原来的校验代码(注意堆栈平衡)
  • 跳回去继续原流程


    [color=]如果您有多余的热心值,请不要吝惜,谢谢

    断点, 程序

  • dongbin1637   

    大佬能实操下这个软件吗
    批量PDF自定义提取指定区域内容重命名
    百度网盘:https://pan.baidu.com/s/1FjWiKqt93ECiVqNKmeOJOA?pwd=8866
    腾讯网盘:https://share.weiyun.com/yw15BsM7
    icer233
    OP
      


    dongbin1637 发表于 2024-12-16 07:47
    大佬能实操下这个软件吗
    批量PDF自定义提取指定区域内容重命名
    百度网盘:https://pan.baidu.co ...

    这不是免费软件吗。验证码也不用花钱啊。虽然写了试用版但是有效期100年,而且我也没找到哪里可以注册
    laoser   

    很实用教程
    submariner   

    看完这个教程,受到不小启发~!
    zsy816   

    学习一下
    pomxion   

    高端。。。小白菜看都看不懂。。。哈哈
    pomxion   

    学习一下
    Jone2008   

    学习一下
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部