如果图片看不见可以先移步看雪论坛的帖子 https://bbs.pediy.com/thread-265907.htm

0x00 前言

在官网下载UltraISO 软碟通的安装包,一顿操作安装好之后,打开程序之后弹出尚未注册的窗口,输入注册码提示需要重启软件,猜测在打开软件之后会通过某些操作比较输入的注册码。

image-20210205112643381

0x01 寻找注册码验证方式

既然猜测是在程序启动的时候有一些操作验证注册码,不妨使用火绒剑对主程序(UltraISO.exe)进行监控看看它在启动的时候做了什么事情。

通过简单的观察发现了一处可疑注册表读取操作,大胆猜测我们之前输入的注册码就是通过注册表来保存,并且在程序重启的时候进行验证。 image-20210205113707569

用x32dbg和IDA打开UltraISO.exe进行分析,并在x32dbg中对RegOpenKeyA下断点,通过栈回溯结合IDA的反编译结果定位到了读取注册表中注册码的函数。 image-20210205114824635 image-20210205114951562

CTRL+F9跑出这个函数看看后面哪里用到了我们的注册码,在0x0040190C函数里用到了我们输入的Name和Key,这里应该就是验证算法函数了,结合红绡枫叶前辈的帖子UltraISO注册算法&keygen分析虽然地址不同不过汇编代码都是大致相同的,本文的核心还是在破解部分对于验证算法的分析我就不班门弄斧了,可以去看红绡枫叶前辈的分析帖子。

接着F8往下走,遇到一个比较跳转的部分,先让跳转生效看一下效果。 image-20210205115820215

打开依旧还是未注册版本,我们返回去给0x7C8F84下断点看看后面还有哪些地方用到了,接着跳过未注册窗口运行起来,又断在了一个比较跳转地方,在IDA里面的这一条语句也包含了下一个的跳转。 image-20210205120822604 image-20210205120844600

因为我们现在肯定是错误的注册码,所以先以相反的方向执行跳转然后在运行起来看是否注册成功,运气很好这三个跳转修改掉之后就注册成功了。

image-20210205121110411

最后还有一个小坑,上面修改完文件保存会闪退,x32dbg下CreateFileA断点然后栈回溯在结合IDA发现在文件另存为和保存的时候会再次判断注册码。 image-20210205200226375 image-20210205200250741

0x02 总结

总共就是要Patch 4个地方,生成的新应用程序覆盖掉之前的UltraISO.exe就可以了

0x004030A8  74 -> EB
0x00423C61  75 15 -> 90 90 
0x00423C76  74 -> EB
0x0044BBD0   74 -> EB

本程序的验证算法部分还是有难度的,不过结合火绒剑等分析工具破解对于新手试手还是比较友好的,不知道为什么没有遇到网上以前的分析文章遇到的ASPack壳