64位软件破解实操 - demo.exe(三四小工具)

64位的逆向教程比较少, 这里跟着大佬做做练习, 小工具在大佬原文可下载,这里就不再上传了(空间少的可怜) 点击查看大佬原文
大佬说在这些断点处不会停下(socket、send、recv), 我这边试了都会停(win10环境) (WSAsocket、WSAsend、WSArecv) 这几处也能停下, 所以就都加上了
在CPU界面最下面的命令行输入"bp socket"就可以添加这个函数的断点,其它同理, WSAsocket这个需要加个W, 即"bp WSAsocketW",其实只需要添加这个就行了,其它的停下后没看到什么关键信息, 就这个在信息栏能看到网址(需要翻一翻才能看到),如下图:

大佬把网址打码了,我这里也打上吧, 大伙可自己调试过程中拿到这个完整的地址,然后就可以复制到网页中拿到里面真正的机器验证码

接下来,我们继续跟着大佬的步伐(修改机器码)来暴破这个工具,
命令行加入"bp GetVolumeInformationW"这个断点(先前的断点可以先删除掉了),
F9运行,点击第二个验证(永久电脑绑定验证), 成功在GetVolumeInformationW这个方法停下来00007FFB556D51B0 jmp qword ptr ds:[]
Ctrl+F9运行到函数返回,再F8回到用户程序区域000000014005F95D,

运行到000000014005F95D可以看到RAX寄存器的值就是机器码, 说明上一行call demo.140001090就是生成机器码的函数, RAX的地址是840038,对应的值就是机器码,
所以我们要把这个地址的值给改了应该就可以了, 对应修改如下几行: (不懂如何字符串赋值,只能一位位改了)

000000014005F98C | C640 04 39               | mov byte ptr ds:[rax+4],39                 | 39:'9' 原跳转语句, 前两位0x就不用动了
000000014005F990 | C640 06 36               | mov byte ptr ds:[rax+6],36                 | 36:'6'
000000014005F994 | C640 08 37               | mov byte ptr ds:[rax+8],37                 | 37:'7'
000000014005F998 | C640 0A 42               | mov byte ptr ds:[rax+A],42                 | 42:'B'
000000014005F99C | C640 0C 45               | mov byte ptr ds:[rax+C],45                 | 45:'E'
000000014005F9A0 | C640 0E 46               | mov byte ptr ds:[rax+E],46                 | 46:'F'
000000014005F9A4 | C640 10 44               | mov byte ptr ds:[rax+10],44                | 44:'D'
000000014005F9A8 | C640 12 32               | mov byte ptr ds:[rax+12],32                | 32:'2'
000000014005F9AC | E9 C2040000              | jmp demo.14005FE73                         | 跳转语句放到这里了

菜单->文件->补丁->全选->修补文件->另存
运行另存的文件, 测试成功验证通过~

有能力的可以继续研究验证算法, 我目前只能到这里了, 跟着大佬们的步伐继续努力学习中...

后记:
一路F8跟踪下去发现 0000000140032057 ~ 0000000140038596 是循环验证本地机器码是否与服务端已记录机器码列表对比
然后按G切换到流程图模式界面, 一个个分支尝试强制跳转或不跳转(反着来),最后在下面这行修改后正确转到成功界面去了
000000014003225E | 0F85 C2000000 | jne demo.140032326 |
将jne改为je 保存后测试发现无法正常运行, x64dbg重新操作一次, 发现, 运行后再改这行才正常,说明程序启动时也会校验一次
所以再次重来, 尝试过程中来到了这个界面(还没弄清楚怎么出来的,忘了改了哪些了),

里面的循环非常大,所以很难跟踪,再者, 发现是所有列表都要比对完后才会退出循环, 就算你的验证码在第一个位置, 所以这个加大很多的难度, 很难知道哪个值是用来记录正确的值
程序循环流程图如下:

posted @ 2025-01-02 16:24  hankerstudio  阅读(200)  评论(0)    收藏  举报