按照之前的思路,继续对机器码验证进行破解,两种思路,一是修改跳转,二是找到根据机器码计算出的真码。
先来第一种:修改跳转
一步一步来,首先自己先运行下程序-->随便输入密码,看有没有弹框提示,以便作为中文搜索的线索:
image.png (19.78 KB, 下载次数: 1)
下载附件
1
2021-1-31 14:58 上传
确认好了有弹框,打开OD-->把程序拖入O-->中文智能搜索出中文-->找到中文提示-->双击中文引擎模块的中文提示跳转到汇编代码处:
image.png (61.8 KB, 下载次数: 0)
下载附件
2
2021-1-31 15:00 上传
往上面一点,发现了登录成功提示,继续往前找,找到了最近的一个je跳转,鼠标左键单击一下这个je,可以发现他会跳过成功登录字样(白色框),也就是说,这个je会根据之前的比较结果决定是否跳转:
image.png (36.09 KB, 下载次数: 1)
下载附件
3
2021-1-31 15:04 上传
根据前面所学,可以直接把这个je代码修改为NOP,这样不管输入正确与否,都会执行登录成功那段代码:
image.png (31.48 KB, 下载次数: 0)
下载附件
4
2021-1-31 15:07 上传
原本的逻辑已经变为顺序执行,接着只需要保存为可执行文件即可,这样不管输入什么,都会走登录成功的逻辑:
image.png (19.73 KB, 下载次数: 1)
下载附件
5
2021-1-31 15:09 上传
下面是第二种,找到验证call,拿到程序根据机器码算出来的真码:
一样的步骤,将程序拖入OD-->找中文提示信息-->找到最近的一个call-->打上断点,以便确认是否为我们想要的验证call:
image.png (64.35 KB, 下载次数: 0)
下载附件
6
2021-1-31 15:16 上传
然后F9,直接运行,输入密码,发现直接弹框了,没断上:
image.png (58.97 KB, 下载次数: 0)
下载附件
7
2021-1-31 15:17 上传
说明这不是我们想要的call,得继续往前找(后来,我发现我上面断的那个call,在je之后,这明显不对嘛,要找应该直接找je之前最近的一个call),所以我找到了je之前最近的一个call,下断点:
image.png (68.27 KB, 下载次数: 0)
下载附件
8
2021-1-31 15:20 上传
再来一次F9,运行,输入密码,确实在call处断上了,然后F7进入call里边:
image.png (63.6 KB, 下载次数: 0)
下载附件
2021-1-31 15:22 上传
就看到ebx里边的值了,估计这就是key,然后F8继续单步执行下去,就发现这个值多次出现,但我始终没找到真正比较的地方:
image.png (54.33 KB, 下载次数: 0)
下载附件
2021-1-31 15:35 上传
最后输入看到的这个值,确认为key:
image.png (22.39 KB, 下载次数: 0)
下载附件
2021-1-31 15:37 上传