吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3975|回复: 3
收起左侧

[原创] 160CrackMe之002(Afkayas.1)

[复制链接]
一米丶阳光 发表于 2019-10-22 18:08
本帖最后由 一米丶阳光 于 2019-10-23 11:28 编辑

0x1 环境与工具

  • 吾爱破解虚拟机2.0
  • PEID、吾爱破解版OD

0x2 查壳

  • 将PE文件拖入PEID

    查壳

    查壳

    0x3 定位注册算法

  • 将PE文件拖入OD,F9运行
  • 随意填入Name和Serial,点击OK按钮,不出意外肯定会弹出错误提示(如果弹出成功可以去买彩票了)

    填入name和serial

    填入name和serial

    错误框

    错误框
  • F12暂停运行,alt+F9回到用户领空,点击错误提示框的确定按钮,OD回到用户领空断下
  • 从断点处往上翻,遇到第一个jmp指令,我们看到这个jmp指令跳过了错误提示框的代码,以此推断这条jmp指令没有执行,所以在jmp指令的下面肯定有从上面跳过来的地方,这条指令很近,紧挨着jmp指令,顺藤摸瓜,找到跳过来的地址

    第一个jmp指令

    第一个jmp指令
  • 我们发现了关键的字符串,以此判断,此je指令为根据输入结果判断打开哪个提示框

    真正的跳转点

    真正的跳转点
  • 从此指令上翻找到一条cmp指令,在此指令下断

    第一个cmp指令

    第一个cmp指令
  • 重新点击确定,断点在cmp指令断下,此时观察堆栈,找到cmp的两个参数,一个是我们输入的serial,一个是算法生成的serial,准备定位“585308”生成的地方,有两个思路。

    cmp的堆栈

    cmp的堆栈

    思路一

  • 来到图中的地方,首先在位置1处找到edi的内容,然后在位置2处找到ecx的内容,我们发现ecx中存储的即为“585308”,ecx又来源于位置2

    定位关键数据来源

    定位关键数据来源
  • 在[ebp-0x1C]下硬件写入断点,点击ok按钮来到下图位置

    0x12F4C4硬件断点

    0x12F4C4硬件断点
  • [esp+0x4]存的内容为0x0091BE40,在0x0091BE40下硬件写入断点,来到下图位置

    0x91BE40内存断点

    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 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 一米丶阳光 发表于 2019-10-23 09:23
liphily 发表于 2019-10-23 07:15
像这种右边注释的说明,怎么在左边的代码中看出来
我只会简单的je,jmp,mov,add,inc等基本 ...

判断汇编的意思一般通过两种手段:
1.汇编代码中或者右边的注释区域一般会自带一些od分析出来的字符串和导入函数
2.根据调试器执行后,通过观察寄存器区域和堆栈区域进行判断
举例:
1.call dword ptr ds:[<MSVBWM50.#rtcAnsiValueBstr_516>]像这样的指令,我一般会用两种方法分析,第一,去查阅VB的API手册,去判断这个函数的功能,第二,根据这个函数执行后EAX的返回值判断
2.对于普通的je,jmp,mov,add,inc指令对应的汇编,意思都是很直观的,你需要关注的是你想要的数据所在的寄存器或者内存中发生了什么事情

其次就无其他捷径,多加练习,看得多了就熟练了
moshuiNW 发表于 2022-4-21 11:07
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 02:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表