e3.exe的逆向分析

e3.exe的逆向分析

运行截图

e3.exe的逆向分析

逆向思路

提示如下:

e3.exe的逆向分析

  1. 使用IDR加载Delphi程序,导出Map文件,将Map文件导入OD。

  2. 使用Delphi逆向工具Darkde4

    e3.exe的逆向分析

    可以看到,Panel1有两个方法,单击和双击,是一个按钮

    e3.exe的逆向分析

    FromCreate 窗体的创建事件

    chkcode 校验代码

    KeyUp 响应的键盘的弹起

    DbClick 按钮的双击事件

    Click 按钮的单击事件

  3. 通过1得到了几个事件的RVA,接下来进行分析,首先是Click事件:

拖入OD

右键复制Click的RVA

打开OD,ctrl + G 粘贴点击OK

e3.exe的逆向分析

F2设置断点

e3.exe的逆向分析

运行测试

输入一组用户名和***,双击之后单步调试

e3.exe的逆向分析

出现用户名:

e3.exe的逆向分析

e3.exe的逆向分析

此处getText为获取用户名。

e3.exe的逆向分析

获取用户名长度,用户名长度+0x1E(30)

e3.exe的逆向分析

出现“32”

e3.exe的逆向分析

字符串拼接:

e3.exe的逆向分析

循环0x13次:

e3.exe的逆向分析

关键跳转:

e3.exe的逆向分析

  1. 获取用户名

  2. 获取用户名长度 将长度加上0x1E

  3. 将长度转为字符串

  4. 字符串拼接 拼接为长度+用户名+循环次数

  5. 整个算法循环18次 最后的结果如上图

  6. [esi+0x30C]的值必须是0x85

  7. 分析双击事件

    e3.exe的逆向分析

    获取长度

    长度+0x9

    长度转str

    循环:

    e3.exe的逆向分析

    字符串拼接:长度+用户名+循环次数

    e3.exe的逆向分析

    [esi+0x30C]和0x3E作比较,如果成立,就把[esi+0x30C]赋值为0x85,也就满足了单击事件的条件

    [esi+0x30C]的值必须为0x3E

  8. 有一个地方是把0x3E赋值给了[esi+0x30C]。

    OD中,右键->查找所有常量,输入3E,看看能不能找到mov [esi+0x30C],0x3E这样一条指令。如果能,那么这个就是真正校验的地方。

    e3.exe的逆向分析

    跟进:

    e3.exe的逆向分析

    开头:

    e3.exe的逆向分析

    注释显示这个是chkcode的校验事件下断点

  9. 运行

    ***刚输入1就停住了,分析

    e3.exe的逆向分析

    发现可疑字符串:

    e3.exe的逆向分析

    e3.exe的逆向分析

    直接拦截读取edx,使用keymake制作内存***:

    e3.exe的逆向分析

    e3.exe的逆向分析

    e3.exe的逆向分析

    成功,接着分析算法·,尝试制作算法***

    e3.exe的逆向分析

    分析0x951C68 位置处何时写入,设置硬件断点

    e3.exe的逆向分析

    keyup中统计输入字符:

    e3.exe的逆向分析

    首先获取用户名长度 然后将用户名长度+5,接着进行字符串拼接 拼接方式为黑头Sun Bird(用户名长度+5)dseloffc-012-OK(用户名),拼接好的字符串就是密码。

  10. 结果:

    e3.exe的逆向分析

    e3.exe的逆向分析

接方式为黑头Sun Bird(用户名长度+5)dseloffc-012-OK(用户名),拼接好的字符串就是密码。

  1. 结果:

e3.exe的逆向分析

e3.exe的逆向分析