好友
阅读权限10
听众
最后登录1970-1-1
|
一米丶阳光
发表于 2019-10-22 18:08
本帖最后由 一米丶阳光 于 2019-10-23 11:28 编辑
0x1 环境与工具
0x2 查壳
- 将PE文件拖入PEID
查壳
0x3 定位注册算法
- 将PE文件拖入OD,F9运行
- 随意填入Name和Serial,点击OK按钮,不出意外肯定会弹出错误提示(如果弹出成功可以去买彩票了)
填入name和serial
错误框
- F12暂停运行,alt+F9回到用户领空,点击错误提示框的确定按钮,OD回到用户领空断下
- 从断点处往上翻,遇到第一个jmp指令,我们看到这个jmp指令跳过了错误提示框的代码,以此推断这条jmp指令没有执行,所以在jmp指令的下面肯定有从上面跳过来的地方,这条指令很近,紧挨着jmp指令,顺藤摸瓜,找到跳过来的地址
第一个jmp指令
- 我们发现了关键的字符串,以此判断,此je指令为根据输入结果判断打开哪个提示框
真正的跳转点
- 从此指令上翻找到一条cmp指令,在此指令下断
第一个cmp指令
- 重新点击确定,断点在cmp指令断下,此时观察堆栈,找到cmp的两个参数,一个是我们输入的serial,一个是算法生成的serial,准备定位“585308”生成的地方,有两个思路。
cmp的堆栈
思路一
- 来到图中的地方,首先在位置1处找到edi的内容,然后在位置2处找到ecx的内容,我们发现ecx中存储的即为“585308”,ecx又来源于位置2
定位关键数据来源
- 在[ebp-0x1C]下硬件写入断点,点击ok按钮来到下图位置
0x12F4C4硬件断点
- [esp+0x4]存的内容为0x0091BE40,在0x0091BE40下硬件写入断点,来到下图位置
0x91BE40内存断点
- 因为算法不可能在vb虚拟机的dll中,也不可能在系统的dll中,所以一路alt+F9回到用户领空,来到0x402458位置,下断点,重新点击ok按钮,断点在0x402458位置断下,我们看到eax存储的为“585308”,再往上翻就是算法代码
- 这种思路有可能不能一次就接近算法位置,重复这个过程,最终会进入算法领空
思路二
- 来到这个函数的头部下断点,点击ok按钮,然后F8单步执行,观察栈帧和寄存器,直到看到关键数据,如果关键数据来源于子函数,下断点进入
- 重复这个过程,直到定位到算法位置
0x4 算法解析
- 本例的算法较简单,来到地址0x402412地址处下断,单步分析
算法体
- 最终得出算法 result = len(Name) * 0x17CFB + ASCII(Name首字符)
|
免费评分
-
参与人数 3 | 威望 +1 |
吾爱币 +9 |
热心值 +3 |
收起
理由
|
Hmily
| + 1 |
+ 7 |
+ 1 |
欢迎分析讨论交流,吾爱破解论坛有你更精彩! |
FleTime
| |
+ 1 |
+ 1 |
欢迎分析讨论交流,吾爱破解论坛有你更精彩! |
陈世界
| |
+ 1 |
+ 1 |
感谢发布原创作品,吾爱破解论坛因你更精彩! |
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|