jianfen's blog

Information is beautiful

0x00 前言

朋友推荐了一个录屏软件ocam挺好用的,就是退出时弹个广告框,需要注册才能抹去。
程序版本:ocam 453.0.0.0
下载地址:http://ohsoft.net/eng/

0x01 调试环境

系统:windows XP
软件:OllyDbg,DIE64

0x02 软件分析

选择Menu->register会弹出注册框
分析目的就是破解注册机制

将程序载入DIE64查程序信息:
语言:delphi
软件:无壳

delphi语言编写的程序可以使用darkde4工具寻找控件窗体从而定位注册逻辑代码段(这里失败了stream read error有了解为啥的朋友可以留言):

接下来直接载入OD,这里使用暂停法寻找弹窗函数,再一步步向回溯源:

载入OD->F9运行->点击注册输入信息->点击确定后

按F12然后按K查看堆栈调用情况->选择程序领空的一处调用->显示调用(此时我们就会来到程序领空一处接近调用窗体的代码)

这里我添加了注释,这个call会调用错误弹框,通过寻找当前代码段无收货时,就要考虑前往上层call(因为call是层层嵌套的上层call中也包含这段报错弹窗代码)

寻找关键代码,一直往下走遇到跳转跳不过则修改

大概return 6处call,发现关键代码(处理注册码逻辑代码):

发现有一处跳转会让我们返回错误弹框,我们进行跟随:

一开始以为是关键跳,通过调试发现是判断注册码长度是否等于0x13(19),如果不等于直接返回错误:
007AFF35   > \837D E8 13    cmp dword ptr ss:[ebp-0x18],0x13
在此处jnz跳转下F2断点,将Z标志位改为1,继续F8调试:

发现网络验证此处才是验证注册码的关键位置:

此处就是关键跳,修改jnz为nop或者je即可:

程序最终会将邮箱和自定义的注册码写入config.ini文件

0x03 逆向总结

注册的关键是将以下2处跳转NOP或者修改相反操作:

007AFF39   . /0F85 22020000 jnz oCam.007B0161                        ;  关键跳_判断注册码长度是否=19
007AFFAD   . /0F85 91010000 jnz oCam.007B0144                        ;  关键跳_绕过网络验证注册码
注册成功:


分析得知,写入的加密账号和注册码放在以下目录:
C:\Documents and Settings\Administrator\Application Data\oCam\config.ini

逆加密算法下回再学习学习。


添加新评论 »

在这里输入你的评论...

勿忘初心,方得始终.