e3.exe的逆向分析
运行截图
逆向思路
提示如下:
-
使用IDR加载Delphi程序,导出Map文件,将Map文件导入OD。
-
使用Delphi逆向工具Darkde4
可以看到,Panel1有两个方法,单击和双击,是一个按钮
FromCreate 窗体的创建事件
chkcode 校验代码
KeyUp 响应的键盘的弹起
DbClick 按钮的双击事件
Click 按钮的单击事件
-
通过1得到了几个事件的RVA,接下来进行分析,首先是Click事件:
拖入OD
右键复制Click的RVA
打开OD,ctrl + G 粘贴点击OK
F2设置断点
运行测试
输入一组用户名和注册码,双击之后单步调试
出现用户名:
此处getText为获取用户名。
获取用户名长度,用户名长度+0x1E(30)
出现“32”
字符串拼接:
循环0x13次:
关键跳转:
-
获取用户名
-
获取用户名长度 将长度加上0x1E
-
将长度转为字符串
-
字符串拼接 拼接为长度+用户名+循环次数
-
整个算法循环18次 最后的结果如上图
-
[esi+0x30C]的值必须是0x85
-
分析双击事件
获取长度
长度+0x9
长度转str
循环:
字符串拼接:长度+用户名+循环次数
[esi+0x30C]和0x3E作比较,如果成立,就把[esi+0x30C]赋值为0x85,也就满足了单击事件的条件
[esi+0x30C]的值必须为0x3E
-
有一个地方是把0x3E赋值给了[esi+0x30C]。
OD中,右键->查找所有常量,输入3E,看看能不能找到mov [esi+0x30C],0x3E这样一条指令。如果能,那么这个就是真正校验的地方。
跟进:
开头:
注释显示这个是chkcode的校验事件下断点
-
运行
注册码刚输入1就停住了,分析
发现可疑字符串:
直接拦截读取edx,使用keymake制作内存注册机:
成功,接着分析算法·,尝试制作算法注册机
分析0x951C68 位置处何时写入,设置硬件断点
keyup中统计输入字符:
首先获取用户名长度 然后将用户名长度+5,接着进行字符串拼接 拼接方式为黑头Sun Bird(用户名长度+5)dseloffc-012-OK(用户名),拼接好的字符串就是密码。
-
结果:
接方式为黑头Sun Bird(用户名长度+5)dseloffc-012-OK(用户名),拼接好的字符串就是密码。
- 结果: