[原创][注册机]-[editplus-5.0]-[逆向流程+算法分析]
目标程序:editplus 5.0
分析工具:
1.ollyDbg
2.IDAPro
知识储备:
1.应用程序的编写流程.
2.ASM汇编语言的无障碍阅读.
3.开发语言,如:C++、C、python等.
目的:用C语言写editplus-5.0的注册机。
思路:
1.注册机是什么,有哪些功能,如何编写注册机?
答:
功能:输入用户名后经过计算输出注册码.
函数:需要一个关键的计算函数.
2.如何实现注册机的计算函数?
答:
计算函数可视为editplus的验证注册码函数的反向实现.
那么实现该计算函数的步骤如下:
1.定位关键验证函数.
2.分析关键验证函数.
3.复现关键验证函数.
4.反向复现计算函数.
步骤:
整理思路可得如下图:

步骤如下:
1.对api下断,经过堆栈回溯定位关键函数.
2.分析关键函数的内部功能实现和逻辑.
3.根据分析内容编写验证函数和计算函数.
1.定位函数
1.1 定位
一般注册验证的流程如下,从程序的报错信息可以猜测为程序调用了MessageBox类函数,对该函数下断后堆栈回溯到CheckInfo()函数位置处.

if(CheckInfo())
MessageBox("succeed");
else
MessageBox("failed");
1.2 验证
上述的if...else分支流程在汇编层会像如下的伪代码所述,那么如果将jnz指令修改为jz或je而导致注册成功,那么CheckInfo函数就是我们所需分析的验证函数.

call CheckInfo cmp eax,edx //edx ==0 jnz loc_succeed

对于editplus的分析得知对于注册码存在二次校验,校验失败如下图所示:

PS:分析时可以在IDA中导入sig文件、导出map文件有助于动态调式下的分析.
2.分析函数
一般程序在编写的时候至少会遵循功能和逻辑相分离的规范,或者说是函数封装的利用.对于函数应当按照功能和逻辑来拆分,拆分完毕后在对代码逐一分析.总而言之就是先分析整体汇编逻辑后写好C语言函数的逻辑,然后把汇编代码块还原到C语言函数的具体实现中.
个人感觉汇编代码的阅读分三种情况:
1.甲骨文翻译.
2.英语阅读理解.
3.看金庸小说.
CheckInfo函数拆解如下:

2.1 函数逻辑:
控制用户名和注册码的输入,在动态分析时有助于代码的分析(Name:Weaving Code:00000-00000-00000-00000-00000),保证用户名不变的情况下根据分析结果去修改Code.可以手动得出一条注册码:(注册码格式分析代码可得)
//注册机既是将0释放为任意数字 Name:Weaving Code:0EYYU-00000-00000-00000-00000
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
